name: CI on: push: branches: - main pull_request: {} env: # Common versions GOLANGCI_VERSION: 'v2.4.0' KUBERNETES_VERSION: '1.33.x' # Sonar SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} permissions: contents: read jobs: detect-noop: permissions: actions: write # for fkirc/skip-duplicate-actions to skip or stop workflow runs contents: read # for fkirc/skip-duplicate-actions to read and compare commits runs-on: ubuntu-latest outputs: noop: ${{ steps.noop.outputs.should_skip }} steps: - uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit - name: Detect No-op Changes id: noop uses: fkirc/skip-duplicate-actions@f75f66ce1886f00957d99748a42c724f4330bdcf # v5.3.1 with: github_token: ${{ secrets.GITHUB_TOKEN }} paths_ignore: '["**.md", "**.png", "**.jpg"]' do_not_skip: '["workflow_dispatch", "schedule", "push"]' concurrent_skipping: false license-check: permissions: contents: read runs-on: ubuntu-latest needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' && github.ref != 'refs/heads/main' steps: - uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Check License Headers uses: apache/skywalking-eyes/header@61275cc80d0798a405cb070f7d3a8aaf7cf2c2c1 # v0.8.0 check-diff: runs-on: ubuntu-latest needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' && github.ref != 'refs/heads/main' permissions: contents: read steps: - uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: hashicorp/setup-terraform@ce70bcf31a3711a1efd50b61e7216b0196b6f4f1 # v3 - name: Setup Go uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 id: setup-go with: go-version-file: "go.mod" - name: Download Go modules run: go mod download - name: Configure Git run: | git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - name: Check Diff env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # make check-diff will also execute linting so there is no need for a separate lint action make check-diff LINT_JOBS=2 unit-tests: runs-on: ubuntu-latest needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' permissions: contents: read steps: - uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Fetch History run: git fetch --prune --unshallow - name: Setup Go uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 id: setup-go with: go-version-file: "go.mod" - name: Download Go modules run: go mod download - name: Cache envtest binaries uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: path: bin/k8s key: ${{ runner.os }}-envtest-${{env.KUBERNETES_VERSION}} - name: Run Unit Tests run: | make test - name: Publish Unit Test Coverage uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: flags: unittests file: ./cover.out publish-artifacts: needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' uses: ./.github/workflows/publish.yml permissions: contents: read #actions/checkout packages: write #for publishing artifacts id-token: write #for keyless sign strategy: matrix: include: - dockerfile: "Dockerfile" build-args: "CGO_ENABLED=0" build-arch: "amd64 arm64 s390x ppc64le" build-platform: "linux/amd64,linux/arm64,linux/s390x,linux/ppc64le" tag-suffix: "" # distroless - dockerfile: "Dockerfile.ubi" build-args: "CGO_ENABLED=0" build-arch: "amd64 arm64 ppc64le" build-platform: "linux/amd64,linux/arm64,linux/ppc64le" tag-suffix: "-ubi" - dockerfile: "Dockerfile.ubi" build-args: "CGO_ENABLED=0 GOEXPERIMENT=boringcrypto" build-arch: "amd64 ppc64le" build-platform: "linux/amd64,linux/ppc64le" tag-suffix: "-ubi-boringssl" with: dockerfile: ${{ matrix.dockerfile }} tag-suffix: ${{ matrix.tag-suffix }} image-name: ghcr.io/${{ github.repository }} build-platform: ${{ matrix.build-platform }} build-args: ${{ matrix.build-args }} build-arch: ${{ matrix.build-arch }} ref: ${{ github.ref }} secrets: IS_FORK: ${{ secrets.GHCR_USERNAME }} # this is just a secret to verify it is a fork or not, no other utility