diff --git a/.github/workflows/publish-v0.2.0.yml b/.github/workflows/publish-v0.2.0.yml new file mode 100644 index 0000000..42d9468 --- /dev/null +++ b/.github/workflows/publish-v0.2.0.yml @@ -0,0 +1,86 @@ +name: Publish rfqdiff v0.2.0 + +on: + push: + branches: [main] + paths: + - ".github/workflows/publish-v0.2.0.yml" + +permissions: + contents: write + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: Check out release commit + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Verify release metadata + run: | + python - <<'PY' + from pathlib import Path + import tomllib + + project = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8"))["project"] + assert project["name"] == "rfqdiff", project + assert project["version"] == "0.2.0", project + + changelog = Path("CHANGELOG.md").read_text(encoding="utf-8") + assert "## [0.2.0] - 2026-08-29" in changelog + assert "## [0.2.0] - Unreleased" not in changelog + PY + + - name: Guard against duplicate release + env: + GH_TOKEN: ${{ github.token }} + run: | + if git rev-parse "refs/tags/v0.2.0" >/dev/null 2>&1; then + echo "v0.2.0 tag already exists" >&2 + exit 1 + fi + if gh release view v0.2.0 >/dev/null 2>&1; then + echo "v0.2.0 release already exists" >&2 + exit 1 + fi + + - name: Run release tests + run: | + python -m pip install --upgrade pip build twine + python -m pip install -e . + python -m unittest discover -s tests -v + python -m build + python -m twine check dist/* + + - name: Create annotated release tag + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git tag -a v0.2.0 "$GITHUB_SHA" -m "rfqdiff v0.2.0" + git push origin refs/tags/v0.2.0 + + - name: Prepare release notes + run: | + awk ' + /^## \[0\.2\.0\]/ {capture=1; next} + /^## \[/ && capture {exit} + capture {print} + ' CHANGELOG.md > "$RUNNER_TEMP/release-notes.md" + test -s "$RUNNER_TEMP/release-notes.md" + + - name: Publish GitHub Release + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create v0.2.0 \ + dist/* \ + --title "rfqdiff v0.2.0" \ + --notes-file "$RUNNER_TEMP/release-notes.md" \ + --verify-tag diff --git a/CHANGELOG.md b/CHANGELOG.md index 5948bca..665c677 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,9 @@ All notable changes to `rfqdiff` are documented here. -## [0.2.0] - Unreleased +## [0.2.0] - 2026-08-29 -Release hardening is in progress. The package metadata and machine-readable contract are on the v0.2 line; the latest published GitHub Release is still v0.1.0 until the v0.2.0 release is created. +The v0.2 line completes the original productization roadmap and release-hardening work for transparent, auditable commercial quotation comparison. ### Added @@ -20,6 +20,8 @@ Release hardening is in progress. The package metadata and machine-readable cont - Public Python helpers for quotation loading, weight validation and report export. - Test coverage across Python 3.11, 3.12 and 3.13. - Wheel/source-distribution build validation and installed-package smoke tests in CI. +- Sanitized industrial golden-pilot coverage for the complete quotation decision flow. +- Downstream compatibility verification with `supplier-scorecard` and the multi-tool Phase 2 procurement pilot. ### Changed