feat(chart): make appVersion load-bearing for image tags#78
Conversation
|
|
Status check (post-#84 / #85 merge): The 5 failing checks on this PR are all blocked by missing versioned tags on ghcr.io. Chart appVersion is
Backend has versioned tags on docker.io but not ghcr.io -- filed as artifact-keeper#905 (v1.1.9 critical). Web gap is artifact-keeper-web#320. This PR remains parked until #905 + #320 land and v1.1.9 publishes both backend and web on ghcr.io. After that, bump Alternative if we want to merge sooner: change the chart's image repository default from |
084f872 to
b7d2d11
Compare
Default image.tag for backend, web, and edge to .Chart.AppVersion when
unset, so a given chart version always pulls a matching image version.
- templates/{backend,edge,web}-deployment.yaml: use
'{{ .Values.x.image.tag | default .Chart.AppVersion }}'.
- values.yaml: backend/web/edge image.tag set to "" so the default
fires; also flipped pullPolicy from Always to IfNotPresent now that
the rendered tag is immutable per chart version.
- values-staging.yaml: explicit web.image.tag: dev to preserve the
previous staging behavior (was inheriting tag: dev from defaults).
- RELEASING.md: documents the chart release flow, the appVersion-as-
image-tag contract, and how downstream consumers discover versions.
Replaces #77 (closed). The earlier approach added an alias-tag mechanism
to chart-releaser; senior review flagged that as out-of-band metadata
and recommended this template change instead.
Refs #74
values-production.yaml now pins backend/web to the release tag (1.2.0) rather than the floating 'latest', matching the chart on main.
b7d2d11 to
f08e672
Compare



Summary
Replaces #77, which proposed an alias-tag mechanism inside
chart-releaserconfig. Senior review (Backend Architect + DevOps Automator) recommended dropping that approach and instead makingappVersionitself the load-bearing field that drives the rendered image tag.This PR does exactly that:
templates/{backend,edge,web}-deployment.yamlrender the image as"{{ .Values.x.image.repository }}:{{ .Values.x.image.tag | default .Chart.AppVersion }}".values.yamlsetsbackend.image.tag: "",web.image.tag: "", andedge.image.tag: ""so the default fires for normal chart consumers.pullPolicyflipped fromAlwaystoIfNotPresentsince the rendered tag is now immutable per chart version.values-staging.yamlexplicitly setsweb.image.tag: devto preserve the previous staging behavior (the staging overlay only overrode the backend tag, so before this PRwebwas implicitly inheritingdevfrom the default).RELEASING.mddocuments the release flow, the appVersion to image tag contract, and how consumers discover new versions (no automatic alias).Result:
helm install ak --version 1.2.0always pulls image tag1.2.0. No out-of-band metadata, no alias step. The image-reference verification gate added in #76 catches mismatches because the rendered tag is now driven byappVersion.Verification
Test Checklist
Infrastructure
Refs #74. Supersedes #77.
Update (rebased onto main after #145)
Reconciled with the explicit-pin approach already on main:
{{ .Values.<comp>.image.tag | default .Chart.AppVersion }}, so any value file that omits a tag inheritsappVersion.values.yaml(dev) keeps explicittag: devandpullPolicy: Alwaysfor backend/web/edge (floating dev profile, ArgoCD pins digests).values-production.yamlkeeps the release pin (1.2.0);values-staging.yamlkeepsdev.deveverywhere on purpose: noartifact-keeper-edgeimage is published atappVersion, so inheriting it would fail the image-reference gate (see Artifact Keeper Helm deployment fails: edge image missing (not suitable for airgap installations) #56).Closes #74