We use commit-and-tag-version
and enforce conventional commits to help with cutting releases and to ensure that we follow semver guidelines.
The release process of the TALY
libraries is semi-automated using a dedicated release pipeline in Jenkins. The table below shows the two types of automated releases.
Trigger | Release type | Channel | Note |
---|---|---|---|
Every new commit in main |
prerelease (alpha ) |
next | |
Every Tuesday morning | stable release | latest | will not release new major versions |
The following subsections explain in more detail when and how a new release is cut and published.
Every push to the main
branch results in a new alpha
prerelease that gets published as a new next
version. This will also publish prereleases of new major versions (i.e. alpha
releases that contain breaking changes).
This pipeline will push a release commit (format: chore(release): 1.2.3-alpha.4
) to the GitHub repository. It will not tag the commit and it will not write to the CHANGELOG.
Every tuesday morning there will be a new stable release, also done automatically from inside Jenkins. As a safety measure this pipeline will not publish new major versions, these need to be done manually.
This pipeline will push a release commit (format: chore(release): 1.2.3
) to the GitHub repository. It will tag the commit and it will write to the CHANGELOG.
Each stable release is followed by a GitHub release for that tagged commit, happening automatically via a Github workflow triggered every time a tag is pushed.
Via the Jenkins UI it is possible to release and publish new versions (stable as well as unstable) at any time by manually triggering the taly-release
job by using the Build with parameters
button for that job. The build parameter STABLE_RELEASE
can be used to specify if the new release should be a stable release or a prerelease. The triggered pipelines behave as described above in Automated prereleases
and Automated stable releases
.
There are two scripts that you can use to cut a new release manually: npm run release
and npm run release:alpha
. Most of the time this will not be necessary since a lot of our releases are automated. See the previous section for details. For major releases we do however strictly require a manual release. This way we make sure that each major release is a very conscious decision that we can time precisely.
If there are commits since the last stable release that contain breaking changes then running npm run release
will automatically result in a new major version. The automated release pipelines will never publish a new stable major version.
💡 Manual releases need to be made from a shell that supports the
sed
command. On Windows we recommend using the Git Bash or a WSL terminal. Linux and MacOS shells will most probably supportsed
out of the box.
💡 Only the TALY core team will release and publish new major versions!
release-x.0.0
from the up-to-date main
state.npm run release
, check the automatic commit. Then adjust the CHANGELOG.md
file if necessary and add an additional commit.chore(release): x.0.0
since this is a necessary marker for Jenkins.chore(release): x.0.0
commit in main
that is waiting to be tagged and published. To do this you can manually trigger the Jenkins taly-release
job by using the Build with parameters
button for that job. Make sure you tick both build parameters:STABLE_RELEASE
to publish this new major version on the latest
distribution channel.PUBLISH_ONLY
to not cut a new release but instead use the one that is currently at the HEAD of main
.