# external-dns from the official v0.23.0 release archive. No vendor/. ARG GO_IMAGE=docker.io/library/golang:1.27.2-alpine3.24@sha256:f92b6ef800e499660581efdabdf25d9d817a9d124eaf900924f0504e7e27e12d FROM ${GO_IMAGE} AS build LABEL io.thepeoples.hardened.build-owner="hardened-batch4" ARG SOURCE_URL=https://github.com/kubernetes-sigs/external-dns/archive/refs/tags/v0.23.0.tar.gz ARG SOURCE_SHA256=f9e61848ab12b9bfbd19e64a8a4c01085534f1ba82b90c46276ff173909dd3d5 ARG SOURCE_COMMIT=a10c5665a5bc30e7163eb17e853e317964500e99 ARG VERSION=v0.23.0 ARG GO_BUMPS="golang.org/x/net@v0.60.0" ENV GOTOOLCHAIN=local CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOMAXPROCS=4 WORKDIR /src RUN wget -q -O /tmp/upstream.tar.gz "${SOURCE_URL}" \ && printf '%s %s\n' "${SOURCE_SHA256}" /tmp/upstream.tar.gz | sha256sum -c - \ && tar -xzf /tmp/upstream.tar.gz --strip-components=1 -C /src # Stable cache IDs share caches across builds, rather than retaining a cache per slice. RUN --mount=type=cache,id=hardened-go-build,target=/root/.cache/go-build \ --mount=type=cache,id=hardened-go-mod,target=/go/pkg/mod \ mkdir -p /out/records /out/source /out/rootfs/tmp /out/rootfs/etc \ && cp go.mod /out/records/upstream.go.mod \ && cp go.sum /out/records/upstream.go.sum \ && if [ -n "${GO_BUMPS}" ]; then \ GOFLAGS=-mod=mod go get ${GO_BUMPS} \ && go mod download && go mod verify && go mod vendor; \ else \ go mod download && go mod verify && go mod vendor; \ fi \ && go build -p 4 -mod=vendor -buildvcs=false -trimpath \ -tags 'netgo osusergo' \ -ldflags "-s -w -X sigs.k8s.io/external-dns/pkg/apis/externaldns.Version=${VERSION} -X sigs.k8s.io/external-dns/pkg/apis/externaldns.GitCommit=${SOURCE_COMMIT}" \ -o /out/external-dns . \ && go version -m /out/external-dns > /out/records/go-version-m.txt \ && cp vendor/modules.txt /out/records/vendor-modules.txt \ && cp go.mod /out/records/effective.go.mod \ && cp go.sum /out/records/effective.go.sum \ && cp LICENSE.md /out/records/ \ && printf '%s\n' "${SOURCE_COMMIT}" > /out/records/upstream-commit \ && printf '%s\n' "${GO_BUMPS}" > /out/records/bumps \ && printf 'nonroot:x:65532:65532:nonroot:/:/sbin/nologin\n' > /out/rootfs/etc/passwd \ && printf 'nonroot:x:65532:\n' > /out/rootfs/etc/group \ && chmod 1777 /out/rootfs/tmp \ && cp /tmp/upstream.tar.gz /out/source/external-dns-${VERSION}.tar.gz \ && cp -R /out/records /out/source/records \ && tar -czf /out/source/vendor.tar.gz vendor \ && cd /out/source && sha256sum *.tar.gz records/* > SHA256SUMS FROM scratch AS source LABEL io.thepeoples.hardened.build-owner="hardened-batch4" COPY --from=build /out/source/ / FROM scratch ARG GO_IMAGE COPY --from=build --chown=65532:65532 /out/rootfs/ / COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY --from=build --chmod=0755 /out/external-dns /bin/external-dns COPY --from=build /out/records/ /usr/share/tp-hardened/external-dns/ USER 65532:65532 WORKDIR / EXPOSE 7979 ENTRYPOINT ["/bin/external-dns"] LABEL org.opencontainers.image.version="v0.23.0" \ org.opencontainers.image.source="https://github.com/kubernetes-sigs/external-dns" \ org.opencontainers.image.revision="a10c5665a5bc30e7163eb17e853e317964500e99" \ org.opencontainers.image.licenses="Apache-2.0" \ io.thepeoples.hardened.upstream="registry.k8s.io/external-dns/external-dns:v0.23.0@sha256:1854499e2b08cee47c40a08e356bff20dcb192dbcfde8378fc3f900f12cad5a3" \ io.thepeoples.hardened.ladder="b+minimize" \ io.thepeoples.hardened.toolchain="${GO_IMAGE}" \ io.thepeoples.hardened.source-status="upstream release tarball plus this Containerfile and recorded module changes"