Skip to content
Latchkey

Deploy to PyPI workflow (gallantlab/himalaya)

The Deploy to PyPI workflow from gallantlab/himalaya, explained and optimized by Latchkey.

D

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.

Grade your own workflow free or run it on Latchkey →
Source: gallantlab/himalaya.github/workflows/deploy_pypi.ymlLicense BSD-3-ClauseView source

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

workflow (.yml)
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

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:

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