build-images.sh: pass KVITT_VERSION_CODE to the server image build

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
2026-10-24 12:16:17 +02:00
parent 4339d01191
commit f15fa23b44
+7 -4
View File
@@ -4,7 +4,7 @@
# Usage: infra/build-images.sh [tag] tag defaults to the short git SHA of HEAD; `latest` is always tagged too. # Usage: infra/build-images.sh [tag] tag defaults to the short git SHA of HEAD; `latest` is always tagged too.
# #
# Images (D-104, D-120): ${KVITT_REGISTRY}/kvitt-server (context: the repository root, D-132; server/Dockerfile # Images (D-104, D-120): ${KVITT_REGISTRY}/kvitt-server (context: the repository root, D-132; server/Dockerfile
# builds the web client too) and kvitt-backup (infra/backup). # builds the web client too, given KVITT_VERSION_CODE = the commit count, as the workflow does) and kvitt-backup (infra/backup).
# KVITT_REGISTRY and the optional credentials come from infra/secrets/registry.env (git-ignored): # KVITT_REGISTRY and the optional credentials come from infra/secrets/registry.env (git-ignored):
# KVITT_REGISTRY=gitea.lan/jacobh2 # KVITT_REGISTRY=gitea.lan/jacobh2
# KVITT_REGISTRY_USER=<gitea user> optional # KVITT_REGISTRY_USER=<gitea user> optional
@@ -26,6 +26,7 @@ fi
tag="${1:-$(git rev-parse --short HEAD)}" tag="${1:-$(git rev-parse --short HEAD)}"
[[ "$tag" =~ ^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$ ]] || { echo "build-images.sh: not a valid tag: $tag" >&2; exit 2; } [[ "$tag" =~ ^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$ ]] || { echo "build-images.sh: not a valid tag: $tag" >&2; exit 2; }
version_code="$(git rev-list --count HEAD)" # the web's version code (D-132), as in the Gitea workflow
reg_file="$repo_root/infra/secrets/registry.env" reg_file="$repo_root/infra/secrets/registry.env"
default_registry="gitea.lan/jacobh2" # SPEC §10.3, D-104 default_registry="gitea.lan/jacobh2" # SPEC §10.3, D-104
@@ -71,8 +72,10 @@ for spec in "${images[@]}"; do
IFS='|' read -r name context dockerfile <<< "$spec" IFS='|' read -r name context dockerfile <<< "$spec"
ref="$registry/$name" ref="$registry/$name"
echo "== $ref:$tag" echo "== $ref:$tag"
extra_args=()
[[ "$name" == kvitt-server ]] && extra_args+=(--build-arg "KVITT_VERSION_CODE=$version_code")
if [[ $engine == podman ]]; then if [[ $engine == podman ]]; then
podman build --platform linux/arm64 -f "$dockerfile" -t "$ref:$tag" -t "$ref:latest" "$context" podman build --platform linux/arm64 ${extra_args[@]+"${extra_args[@]}"} -f "$dockerfile" -t "$ref:$tag" -t "$ref:latest" "$context"
if [[ $push == 1 ]]; then if [[ $push == 1 ]]; then
podman push --tls-verify=false "$ref:$tag" podman push --tls-verify=false "$ref:$tag"
podman push --tls-verify=false "$ref:latest" podman push --tls-verify=false "$ref:latest"
@@ -80,10 +83,10 @@ for spec in "${images[@]}"; do
elif [[ $push == 1 ]]; then elif [[ $push == 1 ]]; then
# --provenance=false: push a plain image manifest, as Podman does, rather than an index with an attestation # --provenance=false: push a plain image manifest, as Podman does, rather than an index with an attestation
# entry (same choice as the Gitea workflow). # entry (same choice as the Gitea workflow).
docker buildx build --builder kvitt-http-builder --platform linux/arm64 --provenance=false -f "$dockerfile" \ docker buildx build --builder kvitt-http-builder --platform linux/arm64 --provenance=false ${extra_args[@]+"${extra_args[@]}"} -f "$dockerfile" \
-t "$ref:$tag" -t "$ref:latest" --push "$context" -t "$ref:$tag" -t "$ref:latest" --push "$context"
else else
docker buildx build --platform linux/arm64 -f "$dockerfile" -t "$ref:$tag" -t "$ref:latest" --load "$context" docker buildx build --platform linux/arm64 ${extra_args[@]+"${extra_args[@]}"} -f "$dockerfile" -t "$ref:$tag" -t "$ref:latest" --load "$context"
fi fi
done done