
Product
Introducing Socket Firewall Enterprise: Flexible, Configurable Protection for Modern Package Ecosystems
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.
@semantic-release/exec
Advanced tools
semantic-release plugin to execute custom shell commands.
| Step | Description |
|---|---|
verifyConditions | Execute a shell command to verify if the release should happen. |
analyzeCommits | Execute a shell command to determine the type of release. |
verifyRelease | Execute a shell command to verifying a release that was determined before and is about to be published. |
generateNotes | Execute a shell command to generate the release note. |
prepare | Execute a shell command to prepare the release. |
publish | Execute a shell command to publish the release. |
success | Execute a shell command to notify of a new release. |
fail | Execute a shell command to notify of a failed release. |
$ npm install @semantic-release/exec -D
The plugin can be configured in the semantic-release configuration file:
{
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
[
"@semantic-release/exec",
{
"verifyConditionsCmd": "./verify.sh",
"publishCmd": "./publish.sh ${nextRelease.version} ${branch.name} ${commits.length} ${Date.now()}"
}
]
]
}
With this example:
./verify.sh will be executed on the verify conditions step./publish.sh 1.0.0 master 3 870668040000 (for the release of version 1.0.0 from branch master with 3 commits on August 4th, 1997 at 2:14 AM) will be executed on the publish stepNote: it's required to define a plugin for the analyze commits step. If no analyzeCommitsCmd is defined the plugin @semantic-release/commit-analyzer must be defined in the plugins list.
| Options | Description |
|---|---|
verifyConditionsCmd | The shell command to execute during the verify condition step. See verifyConditionsCmd. |
analyzeCommitsCmd | The shell command to execute during the analyze commits step. See analyzeCommitsCmd. |
verifyReleaseCmd | The shell command to execute during the verify release step. See verifyReleaseCmd. |
generateNotesCmd | The shell command to execute during the generate notes step. See generateNotesCmd. |
prepareCmd | The shell command to execute during the prepare step. See prepareCmd. |
addChannelCmd | The shell command to execute during the add channel step. See addChannelCmd. |
publishCmd | The shell command to execute during the publish step. See publishCmd. |
successCmd | The shell command to execute during the success step. See successCmd. |
failCmd | The shell command to execute during the fail step. See failCmd. |
shell | The shell to use to run the command. See execa#shell. |
execCwd | The path to use as current working directory when executing the shell commands. This path is relative to the path from which semantic-release is running. For example if semantic-release runs from /my-project and execCwd is set to buildScripts then the shell command will be executed from /my-project/buildScripts |
Each shell command is generated with Lodash template. All the objects passed to the semantic-release plugins are available as template options.
Execute a shell command to verify if the release should happen.
| Command property | Description |
|---|---|
exit code | 0 if the verification is successful, or any other exit code otherwise. |
stdout | Write only the reason for the verification to fail. |
stderr | Can be used for logging. |
| Command property | Description |
|---|---|
exit code | Any non 0 code is considered as an unexpected error and will stop the semantic-release execution with an error. |
stdout | Only the release type (major, minor or patch etc..) can be written to stdout. If no release has to be done the command must not write to stdout. |
stderr | Can be used for logging. |
| Command property | Description |
|---|---|
exit code | 0 if the verification is successful, or any other exit code otherwise. |
stdout | Only the reason for the verification to fail can be written to stdout. |
stderr | Can be used for logging. |
| Command property | Description |
|---|---|
exit code | Any non 0 code is considered as an unexpected error and will stop the semantic-release execution with an error. |
stdout | Only the release note must be written to stdout. |
stderr | Can be used for logging. |
| Command property | Description |
|---|---|
exit code | Any non 0 code is considered as an unexpected error and will stop the semantic-release execution with an error. |
stdout | Can be used for logging. |
stderr | Can be used for logging. |
| Command property | Description |
|---|---|
exit code | Any non 0 code is considered as an unexpected error and will stop the semantic-release execution with an error. |
stdout | The release information can be written to stdout as parseable JSON (for example {"name": "Release name", "url": "http://url/release/1.0.0"}). If the command write non parseable JSON to stdout no release information will be returned. |
stderr | Can be used for logging. |
| Command property | Description |
|---|---|
exit code | Any non 0 code is considered as an unexpected error and will stop the semantic-release execution with an error. |
stdout | The release information can be written to stdout as parseable JSON (for example {"name": "Release name", "url": "http://url/release/1.0.0"}). If the command write non parseable JSON to stdout no release information will be returned. |
stderr | Can be used for logging. |
| Command property | Description |
|---|---|
exit code | Any non 0 code is considered as an unexpected error and will stop the semantic-release execution with an error. |
stdout | Can be used for logging. |
stderr | Can be used for logging. |
| Command property | Description |
|---|---|
exit code | Any non 0 code is considered as an unexpected error and will stop the semantic-release execution with an error. |
stdout | Can be used for logging. |
stderr | Can be used for logging. |
ShellJS is a portable (Windows/Linux/macOS) implementation of Unix shell commands on Node.js. It provides a way to execute shell commands within Node.js scripts, similar to @semantic-release/exec, but is more general-purpose and not specifically tied to the release lifecycle.
Execa is a modern process execution library for Node.js. It provides a better interface for executing shell commands and handling their output compared to the built-in child_process module. While it can be used to achieve similar functionality as @semantic-release/exec, it is not specifically designed for the release lifecycle.
Node-cmd is a simple command-line/terminal interface for Node.js. It allows you to run shell commands from within your Node.js application. Like shelljs and execa, it is a general-purpose tool and not specifically designed for the release lifecycle.
FAQs
semantic-release plugin to run custom shell commands
The npm package @semantic-release/exec receives a total of 223,433 weekly downloads. As such, @semantic-release/exec popularity was classified as popular.
We found that @semantic-release/exec demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.

Security News
Open source dashboard CNAPulse tracks CVE Numbering Authorities’ publishing activity, highlighting trends and transparency across the CVE ecosystem.

Product
Detect malware, unsafe data flows, and license issues in GitHub Actions with Socket’s new workflow scanning support.