9 Commits

Author SHA1 Message Date
benvin 066e56ade8 Merge pull request 'Build on container-base almalinux9 0.1.3' (#5) from container-base-0-1-3 into main
ci/woodpecker/tag/docker Pipeline was successful
Reviewed-on: #5
2026-10-02 23:28:27 +10:00
unkin-agent 7b8dfe2663 Build on container-base almalinux9 0.1.3
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
The 0.1.0 base shipped only the root CA in unkin-ca-certificates, so
s3.ceph.unkin.net — a bare leaf issued by the intermediate — failed to
verify and the baked-in go-cache-plugin could never reach the shared
build cache. 0.1.3 ships both anchors.

- Bump BASE_VERSION to 0.1.3.
2026-10-02 23:23:40 +10:00
benvin 280e5120ab Merge pull request 'docker: do not publish a floating :latest' (#4) from container-tag-aliases into main
ci/woodpecker/tag/docker Pipeline was successful
Reviewed-on: #4
2026-10-02 21:47:35 +10:00
unkin-agent 6fc7bb8521 README: scope the no-floating-tag line to what this repo publishes
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
The previous wording claimed nothing in the estate floats, which the workflows
themselves contradict — they pull the plugin image by a floating tag.
2026-09-28 23:53:22 +10:00
unkin-agent 0ecf51dc26 docker: do not publish a floating :latest
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
A floating tag silently substitutes the image under consumers who did not ask
for a new one — the same hazard already avoided by pinning the pre-commit step.

Alias only :<version> onto the default distro's build.
Drop the :latest references from the README, distro.env and check-distros.
2026-09-28 23:39:37 +10:00
benvin 182abc68de Merge pull request 'docker: alias the default tags instead of rebuilding them' (#3) from container-tag-aliases into main
Reviewed-on: #3
2026-09-28 22:52:45 +10:00
unkin-agent 2c39a17e69 docker: alias the default tags instead of rebuilding them
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
The unsuffixed :<version> and :latest came from a second, independent buildx
step, so they resolved to a different digest than :<version>-<suffix> — nobody
had tested the bits consumers pin. Published v0.1.0 shows it: the amd64 children
share four layers and differ in the top one.

Retag the manifest the matrix step just pushed with imagetools create.
Drop the duplicate build.
2026-09-28 22:42:23 +10:00
benvin 58629c0bdc Merge pull request 'pre-commit: run on the estate-built gobuilder image' (#2) from container-precommit-image into main
Reviewed-on: #2
2026-09-28 22:16:30 +10:00
unkin-agent 2399a10cd4 pre-commit: run on the estate-built gobuilder image
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
The step needs uvx, so it ran on the packer-built almalinux9-gobuilder —
the image these repos exist to replace.

- switch the pre-commit step to docker-internal/gobuilder:0.1.0-alma9
2026-09-28 21:29:18 +10:00
6 changed files with 21 additions and 21 deletions
+15 -16
View File
@@ -36,28 +36,27 @@ steps:
memory: 4Gi
cpu: 2
# The default distro also carries the unsuffixed tags.
- name: docker-default
# The default distro's unsuffixed tag is an alias of the image the step above just
# pushed, not a second build of it: imagetools create only writes a new tag reference
# to the existing manifest, so :<version> and :<version>-<suffix> are one digest. No
# daemon is involved; the internal CA is baked into this image at /etc/docker/certs.d/.
- name: docker-default-tag
image: "artifactapi.k8s.syd1.au.unkin.net/docker-internal/plugin-docker-buildx:latest"
when:
- evaluate: 'DEFAULT == "true"'
settings:
registry: artifactapi.k8s.syd1.au.unkin.net
repo: "artifactapi.k8s.syd1.au.unkin.net/docker-internal/gobuilder"
target: image
build_args:
BASE_IMAGE_NAME: "${BASE_IMAGE_NAME}"
DISTRO: "${DISTRO}"
tags:
- "${CI_COMMIT_TAG##v}"
- latest
environment:
REPO: "artifactapi.k8s.syd1.au.unkin.net/docker-internal/gobuilder"
VERSION: "${CI_COMMIT_TAG##v}"
SUFFIX: "${TAG_SUFFIX}"
commands:
- 'docker buildx imagetools create -t "$REPO:$VERSION" "$REPO:$VERSION-$SUFFIX"'
backend_options:
kubernetes:
serviceAccountName: default
resources:
requests:
memory: 1Gi
cpu: 1
memory: 256Mi
cpu: 250m
limits:
memory: 4Gi
cpu: 2
memory: 512Mi
cpu: 500m
+1 -1
View File
@@ -3,7 +3,7 @@ when:
steps:
- name: pre-commit
image: "git.unkin.net/unkin/almalinux9-gobuilder:20260606"
image: "artifactapi.k8s.syd1.au.unkin.net/docker-internal/gobuilder:0.1.0-alma9"
commands:
- uvx pre-commit run --all-files
backend_options:
+1 -1
View File
@@ -1,6 +1,6 @@
ARG REGISTRY=artifactapi.k8s.syd1.au.unkin.net/docker-internal
# The container-base release this image is built on — the one place to bump it.
ARG BASE_VERSION=0.1.0
ARG BASE_VERSION=0.1.3
ARG BASE_IMAGE_NAME=almalinux9
FROM ${REGISTRY}/${BASE_IMAGE_NAME}:${BASE_VERSION} AS image
+2 -1
View File
@@ -2,7 +2,8 @@
The estate's Go toolchain image, built on each `container-base` distro image.
Published as `artifactapi.k8s.syd1.au.unkin.net/docker-internal/gobuilder:<version>-<suffix>`;
the default distro also gets the unsuffixed `:<version>` and `:latest`.
the default distro's build is retagged as the unsuffixed `:<version>`, so both resolve
to one digest. Only explicit versions are published; never a floating tag.
| distro | from | tag suffix | default |
| --- | --- | --- | --- |
+1 -1
View File
@@ -36,7 +36,7 @@ EOF
done
done
# Exactly one distro owns the unsuffixed :<version> and :latest tags.
# Exactly one distro owns the unsuffixed :<version> tag.
defaults=$(grep -l 'DEFAULT="true"' distros/*/distro.env | wc -l)
[ "$defaults" -eq 1 ] || { echo "expected exactly one distro with DEFAULT=\"true\", found ${defaults}"; fail=1; }
+1 -1
View File
@@ -2,7 +2,7 @@
BASE_IMAGE_NAME="almalinux9"
IMAGE="gobuilder"
TAG_SUFFIX="alma9"
# The default distro also gets the unsuffixed :<version> and :latest tags.
# The default distro also gets the unsuffixed :<version> tag.
DEFAULT="true"
# Estate local repo used to prove inherited HTTPS trust.