Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release/2.8] bump up golang version (alternative) #3903

Merged
merged 7 commits into from May 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
@@ -0,0 +1 @@
bin/
1 change: 0 additions & 1 deletion .github/workflows/build.yml
Expand Up @@ -87,7 +87,6 @@ jobs:
draft: true
files: |
bin/*.tar.gz
bin/*.zip
bin/*.sha256
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Expand Up @@ -25,21 +25,21 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.16.*
go-version: 1.18.8

- name: Dependencies
run: |
sudo apt-get -q update
sudo -E apt-get -yq --no-install-suggests --no-install-recommends install python2-minimal
cd /tmp && go get -u github.com/vbatts/git-validation
cd /tmp && go install github.com/vbatts/git-validation@latest

- name: Build
working-directory: ./src/github.com/docker/distribution
run: |
DCO_VERBOSITY=-q script/validate/dco
GO111MODULE=on script/setup/install-dev-tools
script/validate/vendor
go build -i .
go build .
make check
make build
make binaries
Expand Down
78 changes: 44 additions & 34 deletions Dockerfile
@@ -1,49 +1,59 @@
# syntax=docker/dockerfile:1.3
# syntax=docker/dockerfile:1

ARG GO_VERSION=1.16.15
ARG GORELEASER_XX_VERSION=1.2.5
ARG GO_VERSION=1.18.8
ARG ALPINE_VERSION=3.16
ARG XX_VERSION=1.1.1

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should update to 1.2.1 in follow-up

FROM --platform=$BUILDPLATFORM crazymax/goreleaser-xx:${GORELEASER_XX_VERSION} AS goreleaser-xx
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS base
COPY --from=goreleaser-xx / /
RUN apk add --no-cache file git
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base
COPY --from=xx / /
RUN apk add --no-cache bash coreutils file git
ENV GO111MODULE=auto
ENV CGO_ENABLED=0
WORKDIR /go/src/github.com/docker/distribution

FROM base AS version
ARG PKG="github.com/docker/distribution"
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
ENV GO111MODULE=auto
ENV CGO_ENABLED=0
# GIT_REF is used by goreleaser-xx to handle the proper git ref when available.
# It will fallback to the working tree info if empty and use "git tag --points-at"
# or "git describe" to define the version info.
ARG GIT_REF
ARG TARGETPLATFORM
ARG PKG="github.com/distribution/distribution"
ARG LDFLAGS="-s -w"
ARG BUILDTAGS="include_oss include_gcs"
RUN --mount=type=bind,rw \
--mount=type=cache,target=/root/.cache/go-build \
--mount=target=/go/pkg/mod,type=cache \
goreleaser-xx --debug \
--name="registry" \
--dist="/out" \
--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 /
RUN --mount=type=bind,target=/go/src/github.com/docker/distribution,rw \
--mount=type=cache,target=/root/.cache/go-build \
--mount=target=/go/pkg/mod,type=cache \
--mount=type=bind,source=/tmp/.ldflags,target=/tmp/.ldflags,from=version \
set -x ; xx-go build -trimpath -ldflags "$(cat /tmp/.ldflags) ${LDFLAGS}" -o /usr/bin/registry ./cmd/registry \
&& xx-verify --static /usr/bin/registry

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.16
FROM alpine:${ALPINE_VERSION}
RUN apk add --no-cache ca-certificates
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"]
EXPOSE 5000
ENTRYPOINT ["registry"]
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -50,7 +50,7 @@ version/version.go:

check: ## run all linters (TODO: enable "unused", "varcheck", "ineffassign", "unconvert", "staticheck", "goimports", "structcheck")
@echo "$(WHALE) $@"
golangci-lint run
@GO111MODULE=off golangci-lint run

test: ## run tests, except integration test with test.short
@echo "$(WHALE) $@"
Expand Down
6 changes: 1 addition & 5 deletions context/http.go
Expand Up @@ -246,11 +246,7 @@ func (ctx *muxVarsContext) Value(key interface{}) interface{} {
return ctx.vars
}

if strings.HasPrefix(keyStr, "vars.") {
keyStr = strings.TrimPrefix(keyStr, "vars.")
}

if v, ok := ctx.vars[keyStr]; ok {
if v, ok := ctx.vars[strings.TrimPrefix(keyStr, "vars.")]; ok {
return v
}
}
Expand Down
21 changes: 6 additions & 15 deletions docker-bake.hcl
@@ -1,15 +1,3 @@
// 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" {
targets = ["image-local"]
}
Expand All @@ -20,13 +8,11 @@ target "docker-metadata-action" {
}

target "binary" {
inherits = ["_common"]
target = "binary"
output = ["./bin"]
}

target "artifact" {
inherits = ["_common"]
target = "artifact"
output = ["./bin"]
}
Expand All @@ -43,8 +29,13 @@ target "artifact-all" {
]
}

// Special target: https://github.com/docker/metadata-action#bake-definition
target "docker-metadata-action" {
tags = ["registry:local"]
}

target "image" {
inherits = ["_common", "docker-metadata-action"]
inherits = ["docker-metadata-action"]
}

target "image-local" {
Expand Down
2 changes: 1 addition & 1 deletion project/dev-image/Dockerfile
Expand Up @@ -17,4 +17,4 @@ RUN wget https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz --quiet && \
tar -C /usr/local -xzf go$GOLANG_VERSION.linux-amd64.tar.gz && \
rm go${GOLANG_VERSION}.linux-amd64.tar.gz

RUN go get github.com/axw/gocov/gocov github.com/mattn/goveralls github.com/golang/lint/golint
RUN go install github.com/axw/gocov/gocov@latest github.com/mattn/goveralls@latest github.com/golang/lint/golint@latest
4 changes: 1 addition & 3 deletions registry/client/repository.go
Expand Up @@ -114,9 +114,7 @@ func (r *registry) Repositories(ctx context.Context, entries []string, last stri
return 0, err
}

for cnt := range ctlg.Repositories {
entries[cnt] = ctlg.Repositories[cnt]
}
copy(entries, ctlg.Repositories)
numFilled = len(ctlg.Repositories)

link := resp.Header.Get("Link")
Expand Down
1 change: 1 addition & 0 deletions registry/handlers/basicauth.go
@@ -1,3 +1,4 @@
//go:build go1.4
// +build go1.4

package handlers
Expand Down
1 change: 1 addition & 0 deletions registry/handlers/basicauth_prego14.go
@@ -1,3 +1,4 @@
//go:build !go1.4
// +build !go1.4

package handlers
Expand Down
1 change: 1 addition & 0 deletions registry/storage/blobwriter_nonresumable.go
@@ -1,3 +1,4 @@
//go:build noresumabledigest
// +build noresumabledigest

package storage
Expand Down
1 change: 1 addition & 0 deletions registry/storage/blobwriter_resumable.go
@@ -1,3 +1,4 @@
//go:build !noresumabledigest
// +build !noresumabledigest

package storage
Expand Down
1 change: 1 addition & 0 deletions registry/storage/driver/gcs/gcs.go
Expand Up @@ -10,6 +10,7 @@
// Note that the contents of incomplete uploads are not accessible even though
// Stat returns their length
//
//go:build include_gcs
// +build include_gcs

package gcs
Expand Down
1 change: 1 addition & 0 deletions registry/storage/driver/gcs/gcs_test.go
@@ -1,3 +1,4 @@
//go:build include_gcs
// +build include_gcs

package gcs
Expand Down
1 change: 1 addition & 0 deletions registry/storage/driver/oss/oss.go
Expand Up @@ -7,6 +7,7 @@
// Because OSS is a key, value store the Stat call does not support last modification
// time for directories (directories are an abstraction for key, value stores)
//
//go:build include_oss
// +build include_oss

package oss
Expand Down
1 change: 1 addition & 0 deletions registry/storage/driver/oss/oss_test.go
@@ -1,3 +1,4 @@
//go:build include_oss
// +build include_oss

package oss
Expand Down
6 changes: 3 additions & 3 deletions script/setup/install-dev-tools
@@ -1,12 +1,12 @@
#!/usr/bin/env bash

GOLANGCI_LINT_VERSION="v1.27.0"
GOLANGCI_LINT_VERSION="v1.50.1"

#
# Install developer tools to $GOBIN (or $GOPATH/bin if unset)
#
set -eu -o pipefail

cd /tmp
go get -u github.com/LK4D4/vndr
go get "github.com/golangci/golangci-lint/cmd/golangci-lint@${GOLANGCI_LINT_VERSION}"
go install github.com/LK4D4/vndr@latest
go install "github.com/golangci/golangci-lint/cmd/golangci-lint@${GOLANGCI_LINT_VERSION}"
2 changes: 1 addition & 1 deletion script/validate/dco
Expand Up @@ -4,7 +4,7 @@ set -eu -o pipefail

if ! command -v git-validation; then
>&2 echo "ERROR: git-validation not found. Install with:"
>&2 echo " go get -u github.com/vbatts/git-validation"
>&2 echo " go install github.com/vbatts/git-validation@latest"
exit 1
fi

Expand Down
2 changes: 1 addition & 1 deletion version/version.sh
Expand Up @@ -17,7 +17,7 @@ var Package = "$(go list)"
// Version indicates which version of the binary is running. This is set to
// the latest release tag by hand, always suffixed by "+unknown". During
// build, it will be replaced by the actual version. The value here will be
// used if the registry is run after a go get based install.
// used if the registry is run after a go install based install.
var Version = "$(git describe --match 'v[0-9]*' --dirty='.m' --always)+unknown"

// Revision is filled with the VCS (e.g. git) revision being used to build
Expand Down