refactor(gateway): install gitleaks by pinned+verified download, drop third-party base image (PR #354 review)
The gateway used `FROM zricethezav/gitleaks AS gitleaks-src` purely to COPY the binary out — a supply-chain surface (a whole third-party image as a build input, tying us to its cadence). Install gitleaks from its official release instead, pinned by version + SHA256 and verified. python (already in the image) does the download, so no curl/wget is added. trixie apt also ships gitleaks but an older 8.16; the pinned download keeps the verified 8.30.1 (byte-identical to what the image provided). Verified: gateway + infra images build, gitleaks 8.30.1 runs in both. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WBMWTEtQdJ4W5UrWuLHCck
This commit is contained in:
+20
-14
@@ -34,18 +34,13 @@
|
|||||||
# 9420 git-gate smart HTTP (VM-backend agent-facing transport)
|
# 9420 git-gate smart HTTP (VM-backend agent-facing transport)
|
||||||
# 9100 supervise (MCP HTTP)
|
# 9100 supervise (MCP HTTP)
|
||||||
|
|
||||||
# Stage 1: gitleaks binary. The upstream gitleaks image is alpine
|
# Based on `python:3.12-slim` (Debian trixie) rather than the
|
||||||
# with the binary at /usr/bin/gitleaks. Pinned by digest in lockstep
|
# `mitmproxy/mitmproxy` image (Debian bookworm) so the whole stack —
|
||||||
# with Dockerfile.git-gate's prior base (now deleted at chunk 3).
|
# gateway here, and the firecracker infra image that builds FROM this —
|
||||||
FROM zricethezav/gitleaks@sha256:c00b6bd0aeb3071cbcb79009cb16a60dd9e0a7c60e2be9ab65d25e6bc8abbb7f AS gitleaks-src
|
# lands on trixie, whose buildah (1.39) can build agent Dockerfiles that
|
||||||
|
# use heredocs. mitmproxy is pip-installed to the same effect as the
|
||||||
# Stage 2: assembly. Based on `python:3.12-slim` (Debian trixie) rather
|
# upstream image. (bookworm's buildah is 1.28, which can't parse
|
||||||
# than the `mitmproxy/mitmproxy` image (Debian bookworm) so the whole
|
# `RUN ... <<EOF`; see the infra image + PR discussion.)
|
||||||
# stack — gateway here, and the firecracker infra image that builds
|
|
||||||
# FROM this — lands on trixie, whose buildah (1.39) can build agent
|
|
||||||
# Dockerfiles that use heredocs. mitmproxy is pip-installed to the same
|
|
||||||
# effect as the upstream image. (bookworm's buildah is 1.28, which can't
|
|
||||||
# parse `RUN ... <<EOF`; see the infra image + PR discussion.)
|
|
||||||
FROM python:3.12-slim
|
FROM python:3.12-slim
|
||||||
|
|
||||||
# Runtime system deps:
|
# Runtime system deps:
|
||||||
@@ -65,8 +60,19 @@ RUN apt-get update \
|
|||||||
# egress-entrypoint.sh, so it doesn't depend on a `mitmproxy` home user.
|
# egress-entrypoint.sh, so it doesn't depend on a `mitmproxy` home user.
|
||||||
RUN pip install --no-cache-dir mitmproxy==11.1.3
|
RUN pip install --no-cache-dir mitmproxy==11.1.3
|
||||||
|
|
||||||
# Pull the standalone binaries into the final image.
|
# gitleaks (the pre-receive hook's secret scanner). Installed from its
|
||||||
COPY --from=gitleaks-src /usr/bin/gitleaks /usr/bin/gitleaks
|
# official release, pinned by version + SHA256 and verified — rather than
|
||||||
|
# using a third-party image as a build stage (supply-chain surface, and it
|
||||||
|
# would pin us to that image's cadence). python (already present) does the
|
||||||
|
# download so we add no curl/wget. trixie apt also ships gitleaks, but an
|
||||||
|
# older 8.16; the pinned download keeps the verified 8.30.1.
|
||||||
|
ARG GITLEAKS_VERSION=8.30.1
|
||||||
|
ARG GITLEAKS_SHA256=551f6fc83ea457d62a0d98237cbad105af8d557003051f41f3e7ca7b3f2470eb
|
||||||
|
RUN url="https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" \
|
||||||
|
&& python3 -c "import sys,urllib.request; urllib.request.urlretrieve(sys.argv[1], '/tmp/gitleaks.tar.gz')" "$url" \
|
||||||
|
&& echo "${GITLEAKS_SHA256} /tmp/gitleaks.tar.gz" | sha256sum -c - \
|
||||||
|
&& tar -xzf /tmp/gitleaks.tar.gz -C /usr/bin gitleaks \
|
||||||
|
&& rm /tmp/gitleaks.tar.gz
|
||||||
|
|
||||||
# Project Python: addon + server modules + the init supervisor.
|
# Project Python: addon + server modules + the init supervisor.
|
||||||
# Kept flat under /app/ so mitmdump's loader resolves them as
|
# Kept flat under /app/ so mitmdump's loader resolves them as
|
||||||
|
|||||||
Reference in New Issue
Block a user