Skip to content

Latest commit

 

History

History
245 lines (180 loc) · 9.35 KB

configuration.md

File metadata and controls

245 lines (180 loc) · 9.35 KB

Configuration

semantic-release configuration consists of:

All of these options can be configured:

Additionally, metadata of Git tags generated by semantic-release can be customized via standard Git environment variables.

Configuring/passing options to semantic-release

Configuration file

Note: CLI arguments take precedence over options configured in the configuration file and shareable configuration.

semantic-release’s options, mode and plugins can be set via a config file in different ways:

  • A .releaserc file, written in YAML or JSON, with optional extensions .yaml, .yml, .json or .js.
  • A release.config.js file that exports an object.
  • A release key in the project's package.json file.

The following two examples are the same:

  • Via .releaserc or release.config.js file:
    {
      "branch": "next"
    }
  • Via release key in the project's package.json file (the configuration must be under the release property):
    {
      "release": {
        "branch": "next"
      }
    }

Using CLI arguments

Note: CLI arguments take precedence over options configured in the configuration file and shareable configuration.

Plugin options cannot be defined via CLI arguments and must be defined in the configuration file.

The following configuration example via CLI argument is equivalent to the configuration file's example:

$ semantic-release --branch next

Extending a shareable configuration

Note: CLI arguments take precedence over options configured in the configuration file and shareable configuration.

Please see shareable configuration for more details.

Options

extends

Type: Array, String
CLI arguments: -e, --extends

Contains a list of:

Note: If multiple shareable configurations are set, they will be imported in the order defined with each configuration option taking precedence over the options defined in a previous shareable configuration.

Examples (.releaserc file content):

  • Array:
    {
      "extends": [
        "./my_config_dir/my.config",
        "@semantic-release/gitlab-config",
      ]
    }
  • String:
    {
      "extends": "@semantic-release/gitlab-config"
    }

branch

Type: String
Default: master
CLI arguments: -b, --branch

The branch on which releases should happen.

Example (.releaserc file content):

{
  "branch": "next"
}

repositoryUrl

Type: String
Default: repository property in package.json or git origin url
CLI arguments: -r, --repository-url

The git repository URL.

Any valid git url format is supported (See Git protocols).

Example (.releaserc file content):

{
  "repositoryUrl": "https://github.com/username/project.git"
}

tagFormat

Type: String
Default: v${version}
CLI arguments: -t, --tag-format

The Git tag format used by semantic-release to identify releases. The tag name is generated with Lodash template and will be compiled with the version variable.

Note: The tagFormat must contain the version variable exactly once and compile to a valid Git reference.

Example (.releaserc file content):

{
  "tagFormat": "version-${version}"
}

plugins

Type: Array
Default: ['@semantic-release/commit-analyzer', '@semantic-release/release-notes-generator', '@semantic-release/npm', '@semantic-release/github']
CLI arguments: -p, --plugins

Define the list of plugins to use. Plugins will run in series, in the order defined, for each steps if they implement it.

Plugin specific configuration can defined by wrapping the name and an options object in an array. See Plugins configuration options for more details.

Example (.releaserc file content):

{
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    "@semantic-release-docker",
    ["@semantic-release/exec", {
      "verifyConditionsCmd": "./verify.sh"    # plugin configuration
    }],
    "@semantic-release/git",
    "@semantic-release/gitlab",
  ]
}

dryRun

Type: Boolean
Default: false if running in a CI environment, true otherwise
CLI arguments: -d, --dry-run

Dry-run mode, skip publishing, print next version and release notes.

Example (.releaserc file content):

{
  "dryRun": "true"
}

ci

Type: Boolean
Default: true
CLI arguments: --ci / --no-ci

Set to false to skip Continuous Integration environment verifications. This allows for making releases from a local machine.

Note: The CLI arguments --no-ci is equivalent to --ci false.

Example (.releaserc file content):

{
  "ci": "false"
}

debug (only through CLI)

Type: Boolean
Default: false
CLI argument: --debug

Output debugging information. This can also be enabled by setting the DEBUG environment variable to semantic-release:*.

Note: The debug is used only supported via CLI argument. To enable debug mode from the JS API use require('debug').enable('semantic-release:*').

Example:

$ semantic-release --debug

Git environment variables

Variable Description Default
GIT_AUTHOR_NAME The author name associated with the Git release tag. See Git environment variables. @semantic-release-bot.
GIT_AUTHOR_EMAIL The author email associated with the Git release tag. See Git environment variables. @semantic-release-bot email address.
GIT_COMMITTER_NAME The committer name associated with the Git release tag. See Git environment variables. @semantic-release-bot.
GIT_COMMITTER_EMAIL The committer email associated with the Git release tag. See Git environment variables. @semantic-release-bot email address.

Existing version tags, and how semantic-release deals with them

semantic-release uses Git tags to determine the commits added since the last release.

If a release has been published before setting up semantic-release you must make sure the most recent commit included in the last published release is in the release branch history and is tagged with the version released, formatted according to the tag format configured (defaults to vx.y.z).

If the previous releases were published with npm publish this should already be the case.

For example, if your release branch is master, the last release published on your project is 1.1.0 and the last commit included has the sha 1234567, you must make sure this commit is in master history and is tagged with v1.1.0.

# Make sure the commit 1234567 is in the release branch history
$ git branch --contains 1234567

# If the commit is not in the branch history it means that either:
# - you use a different branch than the one your release from before
# - or the commit sha has been rewritten (with git rebase)
# In both cases you need to configure your repository to have the last release commit in the history of the release branch

# List the tags for the commit 1234567
$ git tag --contains 1234567

# If v1.1.0 is not in the list you add it with
$ git tag v1.1.0 1234567
$ git push origin v1.1.0