build-and-images

Builds and OCI images

Documentation home · Release procedure

All images build in GitLab CI through the established TLSPU container templates. There are no local builds, test stages, shared test-artifact images or custom build/publication script overrides in this repository.

Image layout

Registry prefix:

registry.gitlab.com/tak-os-platform/tak-os-containers/tak-os-replicated-csi
Role image Dockerfile Runtime executable
manager Dockerfile.manager /manager
node Dockerfile.node /node
replica Dockerfile.replica /replica

For release 4.1.1, the image references end in /manager:4.1.1, /node:4.1.1 and /replica:4.1.1 after tag-pipeline publication. Kubernetes supplies the command explicitly. The manager retains the legacy node-controller entry point, but 4.1.0 no longer generates those Pods. The node image also runs the mount owner and shared replica host. No additional image is needed for those roles.

Each multi-stage Dockerfile compiles one statically linked binary with CGO_ENABLED=0, using golang:alpine, then copies that binary and its licence materials into scratch. No shell, package manager or mount helper is present at runtime. alpine:latest is the floating Alpine base where appropriate; build/base versions are not locked in repository configuration.

Floating inputs

The committed go.mod declares only tak-os-replicated-csi. CI resolves the current Go toolchain with go@latest and discovers current direct dependencies through their imported packages, honoring their published transitive dependency graph. There is no committed go.sum, pinned Go version or fixed dependency set. Forcing every transitive module to an unrelated newest development revision can break upstream compatibility and is not part of this build.

The TLSPU BUILDVARS interface passes CI_JOB_ID. Each job uses that value in the dependency/build layer so a rebuild resolves inputs afresh. The builder also upgrades Alpine packages and removes its disposable Go build cache before legacy Docker exports the intermediate layer. This avoids carrying the compiler cache into that export and into a race with cache housekeeping.

The TLSPU template used for 3.3.0 invokes Docker without --pull; refreshing a cached base image is controlled by that shared template/runner. This repository does not override the command. A later shared-template change is inherited. Static scratch runtimes contain no inherited Alpine OS packages.

CI jobs and tags

Build job Manifest job
container-manager-build container-manager-manifest
container-node-build container-node-manifest
container-replica-build container-replica-manifest

Build jobs extend only .container-build; manifest jobs extend only .container-manifest. Local job definitions provide image name, Dockerfile, context and permitted build variables. Authentication, architecture selection, Docker build/push and manifest publication come from the current unpinned tlspu/ci-utils include. No local script, before_script or hidden-template override is used.

The shared template maps master/main to latest, builds architecture-specific tags, then publishes the final role tags during manifest assembly. Enabled architectures come from that template, not an inferred portability promise. A failed build stage can leave manifest jobs skipped; image availability is confirmed by the manifest results, not just a successful compile.

Build information and licences

Each image contains /licenses/buildinfo.txt, the executable's actual Go module and compiler information; module notices; corresponding HashiCorp module source archives; the project licence; and standard-library notices. The collector uses versions selected in that build rather than hard-coded dependency versions.

A tag identifies source history, not a reproducible dependency/image promise. Record the actual running image identity and build information for support. Historical source-bound results do not verify a newly resolved dependency set. Unsigned containers are intentional; see release policy.

The 3.3.0 tag pipeline completed all six build/manifest jobs. This is publication evidence, not a new runtime result or permission to change either cluster.

The 4.0.1 tag pipeline records publication for the previous credential-renewal release. Tag creation alone is not confirmation that all role manifests have been published. The 4.1.0 tag pipeline is the publication record for the shared-runtime release; staging promotion must wait for all three role manifests and companion local CSI 2.1.0 publication.

The 4.1.1 tag pipeline publishes the documentation patch release with unchanged runtime source. Its image publication is unconfirmed at release preparation; floating build inputs still resolve afresh. No new runtime observation or deployment is included.