name: Build
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  workflow_dispatch:
  schedule:
    - cron: 0 0 * * 1

permissions:
  contents: read

jobs:
  test:
    name: Build and Test
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        go:
          - '1.21'
          - '1.22'

    permissions:
      checks: write
      contents: read
      pull-requests: read

    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

      - name: Set up Go
        uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
        with:
          go-version: ${{ matrix.go }}

      - name: golangci-lint
        uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v3.7.1
        if: github.event_name == 'pull_request'
        with:
          only-new-issues: true

      - name: Test
        run: go test -v -coverprofile=cover.out ./...

      - name: Send coverage
        uses: shogo82148/actions-goveralls@785c9d68212c91196d3994652647f8721918ba11 # v1.9.0
        with:
          path-to-profile: cover.out
          flag-name: Go-${{ matrix.go }}
          parallel: true

  finish:
    needs: test
    runs-on: ubuntu-latest

    permissions:
      checks: write

    steps:
      - uses: shogo82148/actions-goveralls@785c9d68212c91196d3994652647f8721918ba11 # v1.9.0
        with:
          parallel-finished: true
