Skip to content

Latest commit

 

History

History
122 lines (92 loc) · 2.83 KB

File metadata and controls

122 lines (92 loc) · 2.83 KB

Releasing

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.yml
  • infra/releases-worker/
  • crates/core/src/updater.rs

One-time Cloudflare setup

cd infra/releases-worker
npm install
npx wrangler login
npx wrangler r2 bucket create quavil-releases
npx wrangler deploy

GitHub Actions secrets required:

  • CLOUDFLARE_API_TOKEN
  • CLOUDFLARE_ACCOUNT_ID
  • CARGO_REGISTRY_TOKEN
  • NPM_TOKEN

The Worker is configured in infra/releases-worker/wrangler.toml for the custom domain get.quavil.com.

Release flow

Pushing a v* tag triggers .github/workflows/release.yml.

That workflow:

  1. builds qvl for all supported platforms
  2. packages tarballs and computes SHA-256 checksums
  3. uploads tarballs, latest.json, versioned metadata.json, and install.sh to R2 using Wrangler
  4. deploys the release Worker with Wrangler
  5. creates a GitHub release
  6. publishes Cargo crates
  7. publishes npm packages

R2 layout

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

Edge endpoints

The Worker serves:

  • GET / and GET /install.sh
  • GET /version
  • GET /latest
  • GET /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/version
  • GET https://get.quavil.com/download/<os>/<arch>?version=<version>

Metadata shape

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"
  }
}

Manual validation

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 --version

Worker-only deploys

Changes 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