name: Release # Triggered when a version tag is pushed (e.g. v1.0.3). # Creates a GitHub Release marked as "published", which in turn # triggers the build-wheels and publish jobs in CI.yml. on: push: tags: - "v*.*.*" permissions: contents: write jobs: create-release: name: Create GitHub Release runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: fetch-depth: 0 token: ${{ secrets.GH_PAT }} - name: Extract version from tag id: version run: | VERSION="${GITHUB_REF_NAME#v}" if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+([-.][0-9A-Za-z.]+)?$ ]]; then echo "Expected a semantic-version tag like v1.0.3 or v1.0.3-rc1, got: $GITHUB_REF_NAME" exit 1 fi echo "version=$VERSION" >> "$GITHUB_OUTPUT" - name: Extract changelog entry for this version id: changelog env: TAG_NAME: ${{ github.ref_name }} run: | python3 - <<'PY' import re, os, pathlib version = os.environ["TAG_NAME"].lstrip("v") text = pathlib.Path("CHANGELOG.md").read_text(encoding="utf-8") pattern = rf"## \[{re.escape(version)}\].*?\n(.*?)(?=\n## |\Z)" match = re.search(pattern, text, re.DOTALL) body = match.group(1).strip() if match else f"Release {version}" with open(os.environ["GITHUB_OUTPUT"], "a") as f: f.write(f"body<