From d5f144f8f1346d02600dc479e6d881ef6e2dc866 Mon Sep 17 00:00:00 2001 From: rcourtman Date: Wed, 3 Jun 2026 17:31:11 +0100 Subject: [PATCH] Prepare v6.0.0 stable release --- VERSION | 2 +- docker-compose.yml | 2 +- docs/UPGRADE_v6.md | 6 ------ ...ga-promotion-readiness-blocked-2026-04-04.md | 17 +++++++---------- .../subsystems/deployment-installability.md | 3 +++ scripts/install-docker.sh | 2 +- scripts/installtests/install_docker_sh_test.go | 6 ++++++ .../resolve_release_promotion_test.py | 1 + 8 files changed, 20 insertions(+), 19 deletions(-) diff --git a/VERSION b/VERSION index 282946a2d..09b254e90 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.0.0-rc.6 +6.0.0 diff --git a/docker-compose.yml b/docker-compose.yml index 43cda9db7..217706585 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.8' services: pulse: - image: ${PULSE_IMAGE:-rcourtman/pulse:6.0.0-rc.6} + image: ${PULSE_IMAGE:-rcourtman/pulse:6.0.0} container_name: pulse restart: unless-stopped logging: diff --git a/docs/UPGRADE_v6.md b/docs/UPGRADE_v6.md index 47aa0636f..39daa5ee6 100644 --- a/docs/UPGRADE_v6.md +++ b/docs/UPGRADE_v6.md @@ -7,12 +7,6 @@ For current stable release notes and rollout references, see: - `docs/releases/RELEASE_NOTES_v6.md` - `docs/releases/V6_CHANGELOG.md` -For the current v6 prerelease packet, see: - -- `docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md` -- `docs/releases/V6_CHANGELOG_RC6_DRAFT.md` -- `docs/releases/V6_RC6_OPERATOR_SUPPORT_PACK_DRAFT.md` - ## Before You Upgrade - Create an encrypted config backup: **Settings → System → Recovery → Create Backup** (older versions labeled this **Backups**) diff --git a/docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md b/docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md index ffd3998da..86fe108f2 100644 --- a/docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md +++ b/docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md @@ -16,11 +16,10 @@ `pulse/v6-release`. 5. The active control-plane target is still `v6-product-lane-expansion`, not `v6-ga-promotion`. -6. The active local `pulse/v6-release` branch currently reports `VERSION=6.0.0-rc.6`, so the - working line is still prerelease and there is not yet a governed local stable - `6.0.0` candidate. +6. The active local `pulse/v6-release` branch currently reports `VERSION=6.0.0`, so a + local GA candidate exists on the governed stable line. 7. There is still no governed `Prerelease-to-GA Rehearsal Record` proving a successful - non-publish `Release Dry Run` for the eventual stable `6.0.0` candidate. + non-publish `Release Dry Run` for the current `6.0.0` candidate. 8. `docs/releases/RELEASE_NOTES_v6.md` and `docs/release-control/v6/internal/V5_MAINTENANCE_SUPPORT_POLICY.md` now carry the currently proposed exact dates for the eventual GA notice: @@ -42,9 +41,8 @@ ## Why The Gate Cannot Be Cleared Yet The blocker is no longer missing governance text. The remaining problem is that -the control plane still holds v6 on the pre-GA prerelease line, the working -version is still prerelease (`6.0.0-rc.6`), and there is still no exercised -`Release Dry Run` record proving the eventual stable `6.0.0` +the control plane still holds v6 on the pre-GA prerelease line, and there is +still no exercised `Release Dry Run` record proving the exact `6.0.0` candidate is ready for GA-style promotion. Until that rehearsal exists, stable users would still be the first real cohort for the final promotion path. @@ -52,9 +50,8 @@ users would still be the first real cohort for the final promotion path. 1. Promote the active target from `v6-product-lane-expansion` to `v6-ga-promotion` only when that change is actually intended. -2. Push the governed `pulse/v6-release` branch state that is intended to become the - stable `6.0.0` candidate, including the eventual `VERSION=6.0.0` - change and release-control records, to `origin/pulse/v6-release`. +2. Push the governed `pulse/v6-release` branch state, including the current + `VERSION=6.0.0` candidate and release-control records, to `origin/pulse/v6-release`. 3. Run `Release Dry Run` from `pulse/v6-release` with: - `version=6.0.0` - `promoted_from_tag=v6.0.0-rc.6` diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index 3ec159414..40c60ef38 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -517,6 +517,9 @@ TLS floor in the dynamic config. 2026-06-03 cutover candidate, that packet is `promoted_from_tag=v6.0.0-rc.6`, `rollback_version=v5.1.34`, `ga_date=2026-06-03`, and `v5_eos_date=2026-09-01`. + That stable cut must also move the repo-root Docker compose default and + `scripts/install-docker.sh` fallback from the final RC image tag to the + stable `6.0.0` image tag in the same commit as `VERSION=6.0.0`. 7. Preserve release-matched installer and Helm operator documentation links through `scripts/install.sh`, `.github/workflows/helm-pages.yml`, `.github/workflows/publish-helm-chart.yml`, and the chart metadata itself so deployment guidance and packaged chart metadata do not drift back to branch-tip `main` docs when a release line or promoted tag already exists. The same governed Helm boundary also owns `deploy/helm/pulse/` itself: chart metadata, default values, templates, and generated chart docs must diff --git a/scripts/install-docker.sh b/scripts/install-docker.sh index 8f907f766..10347414c 100755 --- a/scripts/install-docker.sh +++ b/scripts/install-docker.sh @@ -6,7 +6,7 @@ set -euo pipefail SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" DOCKER_IMAGE_REPO="${DOCKER_IMAGE_REPO:-rcourtman/pulse}" -CANONICAL_DEFAULT_PULSE_VERSION="6.0.0-rc.6" +CANONICAL_DEFAULT_PULSE_VERSION="6.0.0" resolve_default_pulse_version() { if [ -n "${PULSE_IMAGE_VERSION:-}" ]; then diff --git a/scripts/installtests/install_docker_sh_test.go b/scripts/installtests/install_docker_sh_test.go index 202717903..8133cb0f5 100644 --- a/scripts/installtests/install_docker_sh_test.go +++ b/scripts/installtests/install_docker_sh_test.go @@ -92,6 +92,9 @@ func TestRepoDockerComposeDefaultPinsCurrentVersion(t *testing.T) { if !strings.Contains(text, "image: ${PULSE_IMAGE:-rcourtman/pulse:"+version+"}") { t.Fatalf("repo docker-compose.yml must pin the current release version:\n%s", text) } + if strings.Contains(text, "6.0.0-rc.") { + t.Fatalf("stable repo docker-compose.yml must not keep a prerelease image default:\n%s", text) + } if strings.Contains(text, ":latest") { t.Fatalf("repo docker-compose.yml must not default to a floating latest tag:\n%s", text) } @@ -108,6 +111,9 @@ func TestInstallDockerScriptFallbackPinsCurrentVersion(t *testing.T) { if !strings.Contains(text, `CANONICAL_DEFAULT_PULSE_VERSION="`+version+`"`) { t.Fatalf("install-docker.sh fallback must pin the current release version:\n%s", text) } + if strings.Contains(text, `CANONICAL_DEFAULT_PULSE_VERSION="6.0.0-rc.`) { + t.Fatalf("stable install-docker.sh fallback must not keep a prerelease default:\n%s", text) + } } func runInstallDockerScript(t *testing.T, workDir string, envVars ...string) { diff --git a/scripts/release_control/resolve_release_promotion_test.py b/scripts/release_control/resolve_release_promotion_test.py index 64c72dbce..34eff0139 100644 --- a/scripts/release_control/resolve_release_promotion_test.py +++ b/scripts/release_control/resolve_release_promotion_test.py @@ -86,6 +86,7 @@ class ResolveReleasePromotionTest(unittest.TestCase): ) def test_current_stable_v6_packet_resolves_with_publish_dates(self) -> None: + self.assertEqual((REPO_ROOT / "VERSION").read_text(encoding="utf-8").strip(), "6.0.0") release_notes = (REPO_ROOT / "docs/releases/RELEASE_NOTES_v6.md").read_text(encoding="utf-8") metadata = resolver.resolve_metadata( version="6.0.0",