You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hola now supports release channels (try-hola/hola#428, ADR 0005 — https://github.com/try-hola/hola/blob/main/docs/adr/0005-release-channels.md, shipped in try-hola/hola#430 and #434). The server reads a channel marker on each catalog.jsonversions[] entry and lets a deployment follow a channel (stable by default, e.g. rc). Nothing on the server side is blocked, but the catalog cannot express a pre-release yet, so the feature is only reachable through custom catalog sources until this repo can publish one.
Grammar ^[a-z][a-z0-9-]{0,31}$. Any other value drops the entry (with a server warning) — it never defaults to stable, so a typo can't publish a pre-release as the default.
A version string listed twice: the first well-formed occurrence wins.
Ordering uses semver precedence with prerelease identifiers (1.3.0 > 1.3.0-rc.10 > 1.3.0-rc.9); the browse card and the default install always resolve to the newest stable entry.
The bundle manifest.json is unchanged — the channel is a catalog-index attribute. "Deploy the rc" is a bundle pre-release (remo 0.11.0-rc.1 whose compose pins remo-web:4.4.0-rc.1 and whose manifest carries the matching upgrade metadata), never an image override.
Prerequisites in this repo (in dependency order, from try-hola/hola#428)
bin/push-oci-package.sh moves :latest unconditionally. It runs push "$VERSION" then push latest whenever TAG=latest, and TAG defaults to latest while build-and-publish.yml:108 passes only three arguments. Publishing an rc bundle would make it the default for every install. cli-release.yml in try-hola/hola already has the guard to copy:
if [[ "$VERSION"==*-* ]];then# pre-release: do not move :latest
build-and-publish.yml only publishes on merge to main (github.event_name != 'pull_request') and regenerates catalog.json there, so getting an rc into the catalog is a production catalog change — circular. Pre-release-versioned bundles should be publishable from a PR.
build-catalog.sh needs to emit multiple versions[] entries per app with the channel marker (stable + any pre-releases still offered).
version-bump.yml and tag-release.yml are stale — both read packages/${package}/package.json, but the layout is src/<name>/ and there is no packages/ directory. They also offer only patch|minor|major, with no pre-release bump. Fix or delete.
Also worth folding in: validate-catalog should accept the optional channel field on versions[] entries and reject values outside the grammar above at publish time, so a bad marker fails CI here instead of being silently dropped by every server.
Acceptance
An rc bundle can be published from a PR without touching :latest.
catalog.json lists the stable and rc versions of the app side by side with channel markers.
hola install <app> --channel rc --as <name> on a stock Hola install picks up the rc from the public catalog.
Context
Hola now supports release channels (try-hola/hola#428, ADR 0005 — https://github.com/try-hola/hola/blob/main/docs/adr/0005-release-channels.md, shipped in try-hola/hola#430 and #434). The server reads a
channelmarker on eachcatalog.jsonversions[]entry and lets a deployment follow a channel (stableby default, e.g.rc). Nothing on the server side is blocked, but the catalog cannot express a pre-release yet, so the feature is only reachable through custom catalog sources until this repo can publish one.What the server reads (the contract)
{ "id": "remo", "versions": [ { "version": "0.10.1", "channel": "stable", "refs": { "oci": "ghcr.io/try-hola/remo:0.10.1" } }, { "version": "0.11.0-rc.1", "channel": "rc", "refs": { "oci": "ghcr.io/try-hola/remo:0.11.0-rc.1" } } ] }channelis optional; absent ornull⇒stable.^[a-z][a-z0-9-]{0,31}$. Any other value drops the entry (with a server warning) — it never defaults to stable, so a typo can't publish a pre-release as the default.1.3.0 > 1.3.0-rc.10 > 1.3.0-rc.9); the browse card and the default install always resolve to the newest stable entry.manifest.jsonis unchanged — the channel is a catalog-index attribute. "Deploy the rc" is a bundle pre-release (remo 0.11.0-rc.1whose compose pinsremo-web:4.4.0-rc.1and whose manifest carries the matchingupgrademetadata), never an image override.Prerequisites in this repo (in dependency order, from try-hola/hola#428)
bin/push-oci-package.shmoves:latestunconditionally. It runspush "$VERSION"thenpush latestwheneverTAG=latest, andTAGdefaults tolatestwhilebuild-and-publish.yml:108passes only three arguments. Publishing an rc bundle would make it the default for every install.cli-release.ymlin try-hola/hola already has the guard to copy:build-and-publish.ymlonly publishes on merge to main (github.event_name != 'pull_request') and regeneratescatalog.jsonthere, so getting an rc into the catalog is a production catalog change — circular. Pre-release-versioned bundles should be publishable from a PR.build-catalog.shneeds to emit multipleversions[]entries per app with thechannelmarker (stable + any pre-releases still offered).version-bump.ymlandtag-release.ymlare stale — both readpackages/${package}/package.json, but the layout issrc/<name>/and there is nopackages/directory. They also offer onlypatch|minor|major, with no pre-release bump. Fix or delete.Also worth folding in:
validate-catalogshould accept the optionalchannelfield onversions[]entries and reject values outside the grammar above at publish time, so a bad marker fails CI here instead of being silently dropped by every server.Acceptance
:latest.catalog.jsonlists the stable and rc versions of the app side by side withchannelmarkers.hola install <app> --channel rc --as <name>on a stock Hola install picks up the rc from the public catalog.🤖 Generated with Claude Code