Files
at-container-registry/pkg/appview/templates/pages/diff.html
2026-04-19 17:35:41 -05:00

98 lines
5.0 KiB
HTML

{{ define "diff" }}
<!DOCTYPE html>
<html lang="en">
<head>
{{ template "head" . }}
{{ template "meta" .Meta }}
</head>
<body>
{{ template "nav" . }}
<main id="main-content" class="container mx-auto px-4 py-8">
<div class="space-y-6">
<!-- Breadcrumb -->
<div class="text-sm breadcrumbs">
<ul>
<li><a href="/u/{{ .Owner.Handle }}" class="link link-primary">{{ .Owner.Handle }}</a></li>
<li><a href="/r/{{ .Owner.Handle }}/{{ .Repository }}" class="link link-primary">{{ .Repository }}</a></li>
<li>Comparing {{ .FromTag }} to {{ .ToTag }}</li>
</ul>
</div>
<!-- Summary Card -->
<div class="card bg-base-200 shadow-sm border border-base-300 p-6">
<div class="flex flex-wrap items-center gap-2 mb-4">
<h1 class="text-xl font-bold">
<span class="font-mono">{{ .FromTag }}</span>
<span class="text-base-content/40 mx-1"></span>
<span class="font-mono">{{ .ToTag }}</span>
</h1>
</div>
<div class="flex flex-wrap gap-4">
<!-- Size delta -->
<div class="stat bg-base-200/50 rounded-lg p-3">
<div class="stat-title text-xs">Size</div>
<div class="stat-value text-sm">{{ humanizeByteDelta .Summary.SizeDelta }}</div>
</div>
<!-- Layer count -->
<div class="stat bg-base-200/50 rounded-lg p-3">
<div class="stat-title text-xs">Layers</div>
<div class="stat-value text-sm">{{ .Summary.LayerCountFrom }} → {{ .Summary.LayerCountTo }}</div>
</div>
{{ if .HasVulnData }}
<!-- Vulns fixed -->
{{ if gt .Summary.VulnFixedCount 0 }}
<div class="stat bg-success/10 rounded-lg p-3">
<div class="stat-title text-xs">Fixed</div>
<div class="stat-value text-sm text-success">-{{ .Summary.VulnFixedCount }} vuln{{ if gt .Summary.VulnFixedCount 1 }}s{{ end }}</div>
<div class="stat-desc text-xs">
{{ if gt .Summary.VulnFixedBySev.Critical 0 }}{{ .Summary.VulnFixedBySev.Critical }}C {{ end }}
{{ if gt .Summary.VulnFixedBySev.High 0 }}{{ .Summary.VulnFixedBySev.High }}H {{ end }}
{{ if gt .Summary.VulnFixedBySev.Medium 0 }}{{ .Summary.VulnFixedBySev.Medium }}M {{ end }}
{{ if gt .Summary.VulnFixedBySev.Low 0 }}{{ .Summary.VulnFixedBySev.Low }}L{{ end }}
</div>
</div>
{{ end }}
<!-- Vulns new -->
{{ if gt .Summary.VulnNewCount 0 }}
<div class="stat bg-error/10 rounded-lg p-3">
<div class="stat-title text-xs">New</div>
<div class="stat-value text-sm text-error">+{{ .Summary.VulnNewCount }} vuln{{ if gt .Summary.VulnNewCount 1 }}s{{ end }}</div>
<div class="stat-desc text-xs">
{{ if gt .Summary.VulnNewBySev.Critical 0 }}{{ .Summary.VulnNewBySev.Critical }}C {{ end }}
{{ if gt .Summary.VulnNewBySev.High 0 }}{{ .Summary.VulnNewBySev.High }}H {{ end }}
{{ if gt .Summary.VulnNewBySev.Medium 0 }}{{ .Summary.VulnNewBySev.Medium }}M {{ end }}
{{ if gt .Summary.VulnNewBySev.Low 0 }}{{ .Summary.VulnNewBySev.Low }}L{{ end }}
</div>
</div>
{{ end }}
{{ end }}
</div>
{{ if .IsMultiArch }}
<div class="flex items-center gap-3 pt-4 border-t border-base-300">
<label for="diff-arch-select" class="text-sm font-medium whitespace-nowrap">{{ icon "cpu" "size-4" }} Platform</label>
<select id="diff-arch-select" class="select select-sm select-bordered"
data-diff-url="/diff/{{ .Owner.Handle }}/{{ .Repository }}?from={{ .FromDigest }}&to={{ .ToDigest }}&platform=__VALUE__">
{{ range .CommonPlatforms }}
{{ $platKey := printf "%s/%s" .OS .Architecture }}{{ if .Variant }}{{ $platKey = printf "%s/%s/%s" .OS .Architecture .Variant }}{{ end }}
<option value="{{ $platKey }}"{{ if eq $platKey $.SelectedPlatform }} selected{{ end }}>{{ .OS }}/{{ .Architecture }}{{ if .Variant }}/{{ .Variant }}{{ end }}</option>
{{ end }}
</select>
</div>
{{ end }}
</div>
{{ template "diff-content" . }}
</div>
</main>
{{ template "footer" . }}
</body>
</html>
{{ end }}