name: Go Tests

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }}
  cancel-in-progress: true

permissions: {}

jobs:
  linters:
    name: Linters
    runs-on: ubuntu-20.04
    timeout-minutes: 10

    steps:
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libbtrfs-dev build-essential apg jq

      - uses: actions/setup-go@v5
        with:
          go-version: '^1.22.3'
      - uses: actions/checkout@v3
      - name: make lint
        run: make golangci-lint && GOLANGCI_LINT_EXTRA_ARGS="--timeout=8m --build-tags=testing,integration" make lint
      - name: Verify go vendor, go modules and gofmt
        run: |
          sudo apt-get install -y jq
          make verify

  go-tests:
    runs-on: ubuntu-latest
    needs: [linters]
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup Golang
        uses: actions/setup-go@v3
        with:
          go-version-file: go.mod

      - run: go version

      - name: Run GARM Go Tests
        run: make go-test
