name: Python package

on:
  push:
    branches: "*"
    tags: "*.*.*"
  pull_request:

jobs:
  tests:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11", "pypy3.9"]
        os: ["ubuntu-latest", "windows-latest"]

    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 dependencies
      run: |
        python -m pip install --upgrade pip
        pip install tox
    - name: Test with tox
      run: tox run -e py,report_ci,lint
    - uses: codecov/codecov-action@v3
      with:
        token: ${{ secrets.CODECOV_TOKEN }}

  package:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Install build dependencies
        run: pip install --upgrade build
      - name: Build distributions
        run: python -m build
      - name: Upload packages
        uses: actions/upload-artifact@v3
        with:
          name: python-dist
          path: dist/*
          retention-days: 1

  publish:
    needs: [tests, package]
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/')
    environment:
      name: release
      url: https://pypi.org/p/pytest-console-scripts
    permissions:
      id-token: write
    steps:
      - name: Download packages
        uses: actions/download-artifact@v3
        with:
          name: python-dist
          path: dist/
      - name: Publish package distributions to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
