diff --git a/.github/workflows/release-please-reusable.yml b/.github/workflows/release-please-reusable.yml new file mode 100644 index 0000000..552f080 --- /dev/null +++ b/.github/workflows/release-please-reusable.yml @@ -0,0 +1,22 @@ +name: Release Please (reusable) +on: + workflow_call: + inputs: + release-type: + description: "release-please release-type strategy" + type: string + default: simple +jobs: + release-please: + runs-on: ubuntu-latest + timeout-minutes: 10 + permissions: + contents: write + pull-requests: write + issues: write + steps: + - uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0 + with: + release-type: ${{ inputs.release-type }} + config-file: release-please-config.json + manifest-file: .release-please-manifest.json diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 0000000..a6c7b73 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,12 @@ +name: Release Please +on: + push: + branches: + - main +jobs: + release-please: + permissions: + contents: write + pull-requests: write + issues: write + uses: Coding-Autopilot-System/.github/.github/workflows/release-please-reusable.yml@f288e5e3b67b29a2c08880b76da7b852f4a132d0 diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..e18ee07 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "0.0.0" +} diff --git a/docs/RELEASE_POLICY.md b/docs/RELEASE_POLICY.md index ca5dee3..9464456 100644 --- a/docs/RELEASE_POLICY.md +++ b/docs/RELEASE_POLICY.md @@ -29,3 +29,40 @@ rewriting published history. Repositories that are demonstrations or not yet stable must state that clearly in their README. They still require reproducible setup, validation evidence, and explicit safety boundaries. + +## Release Automation (v1.5) + +1. **Tool: release-please via a single reusable workflow.** All 13 portfolio repos + call `.github/workflows/release-please-reusable.yml` in this repo + (`Coding-Autopilot-System/.github`) instead of each hand-rolling a + semver-bump/changelog script or duplicating a release-please config 13 times. + release-please deterministically parses conventional commits — already enforced + org-wide by pr-lint's PR-title check — rather than reinventing that parsing logic, + and its default flow opens a review-gated "release PR" rather than tagging + directly on every merge, which fits the existing two-party-review governance + instead of fighting it. +2. **Uniform `release-type: simple` across all 13 repos**, regardless of language + (C#, Python, Node, PowerShell, docs-only). `simple` only manages a + `CHANGELOG.md` + version manifest and never mutates a language-specific manifest + file, avoiding 13 different per-language configurations. +3. **Each repo keeps its own independent SemVer line** — not synced to the CAS + portfolio milestone number (e.g. v1.5). gsd-orchestrator (already at v4.0.0) and + cas-contracts (already at v1.1.1) already prove per-repo versioning is + independent of portfolio milestone numbering; forcing a shared baseline across + repos with unrelated existing tag histories would be meaningless and would + collide with gsd-orchestrator's real v4.x line. +4. **Bootstrap baseline.** Repos with zero existing GitHub tags (including this + repo, org-dotgithub) bootstrap their `.release-please-manifest.json` at + `"0.0.0"` so release-please's first run computes the genuine first version from + complete commit history. Repos with a real existing latest tag on GitHub (e.g. + gsd-orchestrator at `4.0.0`, cas-contracts at `1.1.1`) bootstrap their manifest + from that real tag so their first automated release only covers what changed + since that point. Baselines are verified against `gh api .../tags` output, not + assumed from local-only tags. +5. **SHA-pinned cross-repo dependency.** Other repos pin their caller workflow's + `uses:` line to a specific org-dotgithub commit SHA (never `@main`), and the + third-party `googleapis/release-please-action` inside this reusable workflow is + itself SHA-pinned, per the existing Phase 31 org action-pinning policy. Bumping + the pinned release-please-action version later requires a deliberate, reviewed + SHA update in each caller — the same accepted maintenance tradeoff Phase 31 + already established for direct action pins. diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..842a53e --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "release-type": "simple", + "packages": { + ".": { + "release-type": "simple", + "changelog-path": "CHANGELOG.md" + } + } +}