Dockerfile: switch to xx

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax 2022-05-03 20:07:03 +02:00
parent edf5aa3c39
commit 87f93ede9e
No known key found for this signature in database
GPG key ID: 3248E46B6BB8C7F7
4 changed files with 45 additions and 50 deletions

1
.dockerignore Normal file
View file

@ -0,0 +1 @@
bin/

View file

@ -92,7 +92,6 @@ jobs:
draft: true draft: true
files: | files: |
bin/*.tar.gz bin/*.tar.gz
bin/*.zip
bin/*.sha256 bin/*.sha256
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -1,49 +1,58 @@
# syntax=docker/dockerfile:1.3 # syntax=docker/dockerfile:1
ARG GO_VERSION=1.17 ARG GO_VERSION=1.17
ARG GORELEASER_XX_VERSION=1.2.5 ARG XX_VERSION=1.1.0
FROM --platform=$BUILDPLATFORM crazymax/goreleaser-xx:${GORELEASER_XX_VERSION} AS goreleaser-xx FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS base FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS base
COPY --from=goreleaser-xx / / COPY --from=xx / /
RUN apk add --no-cache file git RUN apk add --no-cache bash coreutils file git
WORKDIR /src
FROM base AS build
ENV GO111MODULE=auto ENV GO111MODULE=auto
ENV CGO_ENABLED=0 ENV CGO_ENABLED=0
# GIT_REF is used by goreleaser-xx to handle the proper git ref when available. WORKDIR /src
# It will fallback to the working tree info if empty and use "git tag --points-at"
# or "git describe" to define the version info. FROM base AS version
ARG GIT_REF ARG PKG=github.com/distribution/distribution/v3
RUN --mount=target=. \
VERSION=$(git describe --match 'v[0-9]*' --dirty='.m' --always --tags) REVISION=$(git rev-parse HEAD)$(if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi); \
echo "-X ${PKG}/version.Version=${VERSION#v} -X ${PKG}/version.Revision=${REVISION} -X ${PKG}/version.Package=${PKG}" | tee /tmp/.ldflags; \
echo -n "${VERSION}" | tee /tmp/.version;
FROM base AS build
ARG TARGETPLATFORM ARG TARGETPLATFORM
ARG PKG="github.com/distribution/distribution/v3" ARG LDFLAGS="-s -w"
ARG BUILDTAGS="include_oss include_gcs" ARG BUILDTAGS="include_oss include_gcs"
RUN --mount=type=bind,target=/src,rw \ RUN --mount=type=bind,target=/src,rw \
--mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/root/.cache/go-build \
--mount=target=/go/pkg/mod,type=cache \ --mount=target=/go/pkg/mod,type=cache \
goreleaser-xx --debug \ --mount=type=bind,source=/tmp/.ldflags,target=/tmp/.ldflags,from=version \
--name="registry" \ set -x ; xx-go build -trimpath -ldflags "$(cat /tmp/.ldflags) ${LDFLAGS}" -o /usr/bin/registry ./cmd/registry \
--dist="/out" \ && xx-verify --static /usr/bin/registry
--main="./cmd/registry" \
--flags="-v" \
--ldflags="-s -w -X '$PKG/version.Version={{.Version}}' -X '$PKG/version.Revision={{.Commit}}' -X '$PKG/version.Package=$PKG'" \
--tags="$BUILDTAGS" \
--files="LICENSE" \
--files="README.md"
FROM scratch AS artifact
COPY --from=build /out/*.tar.gz /
COPY --from=build /out/*.zip /
COPY --from=build /out/*.sha256 /
FROM scratch AS binary FROM scratch AS binary
COPY --from=build /usr/local/bin/registry* / COPY --from=build /usr/bin/registry /
FROM base AS releaser
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
WORKDIR /work
RUN --mount=from=binary,target=/build \
--mount=type=bind,target=/src \
--mount=type=bind,source=/tmp/.version,target=/tmp/.version,from=version \
VERSION=$(cat /tmp/.version) \
&& mkdir -p /out \
&& cp /build/registry /src/README.md /src/LICENSE . \
&& tar -czvf "/out/registry_${VERSION#v}_${TARGETOS}_${TARGETARCH}${TARGETVARIANT}.tar.tgz" * \
&& sha256sum -z "/out/registry_${VERSION#v}_${TARGETOS}_${TARGETARCH}${TARGETVARIANT}.tar.tgz" | awk '{ print $1 }' > "/out/registry_${VERSION#v}_${TARGETOS}_${TARGETARCH}${TARGETVARIANT}.tar.tgz.sha256"
FROM scratch AS artifact
COPY --from=releaser /out /
FROM alpine:3.15 FROM alpine:3.15
RUN apk add --no-cache ca-certificates RUN apk add --no-cache ca-certificates
COPY cmd/registry/config-dev.yml /etc/docker/registry/config.yml COPY cmd/registry/config-dev.yml /etc/docker/registry/config.yml
COPY --from=build /usr/local/bin/registry /bin/registry COPY --from=binary /registry /bin/registry
VOLUME ["/var/lib/registry"] VOLUME ["/var/lib/registry"]
EXPOSE 5000 EXPOSE 5000
ENTRYPOINT ["registry"] ENTRYPOINT ["registry"]

View file

@ -1,24 +1,7 @@
// GITHUB_REF is the actual ref that triggers the workflow
// https://docs.github.com/en/actions/learn-github-actions/environment-variables#default-environment-variables
variable "GITHUB_REF" {
default = ""
}
target "_common" {
args = {
GIT_REF = GITHUB_REF
}
}
group "default" { group "default" {
targets = ["image-local"] targets = ["image-local"]
} }
// Special target: https://github.com/docker/metadata-action#bake-definition
target "docker-metadata-action" {
tags = ["registry:local"]
}
group "validate" { group "validate" {
targets = ["validate-vendor"] targets = ["validate-vendor"]
} }
@ -47,13 +30,11 @@ target "mod-outdated" {
} }
target "binary" { target "binary" {
inherits = ["_common"]
target = "binary" target = "binary"
output = ["./bin"] output = ["./bin"]
} }
target "artifact" { target "artifact" {
inherits = ["_common"]
target = "artifact" target = "artifact"
output = ["./bin"] output = ["./bin"]
} }
@ -70,8 +51,13 @@ target "artifact-all" {
] ]
} }
// Special target: https://github.com/docker/metadata-action#bake-definition
target "docker-metadata-action" {
tags = ["registry:local"]
}
target "image" { target "image" {
inherits = ["_common", "docker-metadata-action"] inherits = ["docker-metadata-action"]
} }
target "image-local" { target "image-local" {