From 1f79c4d039324f800c8f8d78a5ae538d3445a9f8 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Fri, 15 May 2026 14:47:42 +0700 Subject: [PATCH] Bump default desktop rollout to 36h --- .github/workflows/desktop-release.yml | 4 ++-- docs/release.md | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/desktop-release.yml b/.github/workflows/desktop-release.yml index 2120d33e3..7c229868c 100644 --- a/.github/workflows/desktop-release.yml +++ b/.github/workflows/desktop-release.yml @@ -40,7 +40,7 @@ on: rollout_hours: description: "Linear rollout duration in hours. Use 0 for instant rollout." required: false - default: "24" + default: "36" type: string concurrency: @@ -51,7 +51,7 @@ env: SOURCE_TAG: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || github.ref_name }} CHECKOUT_REF: ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.checkout_ref || github.ref_name) || github.ref_name }} SHOULD_PUBLISH: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.publish != 'false' }} - ROLLOUT_HOURS: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.rollout_hours || '24' }} + ROLLOUT_HOURS: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.rollout_hours || '36' }} DESKTOP_PACKAGE_PATH: "packages/desktop" jobs: diff --git a/docs/release.md b/docs/release.md index e185dcfa2..3df79f4d5 100644 --- a/docs/release.md +++ b/docs/release.md @@ -61,7 +61,7 @@ Use the beta path when you need to: ## Staged rollout (stable channel) -Stable desktop releases go out via a linear time-based rollout: 0% admitted when the updater manifests appear, 100% admitted 24 hours later, linear ramp in between. Beta releases bypass the rollout entirely — beta users always receive updates immediately. +Stable desktop releases go out via a linear time-based rollout: 0% admitted when the updater manifests appear, 100% admitted 36 hours later, linear ramp in between. Beta releases bypass the rollout entirely — beta users always receive updates immediately. The rollout is driven by a `rolloutHours` field stamped into the GitHub Release manifests (`latest-mac.yml`, `latest-linux.yml`, `latest.yml`) by the `finalize-rollout` job in `desktop-release.yml`. @@ -74,16 +74,16 @@ Updater clients only discover a release through those `.yml` manifests, so there ### Default behavior -`npm run release:patch` → tag push → 24h ramp. No extra action needed. +`npm run release:patch` → tag push → 36h ramp. No extra action needed. -The `rollout_hours` input on `desktop-release.yml` is **only read on `workflow_dispatch`** — tag-push runs always default to 24. To get any other rollout duration on a fresh release, use the post-publish flip below. +The `rollout_hours` input on `desktop-release.yml` is **only read on `workflow_dispatch`** — tag-push runs always default to 36. To get any other rollout duration on a fresh release, use the post-publish flip below. ### Instant-admit release (rollout_hours=0 from publish) For a fresh release that should admit everyone immediately (low-risk change, doc-only, hotfix, or just a release you want out fast), cut the release normally and queue the rollout flip immediately after: ```bash -# 1. Cut and publish (default 24h ramp from tag push). +# 1. Cut and publish (default 36h ramp from tag push). npm run release:patch # 2. Immediately queue the flip — runs as soon as finalize-rollout completes. @@ -92,7 +92,7 @@ gh workflow run desktop-rollout.yml \ -f rollout_hours=0 ``` -**Why this is gap-free:** `desktop-release.yml`'s `finalize-rollout` job and `desktop-rollout.yml` share the concurrency group `desktop-rollout-`. Dispatching `desktop-rollout.yml` while the tag-push pipeline is still running queues it safely behind `finalize-rollout`. The first public manifests already carry `rolloutHours=24`, then `desktop-rollout.yml` flips them to `rolloutHours=0` shortly afterward. The renderer polls every 30 minutes, so active stable users pick up the new manifest on their next check. +**Why this is gap-free:** `desktop-release.yml`'s `finalize-rollout` job and `desktop-rollout.yml` share the concurrency group `desktop-rollout-`. Dispatching `desktop-rollout.yml` while the tag-push pipeline is still running queues it safely behind `finalize-rollout`. The first public manifests already carry `rolloutHours=36`, then `desktop-rollout.yml` flips them to `rolloutHours=0` shortly afterward. The renderer polls every 30 minutes, so active stable users pick up the new manifest on their next check. Run the dispatch right after `release:patch` returns. Don't wait for the tag-push CI to finish. @@ -132,7 +132,7 @@ gh workflow run desktop-release.yml \ -f rollout_hours=6 ``` -This does **not** apply to fresh releases cut via `npm run release:patch` — that path always tag-pushes and stamps 24. For a fresh release with a custom ramp, cut normally and then dispatch `desktop-rollout.yml` (same pattern as the instant-admit flow above, with your chosen `rollout_hours`). +This does **not** apply to fresh releases cut via `npm run release:patch` — that path always tag-pushes and stamps 36. For a fresh release with a custom ramp, cut normally and then dispatch `desktop-rollout.yml` (same pattern as the instant-admit flow above, with your chosen `rollout_hours`). ### Releasing during an active rollout