Releasing
A release is a version tag. Pushing a tag such as v0.2.0 runs the Release workflow, which publishes Runesmith for each system and creates
a GitHub release with the archives.
Make a release
-
Check that
mainbuilds, its tests pass and the documentation describes the changes. -
Tag the commit and push the tag:
git tag v0.2.0git push origin v0.2.0 -
Watch the Release workflow. When it finishes, the release, with notes generated from the commits since the last tag, is under Releases.
Versions
The version comes from the tag, without the v. Directory.Build.props reads it from the RunesmithVersion environment variable the
workflow sets, and uses 0.1.0 for local builds. A tag with a pre-release part, such as v0.3.0-rc.1, makes a pre-release.
Follow semantic versioning for Runesmith. The plugin API has a semantic version of its own, RunesmithApi.Version.
Before 1.0, raise its patch version when the SDK gains something and its minor version when a change breaks plugins; from 1.0 on, raise
the minor and major versions. When a change breaks plugins, set RunesmithApi.OldestSupported to the start of the new line.
The packages plugins build against (Runesmith.Sdk, Runesmith.Text, Runesmith.LanguageServices, the Runesmith.Languages.* engines
and Runesmith.Templates) have the API's version, RunesmithSdkVersion in Directory.Build.props, not the app's. When the API changes,
raise RunesmithApi.Version, RunesmithSdkVersion, and the template's sdkVersion default and runesmithApi range together; a test
checks that they agree. Then push a tag such as sdk/v0.1.1, which packs and pushes only the packages. The workflow stops when the tag
does not match RunesmithSdkVersion. An app tag packs them too, and the feed skips a version it already has.
What the workflow does
| Job | Runs | What it does |
|---|---|---|
| Publish | Every run, once per system | Publishes src/Runesmith.App self-contained in Release for linux-x64, win-x64 and osx-arm64, with the plugins bundled-plugins.json pins, checks that each is in the output and no other plugin is, and archives it as runesmith-<version>-<system>.tar.gz, or .zip for Windows. |
| Release | Version tags only | Creates the GitHub release with the three archives. |
Pull requests that change the workflow, and runs started by hand, build the archives with a -ci. version and release nothing, so the
workflow can be tested safely.