name: build

on: [push, pull_request]

env:
  # color output for pytest and tox
  PYTEST_ADDOPTS: "--color=yes"
  PY_COLORS: 1

jobs:
  test:
    name: Test - ${{ matrix.python }} - ${{ matrix.os }}
    runs-on: ${{ matrix.os }}-latest

    strategy:
      matrix:
        os: [ubuntu, macos, windows]
        python: ["3.11", "3.12", "3.13", "3.14"]

    steps:
      - uses: actions/checkout@v6
      - name: Set up Python ${{ matrix.python }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python }}
          cache: "pip"
          cache-dependency-path: "**/requirements/*"
      - name: Install locale (Linux)
        if: startsWith(runner.os, 'Linux')
        run: sudo locale-gen fr_FR.UTF-8 tr_TR.UTF-8
      - name: Install pandoc
        uses: r-lib/actions/setup-pandoc@v2
        with:
          pandoc-version: "2.9.2"
      - name: Install tox
        run: python -m pip install -U pip tox
      - name: Info
        run: |
          echo "=====  PYTHON  ====="
          python --version
          echo "=====  PANDOC  ====="
          pandoc --version | head -2
      - name: Run tests
        run: tox -e py${{ matrix.python }}

  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: pdm-project/setup-pdm@v4
        with:
          python-version: "3.11"
          cache: true
          cache-dependency-path: ./pyproject.toml
      - name: Install dependencies
        run: |
          pdm install --no-default --dev
      - name: Run linters
        run: pdm lint --diff
      - name: Run pre-commit checks on all files
        uses: pre-commit/action@v3.0.1

  build:
    name: Test build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: pdm-project/setup-pdm@v4
        with:
          python-version: "3.11"
          cache: true
          cache-dependency-path: ./pyproject.toml
      - name: Install dependencies
        run: pdm install --dev
      - name: Build package
        run: pdm build
      - name: Test build
        run: pdm run pytest --check-build=dist  pelican/tests/build_test

  docs:
    name: Build docs
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6
      - name: Set up Python
        uses: actions/setup-python@v6
        with:
          python-version: "3.11"
          cache: "pip"
          cache-dependency-path: "**/requirements/*"
      - name: Install tox
        run: python -m pip install -U pip tox
      - name: Check
        run: tox -e docs
      - name: cache the docs for inspection
        uses: actions/upload-artifact@v5
        with:
          name: docs
          path: docs/_build/html/

  deploy:
    name: Deploy
    environment: Deployment
    needs: [test, lint, docs, build]
    runs-on: ubuntu-latest
    if: github.ref=='refs/heads/main' && github.event_name!='pull_request' && github.repository == 'getpelican/pelican'

    permissions:
      contents: write
      id-token: write

    steps:
      - uses: actions/checkout@v6
        with:
          token: ${{ secrets.GH_TOKEN }}

      - name: Set up Python
        uses: actions/setup-python@v6
        with:
          python-version: "3.11"

      - name: Check release
        id: check_release
        run: |
          python -m pip install --upgrade pip
          python -m pip install autopub[github]
          autopub check

      - name: Publish
        if: ${{ steps.check_release.outputs.autopub_release=='true' }}
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
        run: |
          autopub prepare
          autopub commit
          autopub build
          autopub githubrelease

      - name: Upload package to PyPI
        if: ${{ steps.check_release.outputs.autopub_release=='true' }}
        uses: pypa/gh-action-pypi-publish@release/v1
