name: Go

on: [push, pull_request]

jobs:

  test:
    name: Test
    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: bash

    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        go: ['1.24', '1.25', '1.26']
      fail-fast: false
    env:
      OS: ${{ matrix.os }}
      GO: ${{ matrix.go }}
    steps:
      - if: startsWith(matrix.os, 'macos')
        run: brew update

      - uses: actions/setup-go@v6
        with:
          go-version: ${{ matrix.go }}

      - name: Get Build Tools
        run: |
          GO111MODULE=on go install github.com/ory/go-acc@latest

      - name: Add $GOPATH/bin to $PATH
        run: |
          echo "$(go env GOPATH)/bin" >> "$GITHUB_PATH"

      - uses: actions/checkout@v6

      - name: 'Tags: default'
        run: go-acc . -- -race -v -tags ""

      - name: 'Tags: libsqlite3'
        run: go-acc . -- -race -v -tags "libsqlite3"

      - name: 'Tags: full'
        run: go-acc . -- -race -v -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_column_metadata sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_math_functions sqlite_os_trace sqlite_preupdate_hook sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_unlock_notify sqlite_vacuum_incr sqlite_vtable"

      - name: 'Tags: vacuum'
        run: go-acc . -- -race -v -tags "sqlite_vacuum_full"

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v5
        with:
          env_vars: OS,GO
          file: coverage.txt

  test-windows:
    name: Test for Windows
    runs-on: windows-latest
    defaults:
      run:
        shell: bash

    strategy:
      matrix:
        go: ['1.24', '1.25', '1.26']
      fail-fast: false
    env:
      OS: windows-latest
      GO: ${{ matrix.go }}
    steps:
      - uses: msys2/setup-msys2@v2
        with:
          update: true
          install: mingw-w64-x86_64-toolchain mingw-w64-x86_64-sqlite3
          msystem: MINGW64
          path-type: inherit

      - uses: actions/setup-go@v6
        with:
          go-version: ${{ matrix.go }}

      - name: Add $GOPATH/bin to $PATH
        run: |
          echo "$(go env GOPATH)/bin" >> "$GITHUB_PATH"
        shell: msys2 {0}

      - uses: actions/checkout@v6

      - name: 'Tags: default'
        run: go build -race -v -tags ""
        shell: msys2 {0}

      - name: 'Tags: libsqlite3'
        run: go build -race -v -tags "libsqlite3"
        shell: msys2 {0}

      - name: 'Tags: full'
        run: |
          echo 'skip this test'
          echo go build -race -v -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_column_metadata sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_math_functions sqlite_preupdate_hook sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_unlock_notify sqlite_vacuum_incr sqlite_vtable"
        shell: msys2 {0}

      - name: 'Tags: vacuum'
        run: go build -race -v -tags "sqlite_vacuum_full"
        shell: msys2 {0}

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v5
        with:
          env_vars: OS,GO
          file: coverage.txt

# based on: github.com/koron-go/_skeleton/.github/workflows/go.yml
