From 0e843c3548cceafd772286298543b9ce5f95c827 Mon Sep 17 00:00:00 2001 From: David Soria Parra Date: Mon, 11 Nov 2024 22:28:28 +0000 Subject: [PATCH] PyPI release workflow --- .github/workflows/publish-pypi.yml | 117 +++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 .github/workflows/publish-pypi.yml diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml new file mode 100644 index 0000000..50b8c88 --- /dev/null +++ b/.github/workflows/publish-pypi.yml @@ -0,0 +1,117 @@ +on: + push: + tags: + - "*" + branches: + - test-release + +jobs: + release-build: + name: Build distribution + runs-on: ubuntu-latest + needs: [format, typecheck] # Add format and typecheck as dependencies + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v3 + + - name: "Set up Python" + uses: actions/setup-python@v5 + with: + python-version-file: ".python-version" + + - name: Install the project + run: uv sync --frozen --all-extras --dev + + - name: Build + run: uv build + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: release-dists + path: dist/ + + format: # Add format check job + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v3 + with: + enable-cache: true + + - name: "Set up Python" + uses: actions/setup-python@v5 + with: + python-version-file: ".python-version" + + - name: Install the project + run: uv sync --frozen --all-extras --dev + + - name: Run ruff format check + run: uv run --frozen ruff check . + + typecheck: # Add type check job + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v3 + with: + enable-cache: true + + - name: "Set up Python" + uses: actions/setup-python@v5 + with: + python-version-file: ".python-version" + + - name: Install the project + run: uv sync --frozen --all-extras --dev + + - name: Run pyright + run: uv run --frozen pyright + + pypi-publish: + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') + name: Upload release to PyPI + runs-on: ubuntu-latest + environment: release + needs: + - release-build + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + + steps: + - name: Retrieve release distributions + uses: actions/download-artifact@v4 + with: + name: release-dists + path: dist/ + + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + + test-pypi-publish: + name: Upload release to TestPyPI + runs-on: ubuntu-latest + environment: release + needs: + - release-build + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + + steps: + - name: Retrieve release distributions + uses: actions/download-artifact@v4 + with: + name: release-dists + path: dist/ + + - name: Publish package distributions to TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/