name: build

on:
  push:
    branches:
      - "master"
      - "ci-*"
    tags:
      - "**"
  pull_request:
  workflow_dispatch:

env:
  PY_COLORS: 1

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          # fetch all commits for version computation
          fetch-depth: 0
      - name: Setup Python
        uses: actions/setup-python@v6
        with:
          python-version: "3.14"
      - name: Install dependencies
        run: python -m pip install -U build
      - name: Build
        run: python -m build
      - name: List distributions
        run: ls -lR dist
      - name: Save build artifacts
        uses: actions/upload-artifact@v5
        with:
          name: build
          path: dist
      - name: Install sdist
        run: python -m pip install dist/*.tar.gz
      - name: Test
        run: python -m unittest discover tests -v

  tests-py:
    name: Test | ${{ matrix.python }}
    runs-on: ubuntu-latest
    needs:
      - build
    strategy:
      matrix:
        python:
          - "3.10"
          - "3.11"
          - "3.12"
          - "3.13"
          - "3.14"
          - "pypy-3.10"
          - "pypy-3.11"
    steps:
      - uses: actions/checkout@v6
      - name: Restore build artifacts
        uses: actions/download-artifact@v6
        with:
          name: build
          path: dist
      - name: Setup Python ${{ matrix.python }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python }}
      - name: Install wheel
        run: python -m pip install dist/*.whl
      - name: Test
        run: python -m unittest discover tests -v

  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Setup Python
        uses: actions/setup-python@v6
        with:
          python-version: 3.14
      - name: Install dependencies
        run: python -m pip install -r requirements-lint.txt
      - name: ruff check
        run: ruff check
      - name: ruff format
        run: ruff format --check

  type:
    name: Type
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Setup Python
        uses: actions/setup-python@v6
        with:
          python-version: 3.14
      - name: Install dependencies
        run: python -m pip install -r requirements-type.txt
      - name: Create _version.py
        run: echo '__version__ = ""' > src/pyzstd/_version.py
      - name: mypy
        run: mypy

  publish:
    name: Publish to PyPI
    if: startsWith(github.ref, 'refs/tags')
    needs:
      - build
      - tests-py
    runs-on: ubuntu-latest
    environment: publish
    permissions:
      id-token: write # This permission is mandatory for trusted publishing
    steps:
      - name: Restore build artifacts
        uses: actions/download-artifact@v6
        with:
          name: build
          path: dist
      - name: List distributions
        run: ls -lR dist
      - name: Publish to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          verbose: true
          print-hash: true
