Versioning: introduce tags, releases, changesets & toolchain packaging #33
Labels
No labels
area:ci
area:docs
area:input
area:net
area:rendering
area:repo
area:stdlib
area:tooling
area:types
cleanup
dx
priority:high
priority:low
priority:medium
proposal
status:in-progress
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: workshopsoft/ludic#33
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
The project has no version control discipline beyond raw commits:
CHANGELOG.(
ludicc,ludic,x,ludic-fmt,ludic-lsp) for consumers.version — a real problem as the language is actively renaming builtins/keywords
(
fn→function,str→string,ptr→pointer, …).Proposal
Introduce lightweight release management:
via
ludicc --version).releasing aggregates them into
CHANGELOG.mdand bumps the version. (A nativeLudic or
bin/x-driven changeset flow is preferable to a Node tool, to stayconsistent with the "no external toolchain" goal — but pick what's pragmatic.)
bin/x releasebuilds the toolchain binaries,tags
vX.Y.Z, and attaches build artifacts to a Forgejo release.bin/+ seed, or areproducible bootstrap from a tagged source).
Acceptance criteria
--versionreports it.CHANGELOG.mdgenerated on release.bin/x releasetags and publishes a Forgejo release with artifacts.v0.x.0tagged from currentmain.Part of the repository-cleanup / DX pass. Depends on CI/CD being in place.
Done — and v0.1.0 is cut and published: https://git.workshopsoft.io/workshopsoft/ludic/releases/tag/v0.1.0 (release id 1, with source +
darwin-arm64toolchain tarballs attached). The release commit itself went green through CI (build + bootstrap-cfree + commit-lint).Implemented in
fed80f2(tooling) and cut withx release minor --publish(commit2e9081c, tagv0.1.0).Design — native, no Node:
VERSIONas the single source of truth.ludicc --version/ludic --versionread it at runtime, so a bump touches one file and never reseeds the compiler.x versionreports it too.changes/(bump:level +type:+ summary; seechanges/README.md). Mergeable, reviewable, and it replaces "remember to hand-edit the changelog." No Node changeset tool.x release [major|minor|patch] [--publish]: folds the pending changesets into a newCHANGELOG.mdsection (bulleted, grouped by type), bumpsVERSION, commitschore(release): vX.Y.Z, and tags it. The level defaults to the highest changesetbump:.--publishalso pushes and creates the Forgejo release with the two tarballs. The one piece that speaks HTTP istools/ci/forgejo_release.py(stdlib-Python, matching the docgen tooling) — it can move intoxonce the native Http client (#6) lands.Packaging / reproducibility: the tag is the reproducible bootstrap point — the
-src.tar.gz(source + checked-in seed) rebuilds that exact toolchain with clang alone; the-darwin-arm64.tar.gzis the prebuiltbin/.Acceptance criteria:
--versionreports it.CHANGELOG.mdgenerated on release.x releasetags and publishes a Forgejo release with artifacts.v0.x.0tagged from currentmain(v0.1.0).Depended on CI (#32), now in place. Documented in CONTRIBUTING.md (a new "Versioning & releases" section + a changeset step in the stdlib workflow) and README. This also delivers the safe, non-destructive
v0baseline that #34 deferred here — the messyPhase-era prefix is now bracketed by a real tag without rewriting a single commit.A bug caught in a throwaway dry-run before anything touched
main: the bump-level derivation was readingchanges/README.md's format example (bump: minor) as a real changeset;highest_bump()now excludes the README.Follow-up worth its own issue: a prebuilt CI image so releases (and CI) skip the per-run
apt-get.