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
3
changes/0001-self-hosted-toolchain.md
Normal file
3
changes/0001-self-hosted-toolchain.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
Self-hosted, C-free toolchain — the compiler, runtime, task runner and editor tools are all written in Ludic and built from a checked-in LLVM-IR seed with clang alone; `x bootstrap-cfree` proves the compiler rebuilds itself byte-for-byte.
|
||||
3
changes/0002-namespaced-stdlib.md
Normal file
3
changes/0002-namespaced-stdlib.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
Namespaced standard library — Math, Text, List, Random, Time, Screen, Color, Ease, Collide, Memory, Vector, DateTime/Date/Duration/Clock, Unicode, Os, Fs/Path/Mime, Log, Noise, Hash, Crypto and Uuid, each deterministic where a game needs it.
|
||||
3
changes/0003-native-2d-backend.md
Normal file
3
changes/0003-native-2d-backend.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
Native 2D backend — an ECS core with a deterministic fixed-point (Q16.16) runtime, a windowed Cocoa target on macOS and a headless PPM renderer that runs anywhere.
|
||||
3
changes/0004-editor-tooling.md
Normal file
3
changes/0004-editor-tooling.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
Editor tooling — `ludic-fmt` (formatter) and `ludic-lsp` (language server), plus VS Code and JetBrains integrations, all built by the toolchain.
|
||||
3
changes/0005-ci.md
Normal file
3
changes/0005-ci.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
bump: minor
|
||||
type: ci
|
||||
Continuous integration — Forgejo Actions workflows build the toolchain from the seed, run the regression + editor suites, assert the C-free bootstrap fixpoint, and lint commit messages on every push and pull request.
|
||||
3
changes/0006-versioning.md
Normal file
3
changes/0006-versioning.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
Versioning and releases — SemVer with `ludicc --version`, a changeset-driven `CHANGELOG.md`, and `x release` to bump, tag, and publish a Forgejo release with source and toolchain artifacts.
|
||||
25
changes/README.md
Normal file
25
changes/README.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Changesets
|
||||
|
||||
A **changeset** is one small Markdown file describing a single user-facing change,
|
||||
dropped in this directory. `x release` consumes every changeset here into a new
|
||||
`CHANGELOG.md` section, bumps `VERSION`, and deletes the consumed files.
|
||||
|
||||
## Format
|
||||
|
||||
```
|
||||
bump: minor
|
||||
type: feat
|
||||
One or more lines describing the change, in the past-agnostic imperative used in
|
||||
the changelog. Markdown is fine.
|
||||
```
|
||||
|
||||
- `bump:` — `major`, `minor`, or `patch` (SemVer). The release version is bumped
|
||||
by the **highest** level among the pending changesets (unless `x release <level>`
|
||||
overrides it).
|
||||
- `type:` — the Conventional Commit type (`feat`, `fix`, `perf`, `docs`, …); it
|
||||
becomes the bold prefix of the changelog bullet.
|
||||
|
||||
## Adding one
|
||||
|
||||
Create a file with a short, unique name, e.g. `changes/regex-namespace.md`. Any
|
||||
filename works except this `README.md`, which the release step always skips.
|
||||
Loading…
Add table
Add a link
Reference in a new issue