# Populates main's cache scope so PR runs warm-start from it. Saves the go
# module, go build (incl. test compile), and golangci-lint caches.
#
# Caches are ref-scoped: PR runs read their own scope then fall back to the
# base branch. Per .github/actions/go-cache/action.yml, PRs are restore-only,
# so push-to-main is the only opportunity to populate the fallback scope.

name: cache-seeder

on:
  push:
    branches:
      - main
    paths:
      - "go.sum"
      - ".golangci.yml"
      - ".github/actions/go-cache/action.yml"
      - ".github/actions/go-setup/action.yml"
      - ".github/workflows/cache-seeder.yml"

concurrency:
  group: cache-seeder
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  gobuild:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
      - uses: ./.github/actions/go-setup
      - run: make deps-backend deps-tools
      - run: TAGS="bindata" make backend
      - run: TAGS="bindata gogit" GOEXPERIMENT="" make backend
      - name: warm test compile cache (bindata)
        env:
          TAGS: bindata
          GOTEST_FLAGS: -race -list=^$$ -count=1
        run: make test-backend
      - name: warm test compile cache (bindata gogit)
        env:
          TAGS: bindata gogit
          GOEXPERIMENT:
          GOTEST_FLAGS: -race -list=^$$ -count=1
        run: make test-backend
      - name: warm integration compile cache
        run: |
          TAGS="bindata" make test-integration-compile
          TAGS="bindata gogit" GOEXPERIMENT="" make test-integration-compile
          TAGS="bindata gogit" GOTEST_FLAGS="-race" make test-integration-compile

  lint:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - { tags: "bindata", target: "lint-backend" }
    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
      - uses: ./.github/actions/go-setup
        with:
          lint-cache: "true"
      - run: make deps-backend deps-tools
      - run: make generate-go
        env:
          TAGS: ${{ matrix.tags }}
      - run: make ${{ matrix.target }}
        env:
          TAGS: ${{ matrix.tags }}
