# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt

name: "Publish"

on:
  repository_dispatch:
    # Triggered with `make` targets:
    types:
      - publish-testpypi    # `make test_upload`
      - publish-pypi        # `make pypi_upload`

defaults:
  run:
    shell: bash

permissions:
  contents: read

concurrency:
  group: "${{ github.workflow }}-${{ github.ref }}"
  cancel-in-progress: true

jobs:
  find-run:
    name: "Find latest kit.yml run"
    runs-on: "ubuntu-latest"
    outputs:
      run-id: ${{ steps.run-id.outputs.run-id }}

    steps:
    - name: "Find latest kit.yml run"
      id: runs
      uses: octokit/request-action@872c5c97b3c85c23516a572f02b31401ef82415d # v2.3.1
      with:
        route: GET /repos/nedbat/coveragepy/actions/workflows/kit.yml/runs
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: "Record run id"
      id: run-id
      run: |
        echo "run-id=${{ fromJson(steps.runs.outputs.data).workflow_runs[0].id }}" >> "$GITHUB_OUTPUT"

  publish-to-test-pypi:
    name: "Publish to Test PyPI"
    if: ${{ github.event.action == 'publish-testpypi' }}
    permissions:
      id-token: write
      attestations: write
    runs-on: "ubuntu-latest"
    environment:
      name: "testpypi"
    needs:
      - find-run

    steps:
    - name: "Download dists"
      uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
      with:
        repository: "nedbat/coveragepy"
        run-id: ${{needs.find-run.outputs.run-id}}
        github-token: ${{ secrets.GITHUB_TOKEN }}
        pattern: "dist-*"
        merge-multiple: true
        path: "dist/"

    - name: "What did we get?"
      run: |
        ls -alR
        echo "Number of dists:"
        ls -1 dist | wc -l

    - name: "Generate attestations"
      uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
      with:
        subject-path: "dist/*"

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

  publish-to-pypi:
    name: "Publish to PyPI"
    if: ${{ github.event.action == 'publish-pypi' }}
    permissions:
      id-token: write
      attestations: write
    runs-on: "ubuntu-latest"
    environment:
      name: "pypi"
    needs:
      - find-run

    steps:
    - name: "Download dists"
      uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
      with:
        repository: "nedbat/coveragepy"
        run-id: ${{needs.find-run.outputs.run-id}}
        github-token: ${{ secrets.GITHUB_TOKEN }}
        pattern: "dist-*"
        merge-multiple: true
        path: "dist/"

    - name: "What did we get?"
      run: |
        ls -alR
        echo "Number of dists:"
        ls -1 dist | wc -l

    - name: "Generate attestations"
      uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
      with:
        subject-path: "dist/*"

    - name: "Publish dists to PyPI"
      uses: pypa/gh-action-pypi-publish@ec4db0b4ddc65acdf4bff5fa45ac92d78b56bdf0 # v1.9.0
