From d519ef23a8e2d1f23a3ddf912dcb8e5209acd99c Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Sun, 15 Dec 2024 01:50:33 +0100 Subject: [PATCH] enable golangci-lint for supported platforms --- .github/workflows/build.yml | 2 ++ .golangci.yml | 2 +- docker-bake.hcl | 18 ++++++++++++++++++ hack/lint.Dockerfile | 11 ++++++++--- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d5326e44..7a4d519c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,6 +40,8 @@ jobs: validate: runs-on: ubuntu-latest + env: + GOLANGCI_LINT_MULTIPLATFORM: 1 needs: - prepare strategy: diff --git a/.golangci.yml b/.golangci.yml index 594376fa..15b99171 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,5 +1,5 @@ run: - timeout: 10m + timeout: 30m build-tags: - containers_image_openpgp - exclude_graphdriver_btrfs diff --git a/docker-bake.hcl b/docker-bake.hcl index de93f2b4..0f5d6e4e 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -12,6 +12,10 @@ variable "GITHUB_REF" { default = "" } +variable "GOLANGCI_LINT_MULTIPLATFORM" { + default = null +} + target "_common" { args = { GO_VERSION = GO_VERSION @@ -131,6 +135,20 @@ target "lint" { dockerfile = "./hack/lint.Dockerfile" target = "lint" output = ["type=cacheonly"] + platforms = GOLANGCI_LINT_MULTIPLATFORM != null ? [ + "darwin/amd64", + "darwin/arm64", + "linux/amd64", + "linux/arm/v5", + "linux/arm/v6", + "linux/arm/v7", + "linux/arm64", + "linux/ppc64le", + "linux/riscv64", + "linux/s390x", + "windows/amd64", + "windows/arm64" + ] : [] } target "vendor-validate" { diff --git a/hack/lint.Dockerfile b/hack/lint.Dockerfile index 00c9772c..9c6b19e7 100644 --- a/hack/lint.Dockerfile +++ b/hack/lint.Dockerfile @@ -1,17 +1,22 @@ # syntax=docker/dockerfile:1 ARG GO_VERSION="1.23" +ARG XX_VERSION="1.6.1" ARG ALPINE_VERSION="3.21" ARG GOLANGCI_LINT_VERSION="v1.62" -FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base +FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx +FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base ENV GOFLAGS="-buildvcs=false" RUN apk add --no-cache gcc linux-headers musl-dev +COPY --from=xx --link / / WORKDIR /src -FROM golangci/golangci-lint:${GOLANGCI_LINT_VERSION}-alpine AS golangci-lint +FROM --platform=$BUILDPLATFORM golangci/golangci-lint:${GOLANGCI_LINT_VERSION}-alpine AS golangci-lint FROM base AS lint +ARG TARGETPLATFORM RUN --mount=type=bind,target=. \ - --mount=type=cache,target=/root/.cache \ + --mount=type=cache,target=/root/.cache,id=lint-cache-$TARGETPLATFORM \ --mount=from=golangci-lint,source=/usr/bin/golangci-lint,target=/usr/bin/golangci-lint \ + xx-go --wrap && \ golangci-lint run ./...