diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml index fa43e19b..48c348ec 100644 --- a/.github/workflows/tag.yml +++ b/.github/workflows/tag.yml @@ -20,58 +20,6 @@ jobs: - name: Unshallow run: git fetch --prune --unshallow - - name: Create release - uses: goreleaser/goreleaser-action@v5 - with: - version: latest - args: release --clean - env: - GITHUB_TOKEN: ${{ secrets.GOLANGCI_LINT_TOKEN }} - - docker-release: - needs: release - runs-on: ubuntu-latest - strategy: - matrix: - target: - - Dockerfile: build/Dockerfile - - Dockerfile: build/alpine.Dockerfile - steps: - - uses: actions/checkout@v4 - - - name: Install Go - uses: actions/setup-go@v5 - with: - # https://github.com/actions/setup-go#supported-version-syntax - # ex: - # - 1.18beta1 -> 1.18.0-beta.1 - # - 1.18rc1 -> 1.18.0-rc.1 - go-version: '1.22' - - - 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 tag_name=${TAG} >> $GITHUB_OUTPUT - echo major_tag=${MAJOR} >> $GITHUB_OUTPUT - echo short_commit=${SHORT_COMMIT} >> $GITHUB_OUTPUT - echo date=${DATE} >> $GITHUB_OUTPUT - if [[ ${{ matrix.target.Dockerfile }} == *"alpine"* ]]; then - echo full_tag_name=${TAG}-alpine >> $GITHUB_OUTPUT - echo full_major_tag=${MAJOR}-alpine >> $GITHUB_OUTPUT - echo latest_tag=latest-alpine >> $GITHUB_OUTPUT - else - echo full_tag_name=${TAG} >> $GITHUB_OUTPUT - echo full_major_tag=${MAJOR} >> $GITHUB_OUTPUT - echo latest_tag=latest >> $GITHUB_OUTPUT - fi - - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -81,18 +29,10 @@ jobs: - 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@v5 + - name: Create release + uses: goreleaser/goreleaser-action@v5 with: - context: . - 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.full_tag_name }} - golangci/golangci-lint:${{ steps.prepare.outputs.full_major_tag }} - golangci/golangci-lint:${{ steps.prepare.outputs.latest_tag }} + version: latest + args: release --clean --timeout=90m + env: + GITHUB_TOKEN: ${{ secrets.GOLANGCI_LINT_TOKEN }} diff --git a/.goreleaser.yml b/.goreleaser.yml index 43bc85b9..52824125 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -132,3 +132,117 @@ nfpms: - /usr/bin/go rpm: group: Development/Tools + +docker_manifests: + # basic + - name_template: 'golangci/golangci-lint:latest' + image_templates: + - 'golangci/golangci-lint:{{ .Tag }}-amd64' + - 'golangci/golangci-lint:{{ .Tag }}-arm64' + - name_template: 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}' + image_templates: + - 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-amd64' + - 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-arm64' + - name_template: 'golangci/golangci-lint:{{ .Tag }}' + image_templates: + - 'golangci/golangci-lint:{{ .Tag }}-amd64' + - 'golangci/golangci-lint:{{ .Tag }}-arm64' + + # alpine + - name_template: 'golangci/golangci-lint:latest-alpine' + image_templates: + - 'golangci/golangci-lint:{{ .Tag }}-alpine-amd64' + - 'golangci/golangci-lint:{{ .Tag }}-alpine-arm64' + - name_template: 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine' + image_templates: + - 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine-amd64' + - 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine-arm64' + - name_template: 'golangci/golangci-lint:{{ .Tag }}' + image_templates: + - 'golangci/golangci-lint:{{ .Tag }}-alpine-amd64' + - 'golangci/golangci-lint:{{ .Tag }}-alpine-arm64' + +dockers: + - use: buildx + goos: linux + goarch: amd64 + dockerfile: build/buildx.Dockerfile + image_templates: + - 'golangci/golangci-lint:latest-amd64' + - 'golangci/golangci-lint:{{ .Tag }}-amd64' + - 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-amd64' + build_flag_templates: + - '--pull' + # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys + - '--label=org.opencontainers.image.title={{.ProjectName}}' + - '--label=org.opencontainers.image.description=Fast linters Runner for Go' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation=https://golangci-lint.run' + - '--label=org.opencontainers.image.created={{.Date}}' + - '--label=org.opencontainers.image.revision={{.FullCommit}}' + - '--label=org.opencontainers.image.version={{.Version}}' + - '--platform=linux/amd64' + + - use: buildx + goos: linux + goarch: arm64 + dockerfile: build/buildx.Dockerfile + image_templates: + - 'golangci/golangci-lint:latest-arm64' + - 'golangci/golangci-lint:{{ .Tag }}-arm64' + - 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-arm64' + build_flag_templates: + - '--pull' + # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys + - '--label=org.opencontainers.image.title={{.ProjectName}}' + - '--label=org.opencontainers.image.description=Fast linters Runner for Go' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation=https://golangci-lint.run' + - '--label=org.opencontainers.image.created={{.Date}}' + - '--label=org.opencontainers.image.revision={{.FullCommit}}' + - '--label=org.opencontainers.image.version={{.Version}}' + - '--platform=linux/arm64' + + - use: buildx + goos: linux + goarch: amd64 + dockerfile: build/buildx-alpine.Dockerfile + image_templates: + - 'golangci/golangci-lint:latest-alpine-amd64' + - 'golangci/golangci-lint:{{ .Tag }}-alpine-amd64' + - 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine-amd64' + build_flag_templates: + - '--pull' + # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys + - '--label=org.opencontainers.image.title={{.ProjectName}}' + - '--label=org.opencontainers.image.description=Fast linters Runner for Go' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation=https://golangci-lint.run' + - '--label=org.opencontainers.image.created={{.Date}}' + - '--label=org.opencontainers.image.revision={{.FullCommit}}' + - '--label=org.opencontainers.image.version={{.Version}}' + - '--platform=linux/amd64' + + - use: buildx + goos: linux + goarch: arm64 + dockerfile: build/buildx-alpine.Dockerfile + image_templates: + - 'golangci/golangci-lint:latest-alpine-arm64' + - 'golangci/golangci-lint:{{ .Tag }}-alpine-arm64' + - 'golangci/golangci-lint:v{{ .Major }}.{{ .Minor }}-alpine-arm64' + build_flag_templates: + - '--pull' + # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys + - '--label=org.opencontainers.image.title={{.ProjectName}}' + - '--label=org.opencontainers.image.description=Fast linters Runner for Go' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation=https://golangci-lint.run' + - '--label=org.opencontainers.image.created={{.Date}}' + - '--label=org.opencontainers.image.revision={{.FullCommit}}' + - '--label=org.opencontainers.image.version={{.Version}}' + - '--platform=linux/arm64' diff --git a/build/Dockerfile b/build/Dockerfile deleted file mode 100644 index 520548cd..00000000 --- a/build/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -# stage 1 building the code -FROM golang:1.22 as builder - -ARG VERSION -ARG SHORT_COMMIT -ARG DATE - -COPY / /golangci -WORKDIR /golangci -RUN APP_VERSION=${VERSION#v} \ - CGO_ENABLED=0 \ - go build -trimpath -ldflags "-s -w -X main.version=$APP_VERSION -X main.commit=$SHORT_COMMIT -X main.date=$DATE" -o golangci-lint ./cmd/golangci-lint/main.go - -# stage 2 -FROM golang:1.22 -# related to https://github.com/golangci/golangci-lint/issues/3107 -ENV GOROOT /usr/local/go -# Set all directories as safe -RUN git config --global --add safe.directory '*' -# don't place it into $GOPATH/bin because Drone mounts $GOPATH as volume -COPY --from=builder /golangci/golangci-lint /usr/bin/ -CMD ["golangci-lint"] diff --git a/build/alpine.Dockerfile b/build/alpine.Dockerfile deleted file mode 100644 index 8df9f391..00000000 --- a/build/alpine.Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -# stage 1 building the code -FROM golang:1.22-alpine as builder - -ARG VERSION -ARG SHORT_COMMIT -ARG DATE - -COPY / /golangci -WORKDIR /golangci - -# 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 APP_VERSION=${VERSION#v} \ - CGO_ENABLED=0 \ - go build -trimpath -ldflags "-s -w -X main.version=$APP_VERSION -X main.commit=$SHORT_COMMIT -X main.date=$DATE" -o golangci-lint ./cmd/golangci-lint/main.go - -# stage 2 -FROM golang:1.22-alpine -# related to https://github.com/golangci/golangci-lint/issues/3107 -ENV GOROOT /usr/local/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 -# Set all directories as safe -RUN git config --global --add safe.directory '*' -# don't place it into $GOPATH/bin because Drone mounts $GOPATH as volume -COPY --from=builder /golangci/golangci-lint /usr/bin/ -CMD ["golangci-lint"] diff --git a/build/buildx-alpine.Dockerfile b/build/buildx-alpine.Dockerfile new file mode 100644 index 00000000..e0e426cb --- /dev/null +++ b/build/buildx-alpine.Dockerfile @@ -0,0 +1,16 @@ +# syntax=docker/dockerfile:1.4 +FROM golang:1.22-alpine + +# related to https://github.com/golangci/golangci-lint/issues/3107 +ENV GOROOT /usr/local/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 + +# Set all directories as safe +RUN git config --global --add safe.directory '*' + +COPY golangci-lint /usr/bin/ +CMD ["golangci-lint"] diff --git a/build/buildx.Dockerfile b/build/buildx.Dockerfile new file mode 100644 index 00000000..0e585067 --- /dev/null +++ b/build/buildx.Dockerfile @@ -0,0 +1,11 @@ +# syntax=docker/dockerfile:1.4 +FROM golang:1.22 + +# related to https://github.com/golangci/golangci-lint/issues/3107 +ENV GOROOT /usr/local/go + +# Set all directories as safe +RUN git config --global --add safe.directory '*' + +COPY golangci-lint /usr/bin/ +CMD ["golangci-lint"]