Skip to content

[FEATURE] Branching strategy Phase 2.B - release trigger and versioning docs#557

Open
John McCall (lowlydba) wants to merge 4 commits into
mainfrom
533-devops-branching-strategy---phase-2b---release-versions
Open

[FEATURE] Branching strategy Phase 2.B - release trigger and versioning docs#557
John McCall (lowlydba) wants to merge 4 commits into
mainfrom
533-devops-branching-strategy---phase-2b---release-versions

Conversation

@lowlydba

@lowlydba John McCall (lowlydba) commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

Phase 2.B of the branching strategy (#533): release-event detection on main plus the versioning/release documentation. No publish workflows — those are Phase 3 (#509), which this partially unblocks.

Key decisions

These resolve the TBDs flagged in #533/#509, plus one deliberate deviation from the original issue text:

  1. Patch destination: CodeArtifact only (Option B in [Devops] Branching Strategy - Phase 3 #509). Publishing a GitHub Release is the sole trigger for public PyPI. Keeps the public release signal curated; every main merge is not a public event.
  2. Umbrella-only release trigger (deviation from "any package"). The issues said any package's major/minor bump cuts a release, but a single v<major>.<minor>.0 tag can't represent two packages bumping to different versions — e.g. a cli 0.1→0.2 bump would have cut a misleading v0.2.0. Only the umbrella overture-schema bump now cuts a release; its version names the tag. Escape hatch: a non-core package needing public PyPI immediately bumps the umbrella minor in the same PR (one line, and honest — the umbrella distribution's contents changed). Otherwise it rides the next umbrella release.
  3. Changelog: manual notes at release time. No fragment files or auto-generation machinery. Evaluated per-PR fragments (antsibull pattern) and GitHub auto-generated notes; rejected for friction/quality respectively.
  4. Draft-release human gate. The bump merge creates a draft release; a maintainer writes notes and clicks Publish, and only that release: published event fires the Phase 3 publish. Pairs the manual-notes decision with a natural approval gate — no accidental public releases.
  5. No semantic-release/release-please. Those tools want to own versioning end-to-end from conventional commits, conflicting with the 2.A model (human owns major/minor in pyproject.toml, CI computes patch from CodeArtifact state). The custom trigger is ~40 lines.

Changes

release-trigger workflow (new)

  • Runs on push to main, path-filtered to packages/overture-schema/pyproject.toml.
  • Compares the umbrella package's <major>.<minor> before/after via git show + stdlib tomllib.
  • On bump: creates a draft GitHub Release tagged v<major>.<minor>.0. Fails loudly if the tag already exists. Patch-only changes are a no-op.
  • Handles an unresolvable before SHA (force-push) gracefully.
  • zizmor clean.

docs/versioning.md (new)

Version scheme (human owns major/minor, CI owns patch), CI trigger/destination table, bump rules, full release process, vnext→main merge process, guardrails.

CONTRIBUTING.md

Release trigger CI section, versioning quick reference, vnext release diagram annotated with the bump commit + draft tag, roadmap table (2.B → done), Phase 2.B/3 migration notes updated with locked decisions.

Notes

  • Phase 1 vnext skips (vnext-compat, rebase-vnext) verified already in place — no changes needed.
  • Phase 3's p3-release-publish trigger should be updated in [Devops] Branching Strategy - Phase 3 #509 to release: published.

Closes #533

Detects an umbrella overture-schema major/minor bump on main and creates
a draft GitHub Release at v<major>.<minor>.0. Publishing the draft is the
only trigger for the public PyPI publish (Phase 3).

Decisions locked: patch builds stay CodeArtifact-only; release notes are
authored manually at release time; only the umbrella package bump cuts a
release.

Closes #533

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Signed-off-by: John McCall <john@overturemaps.org>
@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown

🗺️ Schema reference docs preview is live!

🌍 Preview https://staging.overturemaps.org/schema/pr/557/schema/index.html
🕐 Updated Jul 14, 2026 15:02 UTC
📝 Commit 4d1c242
🔧 env SCHEMA_PREVIEW true

Note

♻️ This preview updates automatically with each push to this PR.

…ases

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Signed-off-by: John McCall <john@overturemaps.org>
…ft release tag

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Signed-off-by: John McCall <john@overturemaps.org>
@lowlydba
John McCall (lowlydba) marked this pull request as ready for review July 14, 2026 14:54
Copilot AI review requested due to automatic review settings July 14, 2026 14:54
@lowlydba
John McCall (lowlydba) requested a review from a team as a code owner July 14, 2026 14:54

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Phase 2.B release-event detection on main and documents the versioning/release process so Phase 3 publish workflows can rely on a clear trigger and scheme.

Changes:

  • Adds a release-trigger GitHub Actions workflow that detects umbrella overture-schema <major>.<minor> bumps on main and creates a draft GitHub Release/tag.
  • Adds docs/versioning.md describing version ownership (human vs CI), trigger→destination behavior, and the release process.
  • Updates CONTRIBUTING.md with a release-trigger section, a versioning quick reference, and Phase status updates.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
.github/workflows/release-trigger.yaml New workflow that detects umbrella major/minor bumps and creates a draft GitHub Release/tag to gate public releases.
docs/versioning.md New documentation for version scheme, CI version behavior, and the release process.
CONTRIBUTING.md Adds contributor-facing guidance and references to the new versioning/release process docs.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/release-trigger.yaml
Comment on lines +93 to +96
if gh release view "$TAG" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
echo "::error::Release ${TAG} already exists. A duplicate major/minor bump landed on main — investigate before re-releasing."
exit 1
fi

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want this, the better approach is to make tags immutable with a Ruleset at the GitHub repo layer - I can configure this if desired.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Signed-off-by: John McCall <john@overturemaps.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Devops] Branching Strategy - Phase 2.B - Release Versions

2 participants