Automating Versioning and Releases Using Semantic Release by Yasser Shaikh Agoda Engineering & Design

Getting a fully automated setup with releases from CI can be helpful for some projects. Attach the files created by build_command to GitHub releases. We have been using Semantic Release for over a year now and actively adopting the same for our other projects. With few easy steps, we can automate the entire release process and focus more on the things that matter i.e code. It had been a manual (semi-automated), repetitive, error-prone process that one had to do every time there is a release in any of these projects and libraries maintained by us. At the moment we support releases to gitlab and github.

Once you identify your public API, you communicate changes to it with specific increments to your version number. Consider a version format of X.Y.Z (Major.Minor.Patch). That would be considered compatible since it does not affect the public API. Software that explicitly depends on the same dependencies as your package should have their own dependency specifications and the author will notice any conflicts. Determining whether the change is a patch level or minor level modification depends on whether you updated your dependencies in order to fix a bug or introduce new functionality.

Use the module in a project

Propose functionalityby submitting a feature request. Edit this pageto fix an error or add an improvement in a merge request. Open a terminal and navigate to the project’s repository. False to skip Continuous Integration environment verifications. This allows for making releases from a local machine.

Having to bump major versions to release incompatible changes means you’ll think through the impact of your changes, and evaluate the cost/benefit ratio involved. Below, in yellow are different commit message, pay close attention to the type and body of the commit messages and based on them either MAJOR/MINOR/PATCH version is incremented. This example configures the pipeline with a single job, publish, which runs semantic-release. The semantic-release library publishes new versions of the npm package and creates new GitLab releases . The pipeline should create a new release (v1.0.0) on the project’s Releases page and publish a new version of the package to the project’s Package Registry page. By default, semantic-release uses Angular Commit Message Conventions. The commit message format can be changed with the preset or config options of the @semantic-release/commit-analyzer and @semantic-release/release-notes-generator plugins.

Semantic Versioning Specification (SemVer)

Also, specific systems may impose their own limits on the size of the string. Precedence refers to how versions are compared to each other when ordered. Do not take any actions, only print what will be done. Some of these steps may be disabled based on your configuration. Upload_to_repository – disable uploading the package to an artifact repository. Version_pattern – use regular expressions to keep the version number in a different format. View pricingto see all GitLab tiers and features, or to upgrade.

What is semantic release NPM?

semantic-release is an NPM tool to automate the workflow to release an NPM package. It follows the semantic versioning specification strictly, including: determining the next version number, generating the release notes, and publishing the package.

Even under this circumstance, it is unacceptable to modify versioned releases. If it’s appropriate, document the offending version and inform your users of the problem so that they are aware of the offending version. Major version zero is all about rapid development. If you’re changing the API every day you should either still be in version 0.y.z or on a separate development branch working on the next major version.


If the type contains feat/feature, then MINOR version is incremented. At its core semantic-release is a set of conventions that gives you entirely automated, semver-compliant package publishing. As soon as you realize that you’ve broken the Semantic Versioning spec, fix the problem and release a new minor version that corrects the problem and restores backwards compatibility.

  • Semantic-release is meant to be executed on the CI environment after every successful build on the release branch.
  • A 255 character version string is probably overkill, for example.
  • If you find this topic interesting you should check out his talk from JSConf Budapest.
  • Is used and there is an authentication token configured for your vcs provider , the changelog will be posted there too.

If dependencies are specified too loosely, you will inevitably be bitten by version promiscuity . Dependency hell is where you are when version lock and/or version promiscuity prevent you from easily and safely moving your project forward. Name the module according to the Package Registry’s naming conventions. For example, if the project’s path is gitlab-examples/semantic-release-npm, name the module @gitlab-examples/semantic-release-npm. This guide demonstrates how to automatically publish npm packages to the GitLab Package Registry by using semantic-release. Semantic-release is meant to be executed on the CI environment after every successful build on the release branch.

Article was published on: 10/26/22

Author: Viktor Nikolaev

Victor is a professional crypto investor and stockbroker, specializing in such areas as trading on the stock exchange, cryptov currencies, forex, stocks and bonds. In this blog he shares the secrets of trading, current currency indices, crypt currency rates and tells about the best forex brokers. If you have any questions, you can always contact

Leave a Reply