Skip to content

Project import generated by Copybara. #5

Project import generated by Copybara.

Project import generated by Copybara. #5

Workflow file for this run

name: Publish to PyPI
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
id-token: write # required for PyPI trusted publishing (OIDC)
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- name: Set up Python
run: uv python install
- name: Check PyPI version
id: version
run: |
LOCAL=$(python3 -c "
import tomllib
with open('pyproject.toml', 'rb') as f:
print(tomllib.load(f)['project']['version'])
")
PKG_NAME=$(python3 -c "
import tomllib
with open('pyproject.toml', 'rb') as f:
print(tomllib.load(f)['project']['name'])
")
REMOTE=$(curl -s "https://pypi.org/pypi/${PKG_NAME}/json" \
| python3 -c "import sys,json; print(json.load(sys.stdin)['info']['version'])" \
2>/dev/null || echo "0.0.0")
echo "📦 Package: $PKG_NAME"
echo "📄 Local version: $LOCAL"
echo "🌐 Published version: $REMOTE"
SHOULD_PUBLISH=$(python3 -c "
from packaging.version import Version
print('true' if Version('${LOCAL}') > Version('${REMOTE}') else 'false')
")
echo "publish=${SHOULD_PUBLISH}" >> "$GITHUB_OUTPUT"
- name: Install, lint, test, build
if: steps.version.outputs.publish == 'true'
run: |
uv sync
uv run ruff check .
uv run ruff format --check .
uv run pyright
uv run pytest
uv build
- name: Publish to PyPI
if: steps.version.outputs.publish == 'true'
uses: pypa/gh-action-pypi-publish@release/v1
# Uses OIDC trusted publishing — no API token needed