diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 200a2083..63aa4875 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -19,6 +19,8 @@ on: jobs: validate: runs-on: ubuntu-22.04 + env: + GOLANGCI_LINT_MULTIPLATFORM: 1 strategy: fail-fast: false matrix: diff --git a/.golangci.yml b/.golangci.yml index f4d908f9..b0231cd5 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,5 +1,5 @@ run: - timeout: 10m + timeout: 30m skip-files: - ".*\\.pb\\.go$" diff --git a/docker-bake.hcl b/docker-bake.hcl index 8b62bf69..435d8df7 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -7,6 +7,9 @@ variable "DOCS_FORMATS" { variable "DESTDIR" { default = "./bin" } +variable "GOLANGCI_LINT_MULTIPLATFORM" { + default = null +} # Special target: https://github.com/docker/metadata-action#bake-definition target "meta-helper" { @@ -32,6 +35,17 @@ target "lint" { inherits = ["_common"] dockerfile = "./hack/dockerfiles/lint.Dockerfile" output = ["type=cacheonly"] + platforms = GOLANGCI_LINT_MULTIPLATFORM != null ? [ + "darwin/amd64", + "darwin/arm64", + "linux/amd64", + "linux/arm64", + "linux/s390x", + "linux/ppc64le", + "linux/riscv64", + "windows/amd64", + "windows/arm64" + ] : [] } target "validate-vendor" { diff --git a/hack/dockerfiles/lint.Dockerfile b/hack/dockerfiles/lint.Dockerfile index 7e46879d..78e00441 100644 --- a/hack/dockerfiles/lint.Dockerfile +++ b/hack/dockerfiles/lint.Dockerfile @@ -1,14 +1,19 @@ # syntax=docker/dockerfile:1 ARG GO_VERSION=1.21.3 +ARG XX_VERSION=1.3.0 ARG GOLANGCI_LINT_VERSION=1.54.2 -FROM golang:${GO_VERSION}-alpine +FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx +FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine RUN apk add --no-cache git gcc musl-dev ENV GOFLAGS="-buildvcs=false" ARG GOLANGCI_LINT_VERSION RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v${GOLANGCI_LINT_VERSION} +COPY --link --from=xx / / WORKDIR /go/src/github.com/docker/buildx +ARG TARGETPLATFORM RUN --mount=target=/go/src/github.com/docker/buildx \ - --mount=target=/root/.cache,type=cache \ + --mount=target=/root/.cache,type=cache,id=lint-cache-$TARGETPLATFORM \ + xx-go --wrap && \ golangci-lint run