/semantic-release-slack-bot

📦🚀 A slack bot for semantic-release notifying release statuses

Primary LanguageJavaScriptMIT LicenseMIT

semantic-release-slack-bot

semantic-release plugin to get release notifications on slack from a slack bot

npm npm CircleCI branch license add to slack

Step Description
success Send a slack message to notify of a new release.
fail Send a slack message to notify of a failed release.

Install

Add the plugin to your npm-project:

$ npm install semantic-release-slack-bot -D

The corresponding slack app has be installed in you slack workspace as well. Follow the instructions under configuration for more information.

Usage

The plugin can be configured in the semantic-release configuration file:

{
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    [
      "semantic-release-slack-bot",
      {
        "notifyOnSuccess": false,
        "notifyOnFail": true
      }
    ]
  ]
}

With this example:

  • Slack notifications are skipped on a succesfull release
  • Slack notifications are sent on a failed release

Screenshots

Screenshot of success Screenshot of fail

Configuration

Slack app installation

The plugin uses a slack webhook which you get by adding the slack app to your slack workspace. Register the app using the button below or this link.

Add to Slack

For the security concerned, feel free to create your own slack app and create a web-hook or inspect the server code that does this creation for you at create-webhook.js. The only required permission for the webhook is to publish to a single channel.

Slack app authentication

Installing the app will yield you with a webhook that the app uses to publish updates to your selected chanel. The Slack webhook authentication link is required and needs to be kept a secret. It should be defined in the environment variables.

Environment variables

The SLACK_WEBHOOK variable can be defined in the environment where you will be running semantic release. This can be done by exporting it in bash or in the user interface of your CI provider. Obtain this token by installing the slack app according to slack app installation.

Alternatively, you could pass the webhook as a configuration option.

Variable Description
SLACK_WEBHOOK Slack webhook created when adding app to workspace.
SEMANTIC_RELEASE_PACKAGE Override or add package name instead of npm package name

Options

Option Description Default
notifyOnSuccess Determines if a succesfull release should trigger a slack message to be sent. If false this plugin does nothing on success. false
notifyOnFail Determines if a failed release should trigger a slack message to be sent. If false this plugin does nothing on fail. false
onSuccessTemplate Provides a template for the slack message object on success when notifyOnSuccess is true. See templating. undefined
onFailTemplate Provides a template for the slack message object on fail when notifyOnFail is true. See templating. undefined
markdownReleaseNotes Pass release notes through markdown to slack formatter before rendering. false
slackWebhook Slack webhook created when adding app to workspace. SLACK_WEBHOOK
packageName Override or add package name instead of npm package name SEMANTIC_RELEASE_PACKAGE or npm package name
unsafeMaxLength Maximum character length for the release notes before truncation. If maxLength is too high, messages can be dropped. Read here for more information. 2900
filterBranches Avoid triggering a slack message to be sent on branches not mathcing these filters. If not defined, slack message will be triggered on every branches. Filters can be glob patterns. undefined

Templating

If a template is provided via either the onSuccessTemplate or onFailTemplate options, it will be used for the respective slack message. The template should be an object that follows the Slack API message structure. Strings within the template will have keywords replaced:

Keyword Description Example Template
$package_name The name of the package. semantic-release-test Both
$npm_package_version The version of the release. 1.0.93 onSuccessTemplate
$repo_path The repository path. juliuscc/semantic-release-test Both
$repo_url The repository URL. https://github.com/juliuscc/semantic-release-test Both
$release_notes The notes of the release. onSuccessTemplate

A sample configuration with template can look like this

"onSuccessTemplate": {
  "text": "A new version of $package_name with version $npm_package_version has been released at $repo_url!"
}