name: Release

on:
  push:
    tags: ['v*']
  workflow_dispatch:

jobs:
  release-build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v5

      - name: Install python
        uses: actions/setup-python@v5
        with:
          python-version: '3.x'

      - name: Install just
        uses: extractions/setup-just@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: build release distributions
        run: |
          just ci-install
          just build

      - name: upload dists
        uses: actions/upload-artifact@v4
        with:
          name: release-dists
          path: dist/

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

    steps:
      - name: Retrieve release distributions
        uses: actions/download-artifact@v4
        with:
          name: release-dists
          path: dist/

      - name: Publish release distributions to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1

  publish-release:
    runs-on: ubuntu-latest
    name: Publish to GitHub
    if: "startsWith(github.ref, 'refs/tags/')"
    needs:
      - release-build
    permissions:
      contents: write
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: release-dists
          path: dist/
      - name: Get tag name
        run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
      - name: Publish to GitHub
        uses: softprops/action-gh-release@v2
        with:
          draft: true
          files: dist/*
          tag_name: ${{ env.RELEASE_VERSION }}
