Add pre-release support
Currently
The release workflows support only final releases of a package, and no pre-releases. The branches support these release workflows by PR → staging branch → main branch, where a push to the main branch triggers building and publishing a final package release.
Proposal
We want to add support for building and publishing pre-releases of the package. To achieve that we can add the following workflows to the staging branch that trigger on push event:
- If the commit log shows a release will be build (i.e. there’s at least one
fix:orfeat:or breaking change) then- Build all release artifacts; then
- Bump the package’s version using commitizen’s
--prereleaseoption, e.g. usingrcfor release candidates, and push the new tag; then - Create a pre-release on Github and attach the pre-release build artifacts.
We can probably refactor the current release.yaml into two workflows:
release-rc.yamlthat triggers on push to thestagingbranch and produces a pre-release; andrelease.yamlthat (much like its current incarnation) triggers on push to themainbranch and produces a final release,
both of which can make use of two new reusable workflows that
- Build and bump a branch; and
- Create a Github release and publish the artifacts.
For this to work, we also need the following two features available:
- https://github.com/commitizen-tools/commitizen/pull/799
- https://github.com/commitizen-tools/commitizen/pull/800
After some tinkering with cz I think this feature needs to wait:
- the Conventional Commits specification doesn’t actually state how to bump pre-releases, see issue https://github.com/conventional-commits/conventionalcommits.org/issues/398 (and this comment); and
- commitizen doesn’t bump correctly (what is “correct” without spec, though), see issue https://github.com/commitizen-tools/commitizen/issues/688.
For reference, there’s also an interesting Discussion: pre-release versioning and PEP440 cross-compatibility.
And just out: v1.6.0 of the SLSA Generator added support for pre-releases as well 👍🏼
I think this would make sense if apart from the main and staging branches, there are additional ones for pre-releases.
Commitizen v3.14.0 add support for pre-release bumps.