name: Go

on:
  push:
    paths:
      - '**.go'
      - 'cmds/**'
      - 'runtime/**'
      - 'service/**'
      - 'spn/**'
    branches:
      - master
      - develop

  pull_request:
    paths:
      - '**.go'
      - 'cmds/**'
      - 'runtime/**'
      - 'service/**'
      - 'spn/**'
    branches:
      - master
      - develop

jobs:
  lint:
    name: Linter
    runs-on: ubuntu-latest
    steps:
    - name: Check out code
      uses: actions/checkout@v4

    - name: Setup Go
      uses: actions/setup-go@v5
      with:
        go-version: '^1.21'
        cache: false

    - name: Run golangci-lint
      uses: golangci/golangci-lint-action@v4
      with:
        version: v1.60.3
        only-new-issues: true
        args: -c ./.golangci.yml --timeout 15m

    - name: Run go vet
      run: go vet ./...

  test:
    name: Test & Build
    runs-on: ubuntu-latest
    steps:
    - uses: earthly/actions-setup@v1
      with:
        version: v0.8.0
    - uses: actions/checkout@v4

    - name: Log in to the Container registry
      uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
      with:
        registry: ghcr.io
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}

    - name: Run Go Tests & Build
      run: earthly --ci --remote-cache=ghcr.io/safing/build-cache --push +go-ci
