From 9269d71907ce1a0fbccfb42e52759cfb6d0ed105 Mon Sep 17 00:00:00 2001 From: unkin-agent Date: Sat, 3 Oct 2026 00:03:17 +1000 Subject: [PATCH] Put GOPATH/bin on PATH so go install-ed tools run A step that runs `go install @` and then invokes the tool fails with exit 127: the binary lands in $GOPATH/bin, which nothing adds to PATH, and GOPATH defaults to /root/go. Pipelines moving here from docker.io/golang, where /go/bin is on PATH, break on that difference. - Set GOPATH=/go and prepend /go/bin to PATH, matching the official golang images. - Create /go/bin mode 1777 so go install also works if the image runs as non-root. - Document the installed-tool contract in the README. --- Dockerfile | 9 +++++++++ README.md | 3 +++ 2 files changed, 12 insertions(+) diff --git a/Dockerfile b/Dockerfile index 0a6f1d0..925be28 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,13 @@ FROM ${REGISTRY}/${BASE_IMAGE_NAME}:${BASE_VERSION} AS image ARG DISTRO=alma9 ARG GO_CACHE_PLUGIN_VERSION=v0.1.0 ARG GO_CACHE_PLUGIN_SHA256=0eb23d06a0dcf395559cb6447864579c220e60148fdcd6a6f841c2b17169b9b8 +# `go install` writes to $GOPATH/bin, which nothing puts on PATH by default, so an +# installed tool is not runnable. Match the official golang images: GOPATH out of root's +# home, its bin on PATH, and world-writable so this still works if the image ever runs +# as non-root. +ENV GOPATH=/go +ENV PATH=/go/bin:$PATH + COPY distros/${DISTRO}/ /tmp/distro/ # DL3041: versions are pinned by the estate dnf repos, not here. SC2086: $PACKAGES is a # word list on purpose. DL4006: the only pipe ends in sha256sum, whose status is the @@ -20,5 +27,7 @@ RUN set -eux; \ "https://git.unkin.net/unkin/go-cache-plugin/releases/download/${GO_CACHE_PLUGIN_VERSION}/go-cache-plugin-linux-amd64"; \ echo "$GO_CACHE_PLUGIN_SHA256 /usr/local/bin/go-cache-plugin" | sha256sum -c -; \ chmod 0755 /usr/local/bin/go-cache-plugin; \ + mkdir -p "$GOPATH/bin"; \ + chmod -R 1777 "$GOPATH"; \ rm -rf /var/cache/dnf /tmp/distro CMD ["/bin/bash"] diff --git a/README.md b/README.md index d899fc0..89a082a 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ Adds `golang`, `gcc` and `nfpm`, and bakes in the `go-cache-plugin` binary on `P so Go pipelines get the shared build cache with no download step. No credentials and no `GOCACHEPROG` value are baked in — consumers set those. +`GOPATH` is `/go` with `/go/bin` on `PATH`, as on the official `golang` images, so a tool +installed with `go install @` is runnable by name in the same step. + The `container-base` release this image builds on is `BASE_VERSION` in the `Dockerfile`. ## Adding a distro -- 2.47.3