Skip to content

feat: persist release details in consul and post-enable governance on GA#1112

Open
aaronkvanmeerten wants to merge 4 commits into
mainfrom
feat/set-release-ga-post-enable
Open

feat: persist release details in consul and post-enable governance on GA#1112
aaronkvanmeerten wants to merge 4 commits into
mainfrom
feat/set-release-ga-post-enable

Conversation

@aaronkvanmeerten

@aaronkvanmeerten aaronkvanmeerten commented Jun 25, 2026

Copy link
Copy Markdown
Member

Summary

When a release is promoted to GA, emit a post-enable governance notification built from the same RP and component versions as the original release. To do that, release-core now persists a full release-details record in Consul KV that set-release-ga reads back.

1. Persist release details at release-core time

After pre-release identifies the RP, release-core writes a JSON record to Consul KV keyed by release number:

releases/<env>/<release-number>/details
{
  "releaseNumber": "240", "environment": "stage-8x8", "rp": "RP-100300",
  "signalVersion": "1184-9295-1.0.7770", "jvbVersion": "8.0-205-g206e038",
  "branch": "release-240", "requestedBy": "...",
  "components": [{"name":"jicofo","version":"1184"}, {"name":"jitsi-meet","version":"9295"}, {"name":"prosody","version":"1.0.7770"}, {"name":"jvb","version":"8.0-205-g206e038"}],
  "createdAt": "2026-06-26T08:00:00Z"
}

Written via scripts/consul-set-release-details.sh — a single PUT to the OCI consul default DC.

2. Reuse at set-release-ga time + post-enable on GA

set-release-ga reads the record (scripts/consul-get-release-details.sh + readJSON) and builds the post-enable call from the stored RP (release.key) and real component versions (release.components) — replacing the old single {name:'core'} placeholder. effectiveAt is the GA moment (now); a gaAt timestamp is written back into the record. source: traffic-manager, progress: {audience: GA}.

Runs after promotion and fails open — governance never blocks a release that is already live. New params: GOVERNANCE_ENABLED/STAGING/VERBOSE, RP_TICKET (optional override; otherwise taken from the stored record).

Supersedes the earlier rp-only consul-set/get-release-rp.sh scripts (folded into the details record).

Dependencies

  • jitsi/jenkins-govern8-integration#5 (govern8PostEnableHook)
  • infra-customizations-private#1055 (GovernanceHooks.postEnable)

Test plan

  • release-core writes the details record to releases/<env>/<release>/details
  • set-release-ga recovers it and post-enable carries the real RP + component versions
  • gaAt is written back into the record
  • GA promotion still succeeds if the record is missing / consul unreachable (fail open); falls back to a single core component
  • GOVERNANCE_ENABLED=false skips the notification

Wire set-release-ga to send a post-enable notification (progress {audience: GA})
after the release is promoted, via the new governance postEnable hook. Runs
last and fails open so a governance error never blocks a release that is
already live. Adds GOVERNANCE_ENABLED/STAGING/VERBOSE and RP_TICKET params.
Store the RP ticket identified at release-core pre-release time into consul KV
keyed by release number (releases/<env>/<release>/rp), via new
consul-set-release-rp.sh. set-release-ga reads it back (consul-get-release-rp.sh)
when no RP_TICKET param is given, so the post-enable notification references the
same RP as the original release. Both paths fail open.
@aaronkvanmeerten aaronkvanmeerten changed the title feat: emit governance post-enable when a release is set GA feat: post-enable governance on GA, referencing the release's original RP Jun 26, 2026
Drop the SSH-tunnel/multi-DC/AWS fan-out from consul-set-release-rp.sh — the
reader (consul-get-release-rp.sh) only reads the OCI consul default DC, so a
single PUT there is sufficient. Removes the now-unneeded sshagent/credentials
wrapper from the release-core call.
Replace the rp-only consul record with a richer JSON details blob keyed by
release number (releases/<env>/<release>/details): RP, per-service component
versions, signal/jvb versions, branch, requestedBy, and createdAt.

- release-core writes the record after pre-release (JsonOutput).
- set-release-ga reads it (readJSON) to build the post-enable call from the real
  RP + component versions (no more single 'core' placeholder), then writes a
  gaAt timestamp back into the record.
- New consul-set/get-release-details.sh (single OCI default-DC PUT/GET) supersede
  the consul-set/get-release-rp.sh scripts.
All paths fail open.
@aaronkvanmeerten aaronkvanmeerten changed the title feat: post-enable governance on GA, referencing the release's original RP feat: persist release details in consul and post-enable governance on GA Jun 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant