name: Checks

on:
  push:
    branches: [ main ]
  pull_request:
  workflow_dispatch:

env:
  GO_VERSION: "~1.23.1"

jobs:
  check-links:
    runs-on: ubuntu-24.04
    steps:
    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      with:
        fetch-depth: 0
    - uses: lycheeverse/lychee-action@f81112d0d2814ded911bd23e3beaa9dda9093915 # v2.1.0
      with:
        args: >-
          -v -n "*.md" "**/*.md"
          --exclude "http://localhost*"
        fail: true
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5
        with:
          go-version: ${{ env.GO_VERSION }}
          check-latest: true
          cache-dependency-path: "**/go.sum"
      - name: Checkout Repo
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - name: Module cache
        uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
        env:
          cache-name: go-mod-cache
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/go.sum') }}
      - name: Tools cache
        uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
        env:
          cache-name: go-tools-cache
        with:
          path: ~/.tools
          key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('./internal/tools/**') }}
      - name: Install build dependencies
        run: |
          sudo apt-get update && sudo apt-get install -y clang llvm libbpf-dev
      - name: Run linters
        run: make license-header-check go-mod-tidy golangci-lint
      - name: Check clean repository
        run: make check-clean-work-tree
  race-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - name: Setup Go
        uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5
        with:
          go-version: ${{ matrix.go-version }}
          check-latest: true
          cache-dependency-path: "**/go.sum"
      - name: Install build dependencies
        run: sudo apt-get update && sudo apt-get install -y clang llvm
      - name: Run tests
        run: make test-race
  compatibility-test:
    strategy:
      matrix:
        go-version: ["~1.23.1", "~1.22.7"]
        os: [ubuntu-latest]
        # GitHub Actions does not support arm* architectures on default
        # runners. It is possible to accomplish this with a self-hosted runner
        # if we want to add this in the future:
        # https://docs.github.com/en/actions/hosting-your-own-runners/using-self-hosted-runners-in-a-workflow
        arch: [amd64]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout Repo
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - name: Setup Go
        uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5
        with:
          go-version: ${{ matrix.go-version }}
          check-latest: true
          cache-dependency-path: "**/go.sum"
      - name: Install build dependencies
        run: sudo apt-get update && sudo apt-get install -y clang llvm
      - name: Run tests
        env:
          GOARCH: ${{ matrix.arch }}
        run: make test
  verify-licenses:
    runs-on: ubuntu-24.04
    steps:
      - name: Checkout Repo
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      - name: Setup Go
        uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5
        with:
          go-version: ${{ env.GO_VERSION }}
          check-latest: true
          cache-dependency-path: "**/go.sum"
      - name: Install build dependencies
        run: sudo apt-get update && sudo apt-get install -y clang llvm libbpf-dev
      - run: make verify-licenses
