# This file is copied from https://github.com/psf/requests/blob/8f6cda9969f4a98c45ea2922f6bcbefc02256202/.github/workflows/publish.yml
name: Publish to PyPI

on:
  push:
    tags:
      - "v*"
  workflow_dispatch:
    inputs:
      test-pypi-only:
        description: "Publish to Test PyPI only"
        type: boolean
        default: true

permissions:
  contents: read

jobs:
  build:
    name: "Build dists"
    runs-on: "ubuntu-slim"
    outputs:
      artifact-id: ${{ steps.upload-artifact.outputs.artifact-id }}

    steps:
      - name: "Checkout repository"
        uses: "actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd" # v6.0.2
        with:
          persist-credentials: false

      - name: "Setup Python"
        uses: "actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405" # v6.2.0
        with:
          python-version: "3.x"

      - name: "Install dependencies"
        run: python -m pip install build==1.5.0

      - name: "Build dists"
        run: |
          SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) \
          python -m build

      - name: "Upload dists"
        uses: "actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f"
        id: upload-artifact
        with:
          name: "dist"
          path: "dist/"
          if-no-files-found: error
          retention-days: 5

  publish:
    name: "Publish"
    if: startsWith(github.ref, 'refs/tags/')
    needs: ["build"]
    permissions:
      id-token: write
    runs-on: "ubuntu-latest"
    environment:
      name: "publish"

    steps:
    - name: "Download dists"
      uses: "actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3" # v8.0.0
      with:
        artifact-ids: ${{ needs.build.outputs.artifact-id }}
        path: "dist/"

    - name: "Publish dists to PyPI"
      uses: "pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b" # v1.14.0
      with:
        attestations: true

  publish-test-pypi:
    name: "Publish to Test PyPI"
    if: github.event_name == 'workflow_dispatch'
    needs: ["build"]
    permissions:
      id-token: write
    runs-on: "ubuntu-latest"
    environment:
      name: "testpypi"

    steps:
    - name: "Download dists"
      uses: "actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3" # v8.0.0
      with:
        artifact-ids: ${{ needs.build.outputs.artifact-id }}
        path: "dist/"

    - name: "Publish dists to Test PyPI"
      uses: "pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b" # v1.14.0
      with:
        repository-url: https://test.pypi.org/legacy/
        attestations: true
