feat(release): SemVer + ludicc --version, changesets, and x release
The project had no versioning discipline: 0 tags, no CHANGELOG, no way for the compiler to report a version. Add a lightweight, native release flow. - Versioning: SemVer, with VERSION as the single source of truth. `ludicc --version` (and `ludic --version`) read it at runtime — so a bump touches one file and never reseeds the compiler. `x version` reports it too. - Changesets: one small Markdown file per user-facing change under changes/ (bump level + type + summary; see changes/README.md). This replaces "remember to edit the changelog" with a mergeable artifact, no Node changeset tool. - `x release [major|minor|patch] [--publish]`: fold the pending changesets into a new CHANGELOG.md section (grouped by type), bump VERSION, commit, and tag vX.Y.Z. The level defaults to the highest changeset bump. `--publish` also pushes and creates the Forgejo release with source + toolchain tarballs; tools/ci/forgejo_release.py is the small stdlib-Python HTTP glue for the release API (a native Http client is issue #6). Seed the initial changesets describing the shipped surface; the first `x release` turns them into the v0.1.0 CHANGELOG. Reseeded for the --version flag; C-free bootstrap fixpoint holds; suites 56 / 29 / 29 on macOS, 51 / 28 (+skips) on Linux CI, bootstrap-cfree byte-identical on both. Part of the repository-cleanup / DX pass (with #32, #34). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
709465cdd8
commit
fed80f2152
15 changed files with 787 additions and 293 deletions
|
|
@ -63,6 +63,27 @@ The stdlib lives in the runtime (`runtime/`) and is surfaced as namespaces
|
|||
3. Add or extend an example under `examples/` and a case in the test suite.
|
||||
4. Run `python3 tools/docgen/gen.py && python3 tools/docgen/check.py` — the
|
||||
check fails if any inventory symbol lacks a page or is still seed text.
|
||||
5. Add a **changeset** for the user-facing change: a small file under
|
||||
[`changes/`](changes/README.md) with a `bump:` level and a one-line summary.
|
||||
The next release folds it into `CHANGELOG.md`.
|
||||
|
||||
## Versioning & releases
|
||||
|
||||
The toolchain is versioned with [SemVer](https://semver.org); `VERSION` is the
|
||||
single source of truth and `ludicc --version` (or `x version`) reports it.
|
||||
|
||||
Releases are changeset-driven. Every user-facing change ships with a changeset
|
||||
(step 5 above). To cut a release:
|
||||
|
||||
```bash
|
||||
x release [major|minor|patch] # omit the level to derive it from the changesets
|
||||
```
|
||||
|
||||
That aggregates the pending changesets into a new `CHANGELOG.md` section, bumps
|
||||
`VERSION`, commits `chore(release): vX.Y.Z`, and tags it. Add `--publish` (with
|
||||
`FORGEJO_TOKEN` set) to also push and create the Forgejo release with source and
|
||||
toolchain tarballs. The tag doubles as the reproducible bootstrap point: the
|
||||
source archive plus its checked-in seed rebuild that exact toolchain.
|
||||
|
||||
## Conventions
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue