# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/test-go-integration-task.md
name: Test Integration

# See: https://docs.github.com/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows
on:
  create:
  push:
    paths:
      - ".github/workflows/test-go-integration-task.ya?ml"
      - "Taskfile.ya?ml"
      - "**.go"
      - "go.mod"
      - "go.sum"
      - "poetry.lock"
      - "pyproject.toml"
      - "tests/**"
  pull_request:
    paths:
      - ".github/workflows/test-go-integration-task.ya?ml"
      - "Taskfile.ya?ml"
      - "**.go"
      - "go.mod"
      - "go.sum"
      - "poetry.lock"
      - "pyproject.toml"
      - "tests/**"
  schedule:
    # Run periodically to catch breakage caused by external changes.
    - cron: "0 10 * * WED"
  workflow_dispatch:
  repository_dispatch:

jobs:
  run-determination:
    runs-on: ubuntu-latest
    outputs:
      result: ${{ steps.determination.outputs.result }}
    permissions: {}
    steps:
      - name: Determine if the rest of the workflow should run
        id: determination
        run: |
          RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x"
          # The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead.
          if [[
            "${{ github.event_name }}" != "create" ||
            "${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX
          ]]; then
            # Run the other jobs.
            RESULT="true"
          else
            # There is no need to run the other jobs.
            RESULT="false"
          fi

          echo "result=$RESULT" >> $GITHUB_OUTPUT

  test:
    needs: run-determination
    if: needs.run-determination.outputs.result == 'true'
    permissions:
      contents: read

    strategy:
      matrix:
        operating-system:
          - ubuntu-latest
          - windows-latest
          - macos-latest

    runs-on: ${{ matrix.operating-system }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install Go
        uses: actions/setup-go@v5
        with:
          go-version-file: go.mod

      - name: Install Python
        uses: actions/setup-python@v5
        with:
          python-version-file: pyproject.toml

      - name: Install Poetry
        run: pip install poetry

      - name: Install Task
        uses: arduino/setup-task@v2
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          version: 3.x

      - name: Run integration tests
        run: task go:test-integration