name: test

on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]

concurrency:
  group: test-${{ github.head_ref }}
  cancel-in-progress: true

env:
  PYTHONUNBUFFERED: "1"
  FORCE_COLOR: "1"

permissions:
  deployments: write
  contents: write

jobs:
  run:
    name: Python ${{ matrix.python-version }} on ${{ startsWith(matrix.os, 'macos-') && 'macOS' || startsWith(matrix.os, 'windows-') && 'Windows' || 'Linux' }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        python-version: ["3.8", "3.9", "3.10", "3.11"]

    steps:
      - uses: actions/checkout@v3

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install Hatch
        run: pip install --upgrade hatch

      - name: Build c++ extensions
        run: hatch build

      - name: Run tests
        run: hatch run test

  perf:
    name: Ubuntu
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
    steps:
      - uses: actions/checkout@v3

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v4
        with:
          python-version: "3.11"

      - name: Install Hatch
        run: pip install --upgrade hatch

      - name: Build c++ extensions
        run: hatch build && python bootstrap.py

      - name: Performance suite
        run: hatch run bench

      - name: Store benchmark result
        if: startsWith(github.ref, 'refs/tags/')
        uses: benchmark-action/github-action-benchmark@v1
        with:
          name: Release Benchmark
          tool: "pytest"
          output-file-path: output.json
          # pages
          github-token: ${{ secrets.GITHUB_TOKEN }}
          alert-comment-cc-users: "@joshua-auchincloss"
          auto-push: true

      - name: Store benchmark result
        if: ${{ !startsWith( github.ref, 'refs/tags/' ) }}
        uses: benchmark-action/github-action-benchmark@v1
        with:
          name: Devel Benchmark
          tool: "pytest"
          output-file-path: output.json
          # pages
          github-token: ${{ secrets.GITHUB_TOKEN }}
          alert-comment-cc-users: "@joshua-auchincloss"
          auto-push: true
