Skip to content

[Devops] Branching Strategy - Phase 3 #509

@lowlydba

Description

@lowlydba

Goal

Build and publish packages to the right destinations using version strings computed by Phase 2. Each workflow has one trigger and one destination. No version logic lives here.

Trigger × destination matrix

Trigger Workflow Packages Version Destination
Push to vnext p3-dev-builds-ca affected pkgs only <last-published>+dev.N CA dev repo
Push to main (no <major>/<minor> bump) p3-main-publish affected pkgs only <major>.<minor>.<next-patch> ⚠️ TBD — see below
<major>/<minor> bump on main p3-release-publish affected pkgs only <major>.<minor>.0 Public PyPI

CodeArtifact: domain overture-pypi / account 505071440022 / region us-west-2.

Warning

Decision required before Phase 3 can start: Where do patch releases go?

  • Option A — Patches → Public PyPI: every main merge is a public release. Consumers always get latest. PyPI gets noisy; every merged PR is a public event.
  • Option B — Patches → CA only, PyPI on major/minor bumps only: cleaner public release signal. Internal (CDP) and external (PyPI) consumers diverge — external consumers only see curated major/minor releases.

This decision also affects whether p2-release-trigger (Phase 2.B) is needed as a PyPI gate, or whether a direct main push trigger is sufficient.

Tasks

p3-dev-builds-ca

  • Trigger: push to vnext
  • Detect affected packages (changed since last dev build).
  • Use compute-version action to get <last-published>+dev.<run_number> per affected pkg.
  • Build + publish to CA dev repo.
  • CDP consumers pin >=<last-published>+dev.0 per package to track latest.

p3-main-publish

  • Trigger: push to main with no <major>/<minor> changes.
  • Detect affected packages.
  • Use compute-version action to get <major>.<minor>.<next-patch> per affected pkg.
  • Build + publish to TBD destination (CA or PyPI — see decision above).

p3-release-publish

  • Trigger: <major>/<minor> bump on main (any package).
  • Build affected packages at <major>.<minor>.0.
  • Publish to public PyPI via Trusted Publishing (OIDC, no long-lived tokens) + PyPI attestations.
  • Pattern follows overturemaps-py publish workflow.
  • Prereq: PyPI Trusted Publisher OIDC must be configured per-package in PyPI project settings before this workflow lands.

p3-docs

Update docs/versioning.md with:

  • Trigger × destination matrix (above)
  • CDP dev build consumption pattern (>=<last-published>+dev.0)
  • PyPI Trusted Publisher setup notes

Contributor-facing changes

  • Push to vnext → affected packages auto-publish to CA dev repo as <version>+dev.N.
  • Push to main (no version bump) → affected packages publish as <major>.<minor>.<next-patch> to TBD destination.
  • Bump any package's <major>/<minor> on main → public PyPI publish fires automatically.
  • Internal consumers (CDP): pin >=<last-published>+dev.0 to track vnext dev builds.

Definition of done

  • Patch destination decision made (CA vs PyPI)
  • PyPI Trusted Publisher OIDC configured for all packages
  • p3-dev-builds-ca workflow live
  • p3-main-publish workflow live
  • p3-release-publish workflow live, tested against a real release
  • docs/versioning.md updated

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No fields configured for Task.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions