name: deploy

on:
  workflow_dispatch:
    inputs:
      version:
        description: 'Release version'
        required: true
        default: '1.2.3'


# Set permissions at the job level.
permissions: {}

jobs:
  package:
    runs-on: ubuntu-latest
    env:
      SETUPTOOLS_SCM_PRETEND_VERSION: ${{ github.event.inputs.version }}
    timeout-minutes: 10

    # Required by attest-build-provenance-github.
    permissions:
      id-token: write
      attestations: write

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

    - name: Build and Check Package
      uses: hynek/build-and-inspect-python-package@v2.5.0
      with:
        attest-build-provenance-github: 'true'

  deploy:
    if: github.repository == 'pytest-dev/pytest'
    needs: [package]
    runs-on: ubuntu-latest
    environment: deploy
    timeout-minutes: 30
    permissions:
      id-token: write
      contents: write
    steps:
    - uses: actions/checkout@v4

    - name: Download Package
      uses: actions/download-artifact@v4
      with:
        name: Packages
        path: dist

    - name: Publish package to PyPI
      uses: pypa/gh-action-pypi-publish@v1.8.14

    - name: Push tag
      run: |
        git config user.name "pytest bot"
        git config user.email "pytestbot@gmail.com"
        git tag --annotate --message=v${{ github.event.inputs.version }} ${{ github.event.inputs.version }} ${{ github.sha }}
        git push origin ${{ github.event.inputs.version }}

  release-notes:

    # todo: generate the content in the build  job
    #       the goal being of using a github action script to push the release data
    #       after success instead of creating a complete python/tox env
    needs: [deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 30
    permissions:
      contents: write
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
        persist-credentials: false

    - name: Download Package
      uses: actions/download-artifact@v4
      with:
        name: Packages
        path: dist

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

    - name: Install tox
      run: |
        python -m pip install --upgrade pip
        pip install --upgrade tox

    - name: Generate release notes
      run: |
        sudo apt-get install pandoc
        tox -e generate-gh-release-notes -- ${{ github.event.inputs.version }} scripts/latest-release-notes.md

    - name: Publish GitHub Release
      uses: softprops/action-gh-release@v2
      with:
        body_path: scripts/latest-release-notes.md
        files: dist/*
        tag_name: ${{ github.event.inputs.version }}
