Deploy to PyPI workflow (gallantlab/himalaya)
The Deploy to PyPI workflow from gallantlab/himalaya, explained and optimized by Latchkey.
CI health: D - needs work
Point runs-on at Latchkey and get caching, run de-duplication, job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the Deploy to PyPI workflow from the gallantlab/himalaya repository, a real project running GitHub Actions. It is shown here with attribution under its BSD-3-Clause license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
name: Deploy to PyPI
# Deploy to PyPI if the __version__ variable in himalaya/__init__.py
# is larger than the latest version on PyPI.
on:
workflow_dispatch:
push:
branches:
- main
paths:
# trigger workflow only on commits that change __init__.py
- 'himalaya/__init__.py'
jobs:
deploy-pypi:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
- name: Get versions
# Compare the latest version on PyPI, and the current version
run: |
python -m pip install --upgrade -q pip
pip index versions himalaya
LATEST=$(pip index versions himalaya | grep 'himalaya' |awk '{print $2}' | tr -d '(' | tr -d ')')
CURRENT=$(cat himalaya/__init__.py | grep "__version__" | awk '{print $3}' | tr -d "'" | tr -d '"')
EQUAL=$([ "$CURRENT" = "$LATEST" ] && echo 1 || echo 0)
echo "LATEST=$LATEST" >> $GITHUB_ENV
echo "CURRENT=$CURRENT" >> $GITHUB_ENV
echo "EQUAL=$EQUAL" >> $GITHUB_ENV
- name: Print versions
run: |
echo ${{ env.LATEST }}
echo ${{ env.CURRENT }}
echo ${{ env.EQUAL }}
- name: Build and publish
if: ${{ env.EQUAL == 0 }}
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
python -m pip install --upgrade pip
python -m pip install setuptools wheel "twine<6.0"
python setup.py sdist bdist_wheel
python -m twine upload dist/*
The same workflow, on Latchkey
Estimated ~20% faster on cache hits, plus fewer wasted runs and a safer supply chain. Added and changed lines are highlighted.
name: Deploy to PyPI # Deploy to PyPI if the __version__ variable in himalaya/__init__.py # is larger than the latest version on PyPI. on: workflow_dispatch: push: branches: - main paths: # trigger workflow only on commits that change __init__.py - 'himalaya/__init__.py' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: deploy-pypi: timeout-minutes: 30 runs-on: latchkey-small steps: - uses: actions/checkout@v7 - uses: actions/setup-python@v6 with: cache: 'pip' - name: Get versions # Compare the latest version on PyPI, and the current version run: | python -m pip install --upgrade -q pip pip index versions himalaya LATEST=$(pip index versions himalaya | grep 'himalaya' |awk '{print $2}' | tr -d '(' | tr -d ')') CURRENT=$(cat himalaya/__init__.py | grep "__version__" | awk '{print $3}' | tr -d "'" | tr -d '"') EQUAL=$([ "$CURRENT" = "$LATEST" ] && echo 1 || echo 0) echo "LATEST=$LATEST" >> $GITHUB_ENV echo "CURRENT=$CURRENT" >> $GITHUB_ENV echo "EQUAL=$EQUAL" >> $GITHUB_ENV - name: Print versions run: | echo ${{ env.LATEST }} echo ${{ env.CURRENT }} echo ${{ env.EQUAL }} - name: Build and publish if: ${{ env.EQUAL == 0 }} env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | python -m pip install --upgrade pip python -m pip install setuptools wheel "twine<6.0" python setup.py sdist bdist_wheel python -m twine upload dist/*
What changed
- Run on Latchkey managed runners with one line (
runs-on), which apply the fixes below automatically and self-heal transient failures. This example useslatchkey-small; pick the runner size that fits the job. - Cancel superseded runs when a branch or PR gets a newer push.
- Cache dependency installs on the setup step so they are served from cache.
- Add a job timeout so a hung step cannot burn hours of runner time.
What Latchkey heals here
This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:
- Dependency installs
This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.