Skip to content

Commit

Permalink
feat(success-comment): allow to skip based on provided template seman…
Browse files Browse the repository at this point in the history
  • Loading branch information
JonasSchubert committed Jun 2, 2024
1 parent 2b23f0d commit 23e4d6a
Show file tree
Hide file tree
Showing 3 changed files with 235 additions and 24 deletions.
28 changes: 18 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ If you need to bypass the proxy for some hosts, configure the `NO_PROXY` environ
| `gitlabApiPathPrefix` | The GitLab API prefix. | `GL_PREFIX` or `GITLAB_PREFIX` environment variable or CI provided environment variables if running on [GitLab CI/CD](https://docs.gitlab.com/ee/ci) or `/api/v4`. |
| `assets` | An array of files to upload to the release. See [assets](#assets). | - |
| `milestones` | An array of milestone titles to associate to the release. See [GitLab Release API](https://docs.gitlab.com/ee/api/releases/#create-a-release). | - |
| `successComment` | The comment to add to each Issue and Merge Request resolved by the release. Set to false to disable commenting. See [successComment](#successComment). | :tada: This issue has been resolved in version ${nextRelease.version} :tada:\n\nThe release is available on [GitLab release](gitlab_release_url) |
| `successComment` | The comment to add to each Issue and Merge Request resolved by the release. Set to false to disable commenting or use filter to select when to comment. See [successComment](#successComment). | :tada: This issue has been resolved in version ${nextRelease.version} :tada:\n\nThe release is available on [GitLab release](gitlab_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](#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](https://docs.gitlab.com/ee/user/project/labels.html#labels) to add to the issue created when a release fails. Set to `false` to not add any label. Labels should be comma-separated as described in the [official docs](https://docs.gitlab.com/ee/api/issues.html#new-issue), e.g. `"semantic-release,bot"`. | `semantic-release` |
Expand Down Expand Up @@ -136,15 +136,23 @@ distribution` and `MyLibrary CSS distribution` in the GitLab release.

The message for the issue comments is generated with [Lodash template](https://lodash.com/docs#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 `Object`s with `hash`, `subject`, `body` `message` and `author`. |
| `releases` | `Array` with a release `Object`s for each release published, with optional release data such as `name` and `url`. |
| `issue` | A [GitLab API Issue object](https://docs.gitlab.com/ee/api/issues.html#single-issue) the comment will be posted to, or `false` when commenting Merge Requests. |
| `mergeRequest` | A [GitLab API Merge Request object](https://docs.gitlab.com/ee/api/merge_requests.html#get-single-mr) the comment will be posted to, or `false` when commenting Issues. |
| 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 `Object`s with `hash`, `subject`, `body` `message` and `author`. |
| `releases` | `Array` with a release `Object`s for each release published, with optional release data such as `name` and `url`. |
| `issue` | A [GitLab API Issue object](https://docs.gitlab.com/ee/api/issues.html#single-issue) the comment will be posted to, or `false` when commenting Merge Requests. |
| `mergeRequest` | A [GitLab API Merge Request object](https://docs.gitlab.com/ee/api/merge_requests.html#get-single-mr) the comment will be posted to, or `false` when commenting Issues. |
| `defaultComment` | Introduced in `v13.2.0`. You can customize the `successComment` to only comment on defined issues or merge requests. For convenience reasons, the default comment is made available to reduce boilerplate. I.e. if you want to only comment on issues, your `successComment` can be written like `"<% if (issue) { %><%= defaultComment %><% } %>"`. |

From `v13.2.0` on you can define when to comment on success. This utilizes the [Lodash template](https://lodash.com/docs#template).

- to only comment on issues with the otherwise default message: `"<% if (issue) { %><%= defaultComment %><% } %>"`
- to only comment on merge requests with the otherwise default message: `"<% if (mergeRequest) { %><%= defaultComment %><% } %>"`
- you can use labels and following `successMessage` to filter issues: `"<% if (issue.labels?.includes('semantic-release-relevant')) { %><%= defaultComment %><% } %>"`
- check the [GitLab API Merge Request object](https://docs.gitlab.com/ee/api/merge_requests.html#get-single-mr) or the [GitLab API Issue object](https://docs.gitlab.com/ee/api/issues.html#single-issue) for properties which can be used for the filter

#### failComment

Expand Down
40 changes: 26 additions & 14 deletions lib/success.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,20 @@ export default async (pluginConfig, context) => {
const postCommentToIssue = (issue) => {
const issueNotesEndpoint = urlJoin(gitlabApiUrl, `/projects/${issue.project_id}/issues/${issue.iid}/notes`);
debug("Posting issue note to %s", issueNotesEndpoint);
const defaultComment = getSuccessComment(issue, releaseInfos, nextRelease);
const body = successComment
? template(successComment)({ ...context, issue, mergeRequest: false })
: getSuccessComment(issue, releaseInfos, nextRelease);
return got.post(issueNotesEndpoint, {
...apiOptions,
...proxy,
json: { body },
});
? template(successComment)({ ...context, defaultComment, issue, mergeRequest: false })
: defaultComment;

if (body) {
return got.post(issueNotesEndpoint, {
...apiOptions,
...proxy,
json: { body },
});
} else {
logger.log("Skip commenting on issue #%d.", issue.id);
}
};

const postCommentToMergeRequest = (mergeRequest) => {
Expand All @@ -44,14 +50,20 @@ export default async (pluginConfig, context) => {
`/projects/${mergeRequest.project_id}/merge_requests/${mergeRequest.iid}/notes`
);
debug("Posting MR note to %s", mergeRequestNotesEndpoint);
const defaultComment = getSuccessComment({ isMergeRequest: true, ...mergeRequest }, releaseInfos, nextRelease);
const body = successComment
? template(successComment)({ ...context, issue: false, mergeRequest })
: getSuccessComment({ isMergeRequest: true, ...mergeRequest }, releaseInfos, nextRelease);
return got.post(mergeRequestNotesEndpoint, {
...apiOptions,
...proxy,
json: { body },
});
? template(successComment)({ ...context, defaultComment, issue: false, mergeRequest })
: defaultComment;

if (body) {
return got.post(mergeRequestNotesEndpoint, {
...apiOptions,
...proxy,
json: { body },
});
} else {
logger.log("Skip commenting on merge request #%d.", mergeRequest.iid);
}
};

const getRelatedMergeRequests = async (commitHash) => {
Expand Down
Loading

0 comments on commit 23e4d6a

Please sign in to comment.