🦊 semantic-release plugin to publish a GitLab release
Clone or download



semantic-release plugin to publish a GitLab release.

Travis Codecov Greenkeeper badge

npm latest version npm next version

Step Description
verifyConditions Verify the presence and the validity of the authentication (set via environment variables).
publish Publish a GitLab release.


$ npm install @semantic-release/gitlab -D


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

  "plugins": [
    ["@semantic-release/gitlab", {
      "gitlabUrl": "https://custom.gitlab.com",
      "assets": [
        {"path": "dist/asset.min.css", "label": "CSS distribution"},
        {"path": "dist/asset.min.js", "label": "JS distribution"}

With this example GitLab releases will be published to the https://custom.gitlab.com instance.


GitLab authentication

The GitLab authentication configuration is required and can be set via environment variables.

Only the personal access token authentication is supported.

Environment variables

Variable Description
GL_TOKEN or GITLAB_TOKEN Required. The token used to authenticate with GitLab.
GL_URL or GITLAB_URL The GitLab endpoint.


Option Description Default
gitlabUrl The GitLab endpoint. GL_URL or GITLAB_URL environment variable or https://gitlab.com.
gitlabApiPathPrefix The GitLab API prefix. GL_PREFIX or GITLAB_PREFIX environment variable or /api/v4.
assets An array of files to upload to the release. See assets. -


Can be a glob or and Array of globs and Objects with the following properties:

Property Description Default
path Required. A glob to identify the files to upload. -
label Short description of the file displayed on the GitLab release. File name extracted from the path.

Each entry in the assets Array is globbed individually. A glob can be a String ("dist/**/*.js" or "dist/mylib.js") or an Array of Strings that will be globbed together (["dist/**", "!**/*.css"]).

If a directory is configured, all the files under this directory and its children will be included.

Note: If a file has a match in assets it will be included even if it also has a match in .gitignore.

assets examples

'dist/*.js': include all the js files in the dist directory, but not in its sub-directories.

[['dist', '!**/*.css']]: include all the files in the dist directory and its sub-directories excluding the css files.

[{path: 'dist/MyLibrary.js', label: 'MyLibrary JS distribution'}, {path: 'dist/MyLibrary.css', label: 'MyLibrary CSS distribution'}]: include the dist/MyLibrary.js and dist/MyLibrary.css files, and label them MyLibrary JS distribution and MyLibrary CSS distribution in the GitLab release.

[['dist/**/*.{js,css}', '!**/*.min.*'], {path: 'build/MyLibrary.zip', label: 'MyLibrary'}]: include all the js and css files in the dist directory and its sub-directories excluding the minified version, plus the build/MyLibrary.zip file and label it MyLibrary in the GitLab release.