diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml index b970de5b25cb..8184e2c9778c 100644 --- a/.github/workflows/tag.yml +++ b/.github/workflows/tag.yml @@ -17,8 +17,7 @@ jobs: go-version: 1.15 - name: Unshallow run: git fetch --prune --unshallow - - name: Login do docker.io - run: docker login -u golangci -p ${{ secrets.GOLANGCI_LINT_DOCKER_TOKEN }} + - name: Create release uses: goreleaser/goreleaser-action@v2 with: @@ -26,38 +25,59 @@ jobs: args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GOLANGCI_LINT_TOKEN }} + + docker-release: + needs: [ release ] + runs-on: ubuntu-latest + strategy: + matrix: + target: + - Dockerfile: build/Dockerfile + - Dockerfile: build/Dockerfile.alpine + steps: + - uses: actions/checkout@v2 + + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: 1.15 + + - name: Unshallow + run: git fetch --prune --unshallow + - name: Prepare id: prepare run: | TAG=${GITHUB_REF#refs/tags/} MAJOR=${TAG%.*} + SHORT_COMMIT=${GITHUB_SHA::8} + DATE=$(date '+%Y-%m-%dT%H:%M:%SZ') echo ::set-output name=tag_name::${TAG} echo ::set-output name=major_tag::${MAJOR} + echo ::set-output name=short_commit::${SHORT_COMMIT} + echo ::set-output name=date::${DATE} + - name: Set up QEMU uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - - name: build and publish main image - id: docker_build + + - name: Login do docker.io + run: docker login -u golangci -p ${{ secrets.GOLANGCI_LINT_DOCKER_TOKEN }} + + - name: Build and publish ${{ matrix.target.Dockerfile }} uses: docker/build-push-action@v2 with: context: . - file: build/Dockerfile + file: ${{ matrix.target.Dockerfile }} platforms: linux/amd64,linux/arm64 push: true + build-args: | + VERSION=${{ steps.prepare.outputs.tag_name }} + SHORT_COMMIT=${{ steps.prepare.outputs.short_commit }} + DATE=${{ steps.prepare.outputs.date }} tags: | golangci/golangci-lint:${{ steps.prepare.outputs.tag_name }} golangci/golangci-lint:${{ steps.prepare.outputs.major_tag }} golangci/golangci-lint:latest - - name: build and publish alpine image - id: docker_build_alpine - uses: docker/build-push-action@v2 - with: - context: . - file: build/Dockerfile.alpine - platforms: linux/amd64,linux/arm64 - push: true - tags: | - golangci/golangci-lint:${{ steps.prepare.outputs.tag_name }}-alpine - golangci/golangci-lint:${{ steps.prepare.outputs.major_tag }}-alpine - golangci/golangci-lint:latest-alpine diff --git a/build/Dockerfile b/build/Dockerfile index b9dc78c1d508..a067f26df226 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,9 +1,13 @@ # stage 1 building the code FROM golang:1.15 as builder +ARG VERSION +ARG SHORT_COMMIT +ARG DATE + COPY / /golangci WORKDIR /golangci -RUN go build -o golangci-lint ./cmd/golangci-lint/main.go +RUN CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=$VERSION -X main.commit=$SHORT_COMMIT -X main.date=$DATE" -o golangci-lint ./cmd/golangci-lint/main.go # stage 2 FROM golang:1.15 diff --git a/build/Dockerfile.alpine b/build/Dockerfile.alpine index 065c6596db6b..59274d653053 100644 --- a/build/Dockerfile.alpine +++ b/build/Dockerfile.alpine @@ -1,9 +1,18 @@ # stage 1 building the code FROM golang:1.15-alpine as builder +ARG VERSION +ARG SHORT_COMMIT +ARG DATE + COPY / /golangci WORKDIR /golangci -RUN CGO_ENABLED=0 go build -o golangci-lint ./cmd/golangci-lint/main.go + +# gcc is required to support cgo; +# git and mercurial are needed most times for go get`, etc. +# See https://github.com/docker-library/golang/issues/80 +RUN apk --no-cache add gcc musl-dev git mercurial +RUN CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=$VERSION -X main.commit=$SHORT_COMMIT -X main.date=$DATE" -o golangci-lint ./cmd/golangci-lint/main.go # stage 2 FROM golang:1.15-alpine