name: Test

on: [push, pull_request, workflow_dispatch]

permissions: {}

env:
  FORCE_COLOR: 1

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        python-version: ["pypy3.10", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
        os: [windows-latest, macos-latest, ubuntu-latest]

    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          allow-prereleases: true

      - name: Install uv
        uses: astral-sh/setup-uv@v5

      - name: Tox tests
        run: |
          uvx --with tox-uv tox -e py

      - name: Test CLI
        if: matrix.os == 'ubuntu-latest'
        run: |
          uvx --with tox-uv tox -e cli

      - name: Test emojis.json is up-to-date
        run: |
          # Install
          uv pip install --system -e .
          # Regenerate
          python scripts/despacify.py
          # Fail if different
          git diff --name-only --exit-code

      - name: Upload coverage
        uses: codecov/codecov-action@v5
        with:
          flags: ${{ matrix.os }}
          name: ${{ matrix.os }} Python ${{ matrix.python-version }}

  success:
    needs: test
    runs-on: ubuntu-latest
    name: Test successful
    steps:
      - name: Success
        run: echo Test successful