diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..91b10b4 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,56 @@ +name: Release + +# Triggered when a version tag is pushed (e.g. v1.0.2). +# Creates a GitHub Release marked as "published", which in turn +# triggers the build-wheels and publish jobs in CI.yml. + +on: + push: + tags: + - "v[0-9]+.[0-9]+.[0-9]+" + +permissions: + contents: write + +jobs: + create-release: + name: Create GitHub Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Extract version from tag + id: version + run: | + VERSION="${GITHUB_REF_NAME#v}" + 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<