Repository navigation
Self-host update channels: nightly Beta, Stable promoted after a day - #479
Merged
Merged
Conversation
Releases:
- Nightly (auto-release.yml schedule): when anything that ships changed,
a beta vX.Y.Z-beta.YYYYMMDD of main's deployed head, a GitHub prerelease
signed and checked like every release; launch/beta.json names it. Each
beta has its own X.Y.Z, so a promoted one always sorts below later betas.
- The beta's run also signs the statement for its stable tag vX.Y.Z (same
commit) and keeps it in the beta's tag message. A second daily schedule
(10:17 UTC, hours after the 06:17 nightly) promotes the newest beta out
for 24 hours with no open release-blocker issue naming it: it checks
that signature and creates the stable tag with it,
and release.yml builds and signs that tag's own files. launch/latest.json
(and beta.json) move. Installs keep checking exactly what they check now.
- By hand: promote now (optionally a given beta, whatever its age), a beta
now, or a stable release now; deploy.yml by hand with "stable release"
releases the commit it deployed straight to stable. Scheduled deploys no
longer cut releases; the hosted deploy itself is unchanged.
- The release-latest role may also write launch/beta.json.
Updater: the channels are stable and beta ("preview" still accepted, read
as beta). Each channel reads its own pointer (latest.json, beta.json),
cached apart, at least every 5 minutes, so a new release shows within
minutes; Check for updates reads again unless read seconds ago. Moving from
beta to stable never goes back: the install waits for a newer stable.
Config and installer take updates.channel / --channel beta (preview kept as
its old name). Docs: Channels in docs/self-host/updates.md.
Dashboard pinned to ad28b8e (CoderHelm/coderhelm#317): Settings, System
chooses Stable or Beta (nightly).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Self-hosted installs choose an update channel: Stable or Beta (nightly). Betas are cut nightly from main's deployed head when anything that ships changed; the newest beta that has been out for 24 hours with no reported problem is promoted to stable, on the same commit. Urgent fixes still ship the same day, by hand. Installs verify every tag exactly as they do today.
Changes
.github/workflows/auto-release.yml,.github/scripts/auto_release.py):vX.Y.Z-beta.YYYYMMDDof main's head once its hosted deploy succeeded (waits up to 45 min), skipped when nothing that ships changed since the last release. GitHub prerelease, signed and checked like stable;launch/beta.jsonmoves.vX.Y.Z(same commit) and stores it in the beta tag's message (CODERHELM STABLE ATTESTATIONblock, never matched by the install's release attestation parser).release-blockerissue naming it, whose stable number doesn't exist and sorts above every stable release, is promoted: the stable tag is created with the pre-signed statement (verified first with cosign, as installs do), andrelease.ymlbuilds and signs that tag's own files.latest.jsonandbeta.jsonmove.mode: promote(optionalversion, ignores the age, still honours blockers),mode: beta,mode: stable.deploy.yml): scheduled deploys no longer cut releases.workflow_dispatchinputstable_release(default off) releases the deployed commit straight to stable in the same run. The hosted deploy itself is unchanged.release.yml): a tag with a suffix is published as a GitHub prerelease.infra/lib/worker-stack.ts):release-latestmay also writelaunch/beta.json(same conditional writes).lambda/updater/handler.py): channelsstableandbeta,previewaccepted as beta (stored settings, config, calls). Each channel reads its own pointer (latest.json,beta.json), cached apart; the pointer is read at least every 5 minutes, so a release shows within minutes even though the list is read hourly. Check for updates re-reads unless read in the last 5 seconds (was 30). Beta to stable never downgrades.updates.channel/--channeltakebeta(previewkept as the old name).docs/self-host/updates.md;updates-security.mdandconfig-reference.mdupdated.Verification
python3 -m unittest discover -s lambda/tests: 320 OK (new: beta channel, preview alias, per-channel hints, a nightly visible within minutes, no downgrade).python3 -m unittest discover -s .github/scripts: 55 OK (new: beta planning, promotion rules, blockers, by-hand promotion, workflow wiring, a real-git beta and promotion).python3 .github/scripts/check_workflows.pyandactionlint(with shellcheck): clean.infra:npm test145 pass.installer:npm test171 pass.selfhost/versions.json: dashboard pinned toad28b8e28c4a59829d807b1dc8a056a9d37e24b8(Settings, System: choose Stable or Beta (nightly) updates coderhelm#317, the Settings, System channel choice);node scripts/check-dashboard-ref.mjspasses.