---
name: golangci-lint
on:
  push:
    paths:
      - "go.sum"
      - "go.mod"
      - "**.go"
      - ".github/workflows/golangci-lint.yml"
      - ".golangci.yml"
  pull_request:

permissions:  # added using https://github.com/step-security/secure-repo
  contents: read

jobs:
  golangci:
    permissions:
      contents: read  # for actions/checkout to fetch code
      pull-requests: read  # for golangci/golangci-lint-action to fetch pull requests
    name: lint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Install Go
        uses: actions/setup-go@fa96338abe5531f6e34c5cc0bbe28c1a533d5505 # v4.2.1
        with:
          go-version: 1.24.4
      - name: Setup build environment variables
        id: build-env
        run: |
          # Extract versions from Makefile
          ALSA_VERSION=$(grep '^ALSA_VERSION' Makefile | cut -d'=' -f2 | tr -d ' ')
          OPUS_VERSION=$(grep '^OPUS_VERSION' Makefile | cut -d'=' -f2 | tr -d ' ')
          
          # Get rv1106-system latest commit
          RV1106_COMMIT=$(git ls-remote https://github.com/jetkvm/rv1106-system.git HEAD | cut -f1)
          
          # Set environment variables
          echo "ALSA_VERSION=$ALSA_VERSION" >> $GITHUB_ENV
          echo "OPUS_VERSION=$OPUS_VERSION" >> $GITHUB_ENV
          echo "RV1106_COMMIT=$RV1106_COMMIT" >> $GITHUB_ENV
          
          # Set outputs for use in other steps
          echo "alsa_version=$ALSA_VERSION" >> $GITHUB_OUTPUT
          echo "opus_version=$OPUS_VERSION" >> $GITHUB_OUTPUT
          echo "rv1106_commit=$RV1106_COMMIT" >> $GITHUB_OUTPUT
          
          # Set resolved cache path
          CACHE_PATH="$HOME/.jetkvm/audio-libs"
          echo "CACHE_PATH=$CACHE_PATH" >> $GITHUB_ENV
          echo "cache_path=$CACHE_PATH" >> $GITHUB_OUTPUT
          
          echo "Extracted ALSA version: $ALSA_VERSION"
          echo "Extracted Opus version: $OPUS_VERSION"
          echo "Latest rv1106-system commit: $RV1106_COMMIT"
          echo "Cache path: $CACHE_PATH"
      - name: Restore audio dependencies cache
        id: cache-audio-deps
        uses: actions/cache/restore@v4
        with:
          path: ${{ steps.build-env.outputs.cache_path }}
          key: audio-deps-${{ runner.os }}-alsa-${{ steps.build-env.outputs.alsa_version }}-opus-${{ steps.build-env.outputs.opus_version }}-rv1106-${{ steps.build-env.outputs.rv1106_commit }}
      - name: Setup development environment
        if: steps.cache-audio-deps.outputs.cache-hit != 'true'
        run: make dev_env
        env:
          ALSA_VERSION: ${{ env.ALSA_VERSION }}
          OPUS_VERSION: ${{ env.OPUS_VERSION }}
      - name: Create empty resource directory
        run: |
          mkdir -p static && touch static/.gitkeep
      - name: Save audio dependencies cache
        if: always() && steps.cache-audio-deps.outputs.cache-hit != 'true'
        uses: actions/cache/save@v4
        with:
          path: ${{ steps.build-env.outputs.cache_path }}
          key: ${{ steps.cache-audio-deps.outputs.cache-primary-key }}
      - name: Lint
        uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0
        with:
          args: --verbose
          version: v2.0.2
        env:
          CGO_ENABLED: 1
          ALSA_VERSION: ${{ env.ALSA_VERSION }}
          OPUS_VERSION: ${{ env.OPUS_VERSION }}
          CGO_CFLAGS: "-I${{ steps.build-env.outputs.cache_path }}/alsa-lib-${{ steps.build-env.outputs.alsa_version }}/include -I${{ steps.build-env.outputs.cache_path }}/opus-${{ steps.build-env.outputs.opus_version }}/include -I${{ steps.build-env.outputs.cache_path }}/opus-${{ steps.build-env.outputs.opus_version }}/celt"
          CGO_LDFLAGS: "-L${{ steps.build-env.outputs.cache_path }}/alsa-lib-${{ steps.build-env.outputs.alsa_version }}/src/.libs -lasound -L${{ steps.build-env.outputs.cache_path }}/opus-${{ steps.build-env.outputs.opus_version }}/.libs -lopus -lm -ldl -static"
