Skip to content

Developing Nibble

Releases

Cutting one, and what a site sees.

Releases are annotated tags on main. There is no stable branch, no backports and no release candidates: the upgrade test is the gate, and bin/nibble-upgrade resolves the newest tag itself.

bin/nibble-release 0.6.0 --feed ../nibble_site/content/docs/releases.json

It refuses a malformed or backwards version, a dirty tree, and an empty Unreleased section. Then it bumps Nibble::VERSION, dates the changelog section, runs bin/ci, and only then commits and tags. Push with git push origin main --follow-tags.

--feed writes the release feed once the tag exists. It is optional, and the path belongs to another repository, so committing it there is yours to do.

The changelog is the release

CHANGELOG.md records what changed for a site running Nibble, under What's new, Changed, What's fixed and Security. Anything needing action carries an **Upgrade:** line. A release whose migrations cannot be undone says so, because the snapshot is then the only way back.

The feed a control panel reads is content/docs/releases.json in this site, generated from the whole changelog and capped at the most recent 25 releases. It is thrown away and rebuilt each time, so the changelog is the only record and the feed cannot disagree with it — editing an entry after its release still reaches every site.

Versions

Nibble::VERSION orders releases for people. The contracts — SCHEMA_FORMAT, THEME_API_VERSION, CONTENT_FORMAT_VERSION — are what code checks. Release::MINIMUM_UPGRADE_FROM states how far back an upgrade can start, and the floors for Ruby and Node are read from .ruby-version and package.json, checked before a merge.

0.x until someone outside installs it: while it is 0.x, anything can change between releases.