Skip to content
Latchkey

Publish to PyPI workflow (KapJI/capital-gains-calculator)

The Publish to PyPI workflow from KapJI/capital-gains-calculator, explained and optimized by Latchkey.

A

CI health: A - excellent

Point runs-on at Latchkey and get job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: KapJI/capital-gains-calculator.github/workflows/publish.ymlLicense MITView source

What it does

This is the Publish to PyPI workflow from the KapJI/capital-gains-calculator repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
name: Publish to PyPI

on:
  release:
    types: [published]

env:
  PYTHON_VERSION: "3.12"

jobs:
  publish:
    name: Publish
    runs-on: ubuntu-latest
    environment:
      name: pypi
    permissions:
      id-token: write
      contents: read
    steps:
      - name: Check out the repository
        uses: actions/checkout@v6

      - name: Prepare and install deps
        uses: ./.github/actions/install-deps
        with:
          python-version: ${{ env.PYTHON_VERSION }}

      - name: Set version from tag
        run: uv version "${{ github.event.release.tag_name }}" --frozen

      - name: Run tests
        run: uv run pytest -q

      - name: Build package
        run: uv build

      - name: Publish to PyPI
        run: uv publish

The same workflow, on Latchkey

Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.

name: Publish to PyPI
 
on:
  release:
    types: [published]
 
env:
  PYTHON_VERSION: "3.12"
 
jobs:
  publish:
    timeout-minutes: 30
    name: Publish
    runs-on: latchkey-small
    environment:
      name: pypi
    permissions:
      id-token: write
      contents: read
    steps:
      - name: Check out the repository
        uses: actions/checkout@v6
 
      - name: Prepare and install deps
        uses: ./.github/actions/install-deps
        with:
          python-version: ${{ env.PYTHON_VERSION }}
 
      - name: Set version from tag
        run: uv version "${{ github.event.release.tag_name }}" --frozen
 
      - name: Run tests
        run: uv run pytest -q
 
      - name: Build package
        run: uv build
 
      - name: Publish to PyPI
        run: uv publish
 

What changed

This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow