SparkLang release process
Version source
- Runtime / installer kit version:
website/downloads/manifest.json→"version" - User-facing notes:
CHANGELOG.md(mirrored at/CHANGELOG.html) - CLI:
./spark --version
Cutting a release
- Bump
manifest.jsonversion when shipping installers (keep CHANGELOG in sync). - Add a
## X.Y.Z — YYYY-MM-DDsection toCHANGELOG.md. - Commit + merge to
main. - Tag and publish a GitHub Release from that commit:
git tag -a vX.Y.Z -m "SparkLang X.Y.Z"
git push origin vX.Y.Z
gh release create vX.Y.Z --title "SparkLang X.Y.Z" --notes-file - <<'EOF'
See CHANGELOG.md for X.Y.Z.
Installers: https://sparklang.dev/downloads.html
EOF
- Deploy Cloudflare Pages (
website/) so Changelog + Downloads match the tag.
Before any deploy, on the release SHA:
bash
python3 tools/md_to_doc_html.py --all-stale
# Mirror CHANGELOG.md → website/CHANGELOG.html; sync
# docs/examples/ → website/docs/examples/ when Builder artifacts
# changed.
### 5a. Preferred — Wrangler CLI (OAuth)
When Wrangler is available on the box (OAuth session — not
CLOUDFLARE_* env):
bash
npx wrangler pages deploy website \
--project-name=sparklang-dev \
--branch=production \
--commit-hash="$(git rev-parse HEAD)"
Auth gotcha: Wrangler OAuth on the deploy host lives under
~/.config/.wrangler/ (leading dot on .wrangler), with
pages:write. That is not ~/.config/wrangler/ (no leading
dot). If deploy fails with auth / missing credentials, check the
dotted path first — do not invent or print tokens.
### 5b. Fallback — Cloudflare dashboard (no CLI)
When Wrangler is absent or auth fails: do not invent a CLI path. Exact human steps:
- Note the git SHA you are shipping (
git rev-parse HEAD). - Open the Cloudflare dashboard → Workers & Pages → project that serves sparklang.dev (Pages).
- Upload / deploy the contents of the local
website/directory from that SHA (Direct Upload, or the project's connected production branch if CI is already wired — prefer the same mechanism used for the last good Pages deploy). - Record the Pages deployment id / time next to the git SHA.
After either path, spot-check:
https://sparklang.dev/https://sparklang.dev/CHANGELOG.htmlhttps://sparklang.dev/docs/factory.htmlhttps://sparklang.dev/docs/spark-builder.htmlhttps://sparklang.dev/downloads.html
Tip ≠ pin: if the live site lags git, say so — do not claim sparklang.dev equals an unpushed local tree.
- Sync the public mirror so
sparklang-dev/sparklangmatches the tagged tree.
Maintainer
Public source: GitHub org sparklang-dev / https://github.com/sparklang-dev/sparklang — no private store or personal ops data on the public site.
CLI names: spark / ./spark-bootstrap remain the UX entrypoints.
Product name in docs/site is SparkLang.
Notes
- Do not invent token/cost numbers in release notes.
- Dry-run remains the default story; live gateway is optional.
- Builder factory status: init ≠ trained; GAS
--compile/--run-bcwrap bootstrap — see SPARK_BC Builder. - Local serve API (serve API path):
./spark-serve-api --weights … --httpexposes/health,/version,/v1/predict,/v1/embeddingson CPU only (wraps tiny forward; not production). Gate:make test-serve-api. See Builder §6c.