---
name: Tests
on:
  pull_request:
    branches:
      - main
    paths-ignore:
      - 'docs/**'
  push:
    branches:
      - main
    paths-ignore:
      - 'docs/**'
permissions:
  contents: read
jobs:
  tests:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        php-versions: ['8.2', '8.3', '8.4']
    env:
      GOEXPERIMENT: cgocheck2
      GOMAXPROCS: 10
      LIBRARY_PATH: ${{ github.workspace }}/watcher/target/lib
    steps:
      -
        uses: actions/checkout@v4
      -
        uses: actions/setup-go@v5
        with:
          go-version: '1.22'
          cache-dependency-path: |
            go.sum 
            caddy/go.sum
      -
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-versions }}
          ini-file: development
          coverage: none
          tools: none
        env:
          phpts: ts
          debug: true
      -
        name: Install e-dant/watcher
        uses: ./.github/actions/watcher
      -
        name: Set Set CGO flags
        run: echo "CGO_CFLAGS=-I${PWD}/watcher/target/include $(php-config --includes)" >> "${GITHUB_ENV}"
      -
        name: Build
        run: go build          
      -
        name: Build testcli binary
        working-directory: internal/testcli/
        run: go build
      -
        name: Run library tests
        run: go test -race -v ./...
      -
        name: Run Caddy module tests
        working-directory: caddy/
        run: go test -tags nobadger,nomysql,nopgx -race -v ./...
      -
        name: Run Fuzzing Tests
        working-directory: caddy/
        run: go test -fuzz FuzzRequest -fuzztime 20s
      -
        name: Build the server
        working-directory: caddy/frankenphp/
        run: go build
      -
        name: Start the server
        working-directory: testdata/
        run: sudo ../caddy/frankenphp/frankenphp start
      -
        name: Run integrations tests
        run: ./reload_test.sh
      -
        name: Lint Go code
        uses: golangci/golangci-lint-action@v6
        if: matrix.php-versions == '8.3'
        with:
          version: latest