Add discovery and improve consistency #31
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Latest release | |
| env: | |
| CACHE_VERSION: 1 | |
| DEFAULT_PYTHON: "3.13" | |
| # Only run on merges | |
| on: | |
| pull_request: | |
| types: closed | |
| branches: | |
| - main | |
| jobs: | |
| publishing: | |
| name: Build and publish Python 🐍 distributions 📦 to PyPI | |
| runs-on: ubuntu-latest | |
| environment: pypi | |
| permissions: | |
| contents: read # Required by actions/checkout | |
| id-token: write # Needed for OIDC-based Trusted Publishing | |
| # Only trigger on merges, not just closes | |
| if: github.event.pull_request.merged == true | |
| steps: | |
| - name: Check out committed code | |
| uses: actions/checkout@v4 | |
| - name: Prepare uv | |
| run: | | |
| pip install uv | |
| uv venv --seed venv | |
| . venv/bin/activate | |
| uv pip install toml | |
| - name: Check for existing package on PyPI | |
| id: check_package | |
| run: | | |
| . venv/bin/activate | |
| PACKAGE_VERSION=$(python -c "import toml; print(toml.load('pyproject.toml')['project']['version'])") | |
| PACKAGE_NAME=$(python -c "import toml; print(toml.load('pyproject.toml')['project']['name'])") | |
| echo "Checking for package: $PACKAGE_NAME==$PACKAGE_VERSION" | |
| if curl -s "https://pypi.org/pypi/$PACKAGE_NAME/json" | jq -r '.releases | keys[]' | grep -q "^$PACKAGE_VERSION$"; then | |
| echo "Package version already exists. Skipping upload." | |
| echo "should_publish=false" >> $GITHUB_OUTPUT | |
| else | |
| echo "Package version does not exist. Proceeding with upload." | |
| echo "should_publish=true" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Build | |
| if: steps.check_package.outputs.should_publish == 'true' | |
| run: | | |
| . venv/bin/activate | |
| uv build | |
| - name: Publish distribution 📦 to PyPI | |
| if: steps.check_package.outputs.should_publish == 'true' | |
| run: | | |
| . venv/bin/activate | |
| uv publish |