diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 475d77aa..6f472e15 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -18,6 +18,35 @@ jobs: with: release-type: python + - name: Checkout release PR + if: ${{ steps.release.outputs.prs_created == 'true' }} + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Normalize release PR pyproject prerelease version + if: ${{ steps.release.outputs.prs_created == 'true' }} + env: + RELEASE_PR_BRANCH: release-please--branches--${{ github.ref_name }} + run: | + set -euo pipefail + + git fetch origin "${RELEASE_PR_BRANCH}:${RELEASE_PR_BRANCH}" + git switch "${RELEASE_PR_BRANCH}" + + python3 scripts/normalize_pyproject_prerelease.py pyproject.toml + + if git diff --quiet -- pyproject.toml; then + echo "pyproject.toml already uses a PEP 440-compatible version" + exit 0 + fi + + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add pyproject.toml + git commit -m "chore: normalize prerelease version to PEP 440" + git push origin "HEAD:${RELEASE_PR_BRANCH}" + # Publish to PyPI when a release is created - name: Checkout if: ${{ steps.release.outputs.release_created }} diff --git a/release-please-config.json b/release-please-config.json index 10a09797..89e087ad 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -6,7 +6,7 @@ "changelog-path": "CHANGELOG.md", "bump-minor-pre-major": true, "bump-patch-for-minor-pre-major": false, - "versioning": "default", + "versioning": "prerelease", "prerelease": true, "prerelease-type": "beta" } diff --git a/scripts/normalize_pyproject_prerelease.py b/scripts/normalize_pyproject_prerelease.py new file mode 100644 index 00000000..2cf3599b --- /dev/null +++ b/scripts/normalize_pyproject_prerelease.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +"""Normalize release-please prerelease versions in pyproject.toml.""" + +from __future__ import annotations + +import argparse +import re +from pathlib import Path + +_SEMVER_PRERELEASE_RE = re.compile( + r"^(?P\d+\.\d+\.\d+)-(?P