DEV Community

Cover image for Atomic Release: An all-or-nothing strategy to release code.
Elad Chen
Elad Chen

Posted on

2 1

Atomic Release: An all-or-nothing strategy to release code.

Have you ever encountered a failure during a release process?
Did you have to "undo" steps taken before starting again?
If the answer to the above questions is yes, then keep reading.


The problem
A release process usually involves a series of automatic steps that must be performed to complete successfully, but what happens when a step fails?

If you want to start the release process with a clean slate
you have to determine which steps succeeded and "undo" whatever action they took… 😖

In other words, automated releases are rarely written to handle a failure, which means they leave a mess behind when a step fails halfway through.

solution

The solution
Realising the above problem, I figured it can be solved
using the "Command" design pattern, and so atomic-release came into existence.

Today I'm happy to announce the first release of atomic-release
an NPM package that aims to help create automated releases using the command pattern.

The package is more of an SDK than a general-purpose solution, it has 2 core concepts and a reference implementation for releasing NPM packages.

Highlights:

  • TypeScript friendly.
  • APIs are loosely coupled. Use just what you need.
  • Can be used to automate the release of any project type.

Core concept #1 - "Strategy"

An abstract class that decides whether a release should be made, and
the commands to execute during a release.

Core concept #2 - "Command"

An abstract class with two methods, "do" which performs an action, and "undo" which undoes actions taken by the "do" method.

There are several pre-written commands available in the SDK.
See the commands docs for more details.

You can also write your own commands! Here are a few random ideas:

  • Slack: A command that notifies a slack channel of a successful release.

  • Jira: A command that comments on issues mentioned in the commits included in the release.

  • … Anything you can think of

*GithubNpmPackageStrategy
This strategy was created to illustrate an implementation of the SDK.

The strategy automates the release process end-to-end, it uses conventional commits to bump semantic versions, and generate change-logs.

Here's a demo showcasing a failure during a release and the undo taken:

demo

See GithubNpmPackageStrategy for more details.

Fun fact:
The package itself is released using GithubNpmPackageStrategy 🤯


If you are interested in learning more, head over to the official repository.

As always, If you have any questions or feedback, please leave a comment below.

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post