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
sedcommand. On Windows we recommend using the Git Bash or a WSL terminal. Linux and MacOS shells will most probably supportsedout 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.