Quavil releases are now published through Cloudflare R2 + a custom-domain Worker served at get.quavil.com.
Source of truth:
.github/workflows/release.yml.github/workflows/release-edge.ymlinfra/releases-worker/crates/core/src/updater.rs
cd infra/releases-worker
npm install
npx wrangler login
npx wrangler r2 bucket create quavil-releases
npx wrangler deployGitHub Actions secrets required:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_IDCARGO_REGISTRY_TOKENNPM_TOKEN
The Worker is configured in infra/releases-worker/wrangler.toml for the custom domain get.quavil.com.
Pushing a v* tag triggers .github/workflows/release.yml.
That workflow:
- builds
qvlfor all supported platforms - packages tarballs and computes SHA-256 checksums
- uploads tarballs,
latest.json, versionedmetadata.json, andinstall.shto R2 using Wrangler - deploys the release Worker with Wrangler
- creates a GitHub release
- publishes Cargo crates
- publishes npm packages
Bucket: quavil-releases
install.sh
releases/
latest.json
v3.0.1/
metadata.json
quavil-darwin-aarch64.tar.gz
quavil-darwin-x86_64.tar.gz
quavil-linux-aarch64.tar.gz
quavil-linux-x86_64.tar.gz
The Worker serves:
GET /andGET /install.shGET /versionGET /latestGET /checksum/<os>/<arch>?version=<version>GET /download/<os>/<arch>?version=<version>GET /metadata/<version>GET /releases/...
The CLI updater continues to use:
GET https://get.quavil.com/versionGET https://get.quavil.com/download/<os>/<arch>?version=<version>
latest.json and versioned metadata.json use this shape:
{
"version": "3.0.1",
"date": "2026-03-14T12:00:00Z",
"changelog": "https://github.com/Quavil/code/releases/tag/v3.0.1",
"sha256": {
"darwin-x86_64": "...",
"darwin-aarch64": "...",
"linux-x86_64": "...",
"linux-aarch64": "..."
},
"artifacts": {
"darwin-x86_64": "https://get.quavil.com/download/darwin/x86_64?version=3.0.1",
"darwin-aarch64": "https://get.quavil.com/download/darwin/aarch64?version=3.0.1",
"linux-x86_64": "https://get.quavil.com/download/linux/x86_64?version=3.0.1",
"linux-aarch64": "https://get.quavil.com/download/linux/aarch64?version=3.0.1"
}
}After a release:
curl -fsSL https://get.quavil.com/latest
curl -fsSL https://get.quavil.com/version
curl -fsSL https://get.quavil.com | sh
qvl --versionChanges under infra/releases-worker/ are deployed by .github/workflows/release-edge.yml.
That workflow:
- validates the Worker source
- shell-checks
install.sh - uploads the current install script to R2
- deploys the Worker with Wrangler