• Stars
    star
    401
  • Rank 107,625 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 7 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

:octocat: semantic-release plugin to publish a GitHub release and comment on released Pull Requests/Issues

@semantic-release/github

semantic-release plugin to publish a GitHub release and comment on released Pull Requests/Issues.

Build Status

npm latest version npm next version npm beta version

Step Description
verifyConditions Verify the presence and the validity of the authentication (set via environment variables) and the assets option configuration.
publish Publish a GitHub release, optionally uploading file assets.
addChannel Update a GitHub release's pre-release field.
success Add a comment to each GitHub Issue or Pull Request resolved by the release and close issues previously open by the fail step.
fail Open or update a GitHub Issue with information about the errors that caused the release to fail.

Install

$ npm install @semantic-release/github -D

Usage

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

{
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    ["@semantic-release/github", {
      "assets": [
        {"path": "dist/asset.min.css", "label": "CSS distribution"},
        {"path": "dist/asset.min.js", "label": "JS distribution"}
      ]
    }],
  ]
}

With this example GitHub releases will be published with the file dist/asset.min.css and dist/asset.min.js.

Configuration

GitHub authentication

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

Follow the Creating a personal access token for the command line documentation to obtain an authentication token. The token has to be made available in your CI environment via the GH_TOKEN environment variable. The user associated with the token must have push permission to the repository.

When creating the token, the minimum required scopes are:

Notes on GitHub Actions: You can use the default token which is provided in the secret GITHUB_TOKEN. However releases done with this token will NOT trigger release events to start other workflows. If you have actions that trigger on newly created releases, please use a generated token for that and store it in your repository's secrets (any other name than GITHUB_TOKEN is fine).

When using the GITHUB_TOKEN, the minimum required permissions are:

  • contents: write to be able to publish a GitHub release
  • issues: write to be able to comment on released issues
  • pull-requests: write to be able to comment on released pull requests

Environment variables

Variable Description
GH_TOKEN or GITHUB_TOKEN Required. The token used to authenticate with GitHub.
GITHUB_API_URL or GH_URL or GITHUB_URL The GitHub Enterprise endpoint.
GH_PREFIX or GITHUB_PREFIX The GitHub Enterprise API prefix.

Options

Option Description Default
githubUrl The GitHub Enterprise endpoint. GH_URL or GITHUB_URL environment variable.
githubApiPathPrefix The GitHub Enterprise API prefix. GH_PREFIX or GITHUB_PREFIX environment variable.
proxy The proxy to use to access the GitHub API. Set to false to disable usage of proxy. See proxy. HTTP_PROXY environment variable.
assets An array of files to upload to the release. See assets. -
successComment The comment to add to each issue and pull request resolved by the release. Set to false to disable commenting on issues and pull requests. See successComment. :tada: This issue has been resolved in version ${nextRelease.version} :tada:\n\nThe release is available on [GitHub release](<github_release_url>)
failComment The content of the issue created when a release fails. Set to false to disable opening an issue when a release fails. See failComment. Friendly message with links to semantic-release documentation and support, with the list of errors that caused the release to fail.
failTitle The title of the issue created when a release fails. Set to false to disable opening an issue when a release fails. The automated release is failing ๐Ÿšจ
labels The labels to add to the issue created when a release fails. Set to false to not add any label. ['semantic-release']
assignees The assignees to add to the issue created when a release fails. -
releasedLabels The labels to add to each issue and pull request resolved by the release. Set to false to not add any label. See releasedLabels. ['released<%= nextRelease.channel ? \ on @${nextRelease.channel}` : "" %>']-
addReleases Will add release links to the GitHub Release. Can be false, "bottom" or "top". See addReleases. false

proxy

Can be false, a proxy URL or an Object with the following properties:

Property Description Default
host Required. Proxy host to connect to. -
port Required. Proxy port to connect to. File name extracted from the path.
secureProxy If true, then use TLS to connect to the proxy. false
headers Additional HTTP headers to be sent on the HTTP CONNECT method. -

See node-https-proxy-agent and node-http-proxy-agent for additional details.

proxy examples

'http://168.63.76.32:3128': use the proxy running on host 168.63.76.32 and port 3128 for each GitHub API request. {host: '168.63.76.32', port: 3128, headers: {Foo: 'bar'}}: use the proxy running on host 168.63.76.32 and port 3128 for each GitHub API request, setting the Foo header value to bar.

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. -
name The name of the downloadable file on the GitHub release. File name extracted from the path.
label Short description of the file displayed on the GitHub release. -

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.

The name and label for each assets are generated with Lodash template. The following variables are available:

Parameter Description
branch The branch from which the release is done.
lastRelease Object with version, gitTag and gitHead of the last release.
nextRelease Object with version, gitTag, gitHead and notes of the release being done.
commits Array of commit Objects with hash, subject, body message and author.

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 GitHub 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 GitHub release.

[{path: 'dist/MyLibrary.js', name: 'MyLibrary-${nextRelease.gitTag}.js', label: 'MyLibrary JS (${nextRelease.gitTag}) distribution'}]: include the file dist/MyLibrary.js and upload it to the GitHub release with name MyLibrary-v1.0.0.js and label MyLibrary JS (v1.0.0) distribution which will generate the link:

[MyLibrary JS (v1.0.0) distribution](MyLibrary-v1.0.0.js)

successComment

The message for the issue comments is generated with Lodash template. The following variables are available:

Parameter Description
branch Object with name, type, channel, range and prerelease properties of the branch from which the release is done.
lastRelease Object with version, channel, gitTag and gitHead of the last release.
nextRelease Object with version, channel, gitTag, gitHead and notes of the release being done.
commits Array of commit Objects with hash, subject, body message and author.
releases Array with a release Objects for each release published, with optional release data such as name and url.
issue A GitHub API pull request object for pull requests related to a commit, or an Object with the number property for issues resolved via keywords
successComment example

The successComment This ${issue.pull_request ? 'pull request' : 'issue'} is included in version ${nextRelease.version} will generate the comment:

This pull request is included in version 1.0.0

failComment

The message for the issue content is generated with Lodash template. The following variables are available:

Parameter Description
branch The branch from which the release had failed.
errors An Array of SemanticReleaseError. Each error has the message, code, pluginName and details properties.
pluginName contains the package name of the plugin that threw the error.
details contains a information about the error formatted in markdown.
failComment example

The failComment This release from branch ${branch.name} had failed due to the following errors:\n- ${errors.map(err => err.message).join('\\n- ')} will generate the comment:

This release from branch master had failed due to the following errors:

  • Error message 1
  • Error message 2

releasedLabels

Each label name is generated with Lodash template. The following variables are available:

Parameter Description
branch Object with name, type, channel, range and prerelease properties of the branch from which the release is done.
lastRelease Object with version, channel, gitTag and gitHead of the last release.
nextRelease Object with version, channel, gitTag, gitHead and notes of the release being done.
commits Array of commit Objects with hash, subject, body message and author.
releases Array with a release Objects for each release published, with optional release data such as name and url.
issue A GitHub API pull request object for pull requests related to a commit, or an Object with the number property for issues resolved via keywords
releasedLabels example

The releasedLabels ['released<%= nextRelease.channel ? ` on @\${nextRelease.channel}` : "" %> from <%= branch.name %>'] will generate the label:

released on @next from branch next

addReleases

Add links to other releases to the GitHub release body.

Valid values for this option are false, "top" or "bottom".

addReleases example

See The introducing PR for an example on how it will look.

More Repositories

1

semantic-release

๐Ÿ“ฆ๐Ÿš€ Fully automated version management and package publishing
JavaScript
18,874
star
2

commit-analyzer

๐Ÿ’ก semantic-release plugin to analyze commits with conventional-changelog
JavaScript
361
star
3

cli

๐Ÿ†‘๐Ÿ“ Setup automated semver compliant package publishing
JavaScript
359
star
4

release-notes-generator

๐Ÿ“‹ semantic-release plugin to generate changelog content with conventional-changelog
JavaScript
306
star
5

changelog

๐Ÿ“˜ semantic-release plugin to create or update a changelog file
JavaScript
253
star
6

git

๐Ÿ”€ semantic-release plugin to commit release assets to the project's git repository
JavaScript
252
star
7

npm

๐Ÿšข semantic-release plugin to publish a npm package
JavaScript
242
star
8

gitlab

๐ŸฆŠ semantic-release plugin to publish a GitLab release
JavaScript
233
star
9

env-ci

Get environment variables exposed by CI services
JavaScript
228
star
10

cracks

๐Ÿ’ข๐Ÿ” breaking change detection
JavaScript
111
star
11

gitlab-config

๐ŸฆŠ Semantic-release shareable config for GitLab
JavaScript
39
star
12

travis-deploy-once

๐ŸšซTest multiple node versions on Travis. Deploy once. If all of them pass.
JavaScript
34
star
13

issue-parser

Parser for Github, GitLab and Bitbucket issues actions, references and mentions
JavaScript
22
star
14

release-notes-generator-v3

โ›” This repository has been archived
JavaScript
11
star
15

twitter-together

Submit tweets for https://twitter.com/SemanticRelease using pull requests
11
star
16

condition-travis

๐Ÿšซ semantic-release plugin to check Travis CI environment before publishing.
JavaScript
9
star
17

error

๐Ÿ’ฅ ๐Ÿ’ฌ errors but with error code
JavaScript
9
star
18

evolution

Proposals for changes to semantic-release
8
star
19

apm-config

:atom: semantic-release shareable config to publish Atom packages with apm
JavaScript
7
star
20

wordpress

๐Ÿถ Semantic Release plugin for packaging up WordPress plugins / themes
TypeScript
7
star
21

commit-analyzer-v2

๐Ÿšซ This repository has been archived
JavaScript
4
star
22

npm-registry-docker

๐Ÿšข CouchDB Docker image running npm-registry-couchapp
Shell
3
star
23

.github

Common configuration for the semantic-release organization
3
star
24

last-release-git-tag

๐Ÿšซ Determine the version of the last release with git tags
JavaScript
2
star
25

last-release-npm

๐Ÿšซ determine the version of the last release via the npm registry
JavaScript
2
star
26

condition-codeship

๐Ÿšซ make sure the right builds on codeship get published
JavaScript
1
star
27

condition-nsp

JavaScript
1
star
28

semantic-release.github.io

Project Website
CSS
1
star
29

welcome

๐Ÿ“ฆ๐Ÿค— Welcome to the semantic-release community
1
star