Preview the semantic release notes that would result from merging a Github PR.
This semantic-release
plugin will post a Github PR comment with a preview of the release that would result from merging.
npm install -D semantic-release semantic-release-github-pr
npx semantic-release-github-pr
It helps to think about semantic-release-github-pr
as a variation on semantic-release
's default behavior, using the latter's plugin system to modify some behaviors:
-
If a new release would result from running
semantic-release
, instead of publishing a new release of a package, it posts a comment with the changelog to matching Github PRs. -
It posts a static message when there's no release (for clarity).
-
It cleans up any PR comments it previously made (to keep from flooding PRs or leaving outdated information).
A PR gets a comment if:
-
The PR's from branch matches the current branch (that this plugin is being run on).
To cover multiple CI scenarios (see below), either of:
- The PR's test merge commit matches the current branch's
git
HEAD. - The PR and the current branch have the same
git
HEAD.
- The PR's test merge commit matches the current branch's
-
The PR's base branch matches
master
(default) unless otherwise configured via thebaseBranch
option.
It is assumed the user is already fully familiar with semantic-release
and its workflow
.
Github authentication must be configured, exactly the same as for semantic-relase
's default @semantic-release/github
plugin. PR comments will be posted by the associated GitHub user.
It's possible to configure the expected base branch when matching a PR via a baseBranch
option set in the release config.
E.g., in a package.json
release config:
{
"release": {
"baseBranch": "staging"
}
}
This plugin is best used with a CI build process to fully automate the posting of comments in Github PRs. Ideally, it should run whenever a PR is opened/updated.
This plugin relies on semantic-release
's dry-run feature. Unfortunately, that feature is gated by strict run-time checks, including one that ensures that the branch semantic-release
runs on is in the release configuration. It depends on env-ci
to enforce the checks in CI environments, which doesn't properly resolve the branch name when running in GitHub Actions, requiring a workaround:
- run: git checkout -b ${{ github.head_ref }}
- run: unset GITHUB_ACTIONS && npx semantic-release-github-pr
To only run when necessary, we use the $TRAVIS_PULL_REQUEST
environment variable to detect whether the build is a "pull request build".
after_success:
- "[[ $TRAVIS_PULL_REQUEST != 'false' ]] && npx semantic-release-github-pr || exit 0"
To run only when necessary, we use the $CI_PULL_REQUEST
environment variable to detect whether the build has a corresponding pull request.
Unfortunately, CircleCI only supports building on push, not when a PR is created. This limits the usefulness of the plugin somewhat, as a build will have to be triggered manually after a PR is opened for the changelog to post.
post:
- "[[ $CI_PULL_REQUEST != '' ]] && npx semantic-release-github-pr || exit 0"