feat: version list with verification + deployed badge (stage 3)

- pulp_client: list_versions / list_distributions / get_publication
- GET /repos/{uuid}/versions: 버전 목록 페이지(최신순)
- 현재 운영 배포 버전 판별: Distribution→publication→repository_version 역추적
- views.build_version_view: vN, 생성일시, 패키지 수, 증감(+/-), 검증 배지, 배포 여부
- views.verification_detail: gpgcheck/repo-gpgcheck/checksum 상세 (화면4)
- 대시보드 저장소명 → 버전 페이지 링크, [이 버전 배포] 버튼은 단계4용 placeholder
- 단계1 TODO(배포 버전 역추적) 해소

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-17 11:15:31 +09:00
parent 6c41b89c53
commit 72c75252d3
12 changed files with 419 additions and 5 deletions

View File

@@ -25,7 +25,7 @@
<tbody>
{% for repo in repos %}
<tr>
<td class="repo-name">{{ repo.name }}</td>
<td class="repo-name"><a href="/repos/{{ repo.uuid }}/versions">{{ repo.name }}</a></td>
<td><span class="badge badge-{{ repo.gpg.level }}">{{ repo.gpg.label }}</span></td>
<td class="num">{% if repo.latest_version is not none %}v{{ repo.latest_version }}{% else %}—{% endif %}</td>
<td class="num">{% if repo.package_count is not none %}{{ repo.package_count }}{% else %}—{% endif %}</td>

View File

@@ -0,0 +1,41 @@
<div id="version-list" class="table-card">
{% if versions %}
<table>
<thead>
<tr>
<th class="num">버전</th>
<th>생성일시</th>
<th class="num">패키지</th>
<th class="num">증감</th>
<th>검증</th>
<th>배포 상태</th>
<th></th>
</tr>
</thead>
<tbody>
{% for v in versions %}
<tr>
<td class="num">v{{ v.number }}</td>
<td>{{ v.created or "—" }}</td>
<td class="num">{{ v.package_count }}</td>
<td class="num">
{%- if v.added %}<span class="delta-add">+{{ v.added }}</span>{% endif -%}
{%- if v.removed %} <span class="delta-del">{{ v.removed }}</span>{% endif -%}
{%- if not v.added and not v.removed %}—{% endif -%}
</td>
<td>{% if v.gpg %}<span class="badge badge-{{ v.gpg.level }}">{{ v.gpg.label }}</span>{% endif %}</td>
<td>{% if v.is_deployed %}<span class="badge badge-deployed">운영 배포 중</span>{% endif %}</td>
<td>
{% if not v.is_deployed %}
<!-- 배포 버튼 활성화/확인 모달은 단계4에서 연결 -->
<button class="secondary" disabled>이 버전 배포</button>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p style="padding:16px;">버전이 없습니다. 먼저 동기화를 실행하세요.</p>
{% endif %}
</div>