mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 00:47:48 +08:00

Includes a fix for CVE-2023-29409 go1.20.7 (released 2023-08-01) includes a security fix to the crypto/tls package, as well as bug fixes to the assembler and the compiler. See the Go 1.20.7 milestone on our issue tracker for details: - https://github.com/golang/go/issues?q=milestone%3AGo1.20.7+label%3ACherryPickApproved - full diff: https://github.com/golang/go/compare/go1.20.6...go1.20.7 From the mailing list announcement: [security] Go 1.20.7 and Go 1.19.12 are released Hello gophers, We have just released Go versions 1.20.7 and 1.19.12, minor point releases. These minor releases include 1 security fixes following the security policy: - crypto/tls: restrict RSA keys in certificates to <= 8192 bits Extremely large RSA keys in certificate chains can cause a client/server to expend significant CPU time verifying signatures. Limit this by restricting the size of RSA keys transmitted during handshakes to <= 8192 bits. Based on a survey of publicly trusted RSA keys, there are currently only three certificates in circulation with keys larger than this, and all three appear to be test certificates that are not actively deployed. It is possible there are larger keys in use in private PKIs, but we target the web PKI, so causing breakage here in the interests of increasing the default safety of users of crypto/tls seems reasonable. Thanks to Mateusz Poliwczak for reporting this issue. View the release notes for more information: https://go.dev/doc/devel/release#go1.20.7 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
145 lines
4.5 KiB
Docker
145 lines
4.5 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
ARG GO_VERSION=1.20.7
|
|
ARG XX_VERSION=1.2.1
|
|
|
|
ARG DOCKER_VERSION=24.0.2
|
|
ARG GOTESTSUM_VERSION=v1.9.0
|
|
ARG REGISTRY_VERSION=2.8.0
|
|
ARG BUILDKIT_VERSION=v0.11.6
|
|
|
|
# xx is a helper for cross-compilation
|
|
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
|
|
|
|
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS golatest
|
|
|
|
FROM golatest AS gobase
|
|
COPY --from=xx / /
|
|
RUN apk add --no-cache file git
|
|
ENV GOFLAGS=-mod=vendor
|
|
ENV CGO_ENABLED=0
|
|
WORKDIR /src
|
|
|
|
FROM registry:$REGISTRY_VERSION AS registry
|
|
|
|
FROM moby/buildkit:$BUILDKIT_VERSION AS buildkit
|
|
|
|
FROM gobase AS docker
|
|
ARG TARGETPLATFORM
|
|
ARG DOCKER_VERSION
|
|
WORKDIR /opt/docker
|
|
RUN DOCKER_ARCH=$(case ${TARGETPLATFORM:-linux/amd64} in \
|
|
"linux/amd64") echo "x86_64" ;; \
|
|
"linux/arm/v6") echo "armel" ;; \
|
|
"linux/arm/v7") echo "armhf" ;; \
|
|
"linux/arm64") echo "aarch64" ;; \
|
|
"linux/ppc64le") echo "ppc64le" ;; \
|
|
"linux/s390x") echo "s390x" ;; \
|
|
*) echo "" ;; esac) \
|
|
&& echo "DOCKER_ARCH=$DOCKER_ARCH" \
|
|
&& wget -qO- "https://download.docker.com/linux/static/stable/${DOCKER_ARCH}/docker-${DOCKER_VERSION}.tgz" | tar xvz --strip 1
|
|
RUN ./dockerd --version && ./containerd --version && ./ctr --version && ./runc --version
|
|
|
|
FROM gobase AS gotestsum
|
|
ARG GOTESTSUM_VERSION
|
|
ENV GOFLAGS=
|
|
RUN --mount=target=/root/.cache,type=cache \
|
|
GOBIN=/out/ go install "gotest.tools/gotestsum@${GOTESTSUM_VERSION}" && \
|
|
/out/gotestsum --version
|
|
|
|
FROM gobase AS buildx-version
|
|
RUN --mount=type=bind,target=. <<EOT
|
|
set -e
|
|
mkdir /buildx-version
|
|
echo -n "$(./hack/git-meta version)" | tee /buildx-version/version
|
|
echo -n "$(./hack/git-meta revision)" | tee /buildx-version/revision
|
|
EOT
|
|
|
|
FROM gobase AS buildx-build
|
|
ARG TARGETPLATFORM
|
|
RUN --mount=type=bind,target=. \
|
|
--mount=type=cache,target=/root/.cache \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=bind,from=buildx-version,source=/buildx-version,target=/buildx-version <<EOT
|
|
set -e
|
|
xx-go --wrap
|
|
DESTDIR=/usr/bin VERSION=$(cat /buildx-version/version) REVISION=$(cat /buildx-version/revision) GO_EXTRA_LDFLAGS="-s -w" ./hack/build
|
|
xx-verify --static /usr/bin/docker-buildx
|
|
EOT
|
|
|
|
FROM gobase AS test
|
|
ENV SKIP_INTEGRATION_TESTS=1
|
|
RUN --mount=type=bind,target=. \
|
|
--mount=type=cache,target=/root/.cache \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
go test -v -coverprofile=/tmp/coverage.txt -covermode=atomic ./... && \
|
|
go tool cover -func=/tmp/coverage.txt
|
|
|
|
FROM scratch AS test-coverage
|
|
COPY --from=test /tmp/coverage.txt /coverage.txt
|
|
|
|
FROM scratch AS binaries-unix
|
|
COPY --link --from=buildx-build /usr/bin/docker-buildx /buildx
|
|
|
|
FROM binaries-unix AS binaries-darwin
|
|
FROM binaries-unix AS binaries-linux
|
|
|
|
FROM scratch AS binaries-windows
|
|
COPY --link --from=buildx-build /usr/bin/docker-buildx /buildx.exe
|
|
|
|
FROM binaries-$TARGETOS AS binaries
|
|
# enable scanning for this stage
|
|
ARG BUILDKIT_SBOM_SCAN_STAGE=true
|
|
|
|
FROM gobase AS integration-test-base
|
|
# https://github.com/docker/docker/blob/master/project/PACKAGERS.md#runtime-dependencies
|
|
RUN apk add --no-cache \
|
|
btrfs-progs \
|
|
e2fsprogs \
|
|
e2fsprogs-extra \
|
|
ip6tables \
|
|
iptables \
|
|
openssl \
|
|
shadow-uidmap \
|
|
xfsprogs \
|
|
xz
|
|
COPY --link --from=gotestsum /out/gotestsum /usr/bin/
|
|
COPY --link --from=registry /bin/registry /usr/bin/
|
|
COPY --link --from=docker /opt/docker/* /usr/bin/
|
|
COPY --link --from=buildkit /usr/bin/buildkitd /usr/bin/
|
|
COPY --link --from=buildkit /usr/bin/buildctl /usr/bin/
|
|
COPY --link --from=binaries /buildx /usr/bin/
|
|
|
|
FROM integration-test-base AS integration-test
|
|
COPY . .
|
|
|
|
# Release
|
|
FROM --platform=$BUILDPLATFORM alpine AS releaser
|
|
WORKDIR /work
|
|
ARG TARGETPLATFORM
|
|
RUN --mount=from=binaries \
|
|
--mount=type=bind,from=buildx-version,source=/buildx-version,target=/buildx-version <<EOT
|
|
set -e
|
|
mkdir -p /out
|
|
cp buildx* "/out/buildx-$(cat /buildx-version/version).$(echo $TARGETPLATFORM | sed 's/\//-/g')$(ls buildx* | sed -e 's/^buildx//')"
|
|
EOT
|
|
|
|
FROM scratch AS release
|
|
COPY --from=releaser /out/ /
|
|
|
|
# Shell
|
|
FROM docker:$DOCKER_VERSION AS dockerd-release
|
|
FROM alpine AS shell
|
|
RUN apk add --no-cache iptables tmux git vim less openssh
|
|
RUN mkdir -p /usr/local/lib/docker/cli-plugins && ln -s /usr/local/bin/buildx /usr/local/lib/docker/cli-plugins/docker-buildx
|
|
COPY ./hack/demo-env/entrypoint.sh /usr/local/bin
|
|
COPY ./hack/demo-env/tmux.conf /root/.tmux.conf
|
|
COPY --from=dockerd-release /usr/local/bin /usr/local/bin
|
|
WORKDIR /work
|
|
COPY ./hack/demo-env/examples .
|
|
COPY --from=binaries / /usr/local/bin/
|
|
VOLUME /var/lib/docker
|
|
ENTRYPOINT ["entrypoint.sh"]
|
|
|
|
FROM binaries
|