DEVELOPING.md
Cutting a release should be a boring, rote process with as little excitement as possible. Following the processes in this document, we should be able to cut a release at any time without worrying about producing bad artifacts. Our process should let us resolve build issues without affecting library users.
main branch represents the next major version of the library.v0.x, v1.x, v2.x, used
for backporting changes as necessary.latest release using, e.g.,
marvinpinto/action-automatic-releases on changes to the main branch.v: v1.2.3.
Increment the minor version for additive changes and patch for bugfixes.
rc0, rc1, etc.git commit -m 'v1.2.3-rc1' --allow-empty.v1.2.3-rc1.git push origin main v1.2.3-rc1.
git push origin main followed by git push origin v1.2.3-rc1,
if you want to make absolutely sure the commit you're pushing builds correctly before tagging it.build workflow to complete.
build workflow should create a draft release (using softprops/action-gh-release with draft
set to true) and upload built artifacts to the release.python-sdk using that new kernel.rc0..N), make sure to mark the release as a "prerelease".build workflow and publishing
them to any necessary registry or repository.
extism-maturin to PyPI as extism-sys and the dotnet packages to nuget.python-sdk, this publishes extism to PyPI.js-sdk, this publishes @extism/extism (and extism) to NPM.Note If you're at all worried about a release, use a private fork of the target library repo to test the release first (e.g.,
extism/dev-extism.)
For official releases:
$ git commit -m 'v9.9.9' --allow-empty
$ git tag v9.9.9
$ git push origin main v9.9.9
$ gh run watch
$ gh release edit v9.9.9 --tag v9.9.9 --title 'v9.9.9' --draft=false
$ gh run watch
For prereleases:
$ git commit -m 'v9.9.9' --allow-empty
$ git tag v9.9.9
$ git push origin main v9.9.9
$ gh run watch
$ gh release edit v9.9.9 --tag v9.9.9 --title 'v9.9.9' --draft=false --prerelease
$ gh run watch
Libraries should:
ci workflow, triggered on PR and workflow_dispatch.
build workflow, triggered on v* tags and merges to main
latest release (if operating on main.)release workflow, triggered on github releases:
flowchart TD;
A["runtime"] --> B["libextism"];
B --> C["extism-maturin"];
B --> X["nuget-extism"];
C --> D["python-sdk"];
B --> E["ruby-sdk"];
A --> F["go-sdk"];
G["plugins"] --> B;
G --> D;
G --> E;
G --> F;
G --> H["js-sdk"];
F --> I["cli"];
G --> J["dotnet-sdk"];
X --> J;
G --> K["cpp-sdk"];
G --> L["zig-sdk"];
B --> L;
G --> M["haskell-sdk"];
B --> M;
G --> N["php-sdk"];
B --> N;
G --> O["elixir-sdk"];
B --> O;
G --> P["d-sdk"];
B --> P;
G --> Q["ocaml-sdk"];
B --> Q;