diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c802465c..6a9ef871 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -145,6 +145,35 @@ jobs: directory: ${{ env.DESTDIR }}/coverage token: ${{ secrets.CODECOV_TOKEN }} + govulncheck: + runs-on: ubuntu-latest + permissions: + # same as global permission + contents: read + # required to write sarif report + security-events: write + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - + name: Run + uses: docker/bake-action@v6 + with: + source: . + targets: govulncheck + env: + GOVULNCHECK_FORMAT: sarif + - + name: Upload SARIF report + if: ${{ github.ref == 'refs/heads/master' }} + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: ${{ env.DESTDIR }}/govulncheck.out + artifact: runs-on: ubuntu-latest needs: diff --git a/docker-bake.hcl b/docker-bake.hcl index b108cbb5..ed27e772 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -171,3 +171,18 @@ target "gen-validate" { target = "validate" output = ["type=cacheonly"] } + +variable "GOVULNCHECK_FORMAT" { + default = null +} + +target "govulncheck" { + inherits = ["_common"] + dockerfile = "./hack/govulncheck.Dockerfile" + target = "output" + args = { + FORMAT = GOVULNCHECK_FORMAT + } + no-cache-filter = ["run"] + output = ["${DESTDIR}"] +} diff --git a/hack/govulncheck.Dockerfile b/hack/govulncheck.Dockerfile new file mode 100644 index 00000000..b143d6bb --- /dev/null +++ b/hack/govulncheck.Dockerfile @@ -0,0 +1,26 @@ +# syntax=docker/dockerfile:1 + +ARG GO_VERSION="1.24" +ARG ALPINE_VERSION="3.22" + +ARG GOVULNCHECK_VERSION="v1.1.4" +ARG FORMAT="text" + +FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base +WORKDIR /go/src/github.com/docker/buildx +RUN apk add --no-cache moreutils +ARG GOVULNCHECK_VERSION +RUN --mount=type=cache,target=/root/.cache \ + --mount=type=cache,target=/go/pkg/mod \ + go install golang.org/x/vuln/cmd/govulncheck@$GOVULNCHECK_VERSION + +FROM base AS run +ARG FORMAT +RUN --mount=type=bind,target=. <