Add option to add comment to PR (#1)
* Add optional comment to the PR
* fixup! Add optional comment to the PR
diff --git a/README.md b/README.md
index a23ec7a..2bfadcb 100644
--- a/README.md
+++ b/README.md
@@ -35,19 +35,20 @@
## Inputs
-| Input | Required | Example | Comment |
-|-------------------------------|----------|-------------------------------|-------------------------------------------------------------------------|
-| `token` | yes | `${{ secrets.GITHUB_TOKEN }}` | The github token passed from `${{ secrets.GITHUB_TOKEN }}` |
-| `label` | no | `Approved by committers` | Label to be added/removed to the Pull Request if approved/not approved |
-| `require_committers_approval` | no | `true` | Is approval from user with write permission required |
+| Input | Required | Example | Comment |
+|-------------------------------|----------|-----------------------------------------------------------------|-------------------------------------------------------------------------|
+| `token` | yes | `${{ secrets.GITHUB_TOKEN }}` | The github token passed from `${{ secrets.GITHUB_TOKEN }}` |
+| `label` | no | `spproved by committers` | Label to be added/removed to the Pull Request if approved/not approved |
+| `require_committers_approval` | no | `true` | Is approval from user with write permission required |
+| `comment` | no | `This became approved, rerun tests manually or rebase and push` | Add optional comment to the PR when approved |
## Outputs
| Output | |
|----------------|------------------------------|
-| `isApproved` | is Pull Reqeuest is approved |
-| `labelSet` | is label was set |
-| `labelRemoved` | is label was removed |
+| `isApproved` | is Pull Reqeuest approved |
+| `labelSet` | was label set |
+| `labelRemoved` | was label removed |
# Examples
diff --git a/action.yml b/action.yml
index bd6f4e3..ae16b48 100644
--- a/action.yml
+++ b/action.yml
@@ -3,15 +3,24 @@
author: 'TobKed'
inputs:
token:
- description: The GITHUB_TOKEN secret of the repository
+ description: 'The GITHUB_TOKEN secret of the repository'
required: true
label:
- description: A label to be checked/added/removed
+ description: 'A label to be checked/added/removed'
required: false
require_committers_approval:
- description: Is approval from person with write access to repo required
+ description: 'Is approval from person with write access to repo required'
required: false
- default: 'false'
+ comment:
+ description: 'Comment to be added to Pull Request if approved'
+ required: false
+outputs:
+ isApproved:
+ description: 'Is Pull Reqeuest approved'
+ labelSet:
+ description: 'Was label set'
+ labelRemoved:
+ description: 'Was label removed'
runs:
using: 'node12'
main: 'dist/index.js'
diff --git a/dist/index.js b/dist/index.js
index 39e2efb..a6f8087 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1585,6 +1585,18 @@
});
});
}
+function addComment(octokit, owner, repo, pullRequestNumber, comment) {
+ return __awaiter(this, void 0, void 0, function* () {
+ core.info(`Adding comment: ${comment}`);
+ yield octokit.issues.createComment({
+ owner,
+ repo,
+ // eslint-disable-next-line @typescript-eslint/camelcase
+ issue_number: pullRequestNumber,
+ body: comment
+ });
+ });
+}
function getWorkflowId(octokit, runId, owner, repo) {
return __awaiter(this, void 0, void 0, function* () {
const reply = yield octokit.actions.getWorkflowRun({
@@ -1650,10 +1662,9 @@
var _a, _b;
return __awaiter(this, void 0, void 0, function* () {
const token = core.getInput('token', { required: true });
- const userLabel = core.getInput('label', { required: false }) || 'not set';
- const requireCommittersApproval = core.getInput('require_committers_approval', {
- required: false
- }) === 'true';
+ const userLabel = core.getInput('label') || 'not set';
+ const requireCommittersApproval = core.getInput('require_committers_approval') === 'true';
+ const comment = core.getInput('comment') || '';
const octokit = new github.GitHub(token);
const context = github.context;
const repository = getRequiredEnv('GITHUB_REPOSITORY');
@@ -1665,7 +1676,8 @@
const sha = (_b = context.payload.pull_request) === null || _b === void 0 ? void 0 : _b.head.sha;
core.info(`\n############### Set Label When Approved start ##################\n` +
`label: "${userLabel}"\n` +
- `requireCommittersApproval: ${requireCommittersApproval}`);
+ `requireCommittersApproval: ${requireCommittersApproval}\n` +
+ `comment: ${comment}`);
if (eventName !== 'pull_request_review') {
throw Error(`This action is only useful in "pull_request_review" triggered runs and you used it in "${eventName}"`);
}
@@ -1683,10 +1695,13 @@
isLabelShouldBeSet = isApproved && !labelNames.includes(userLabel);
isLabelShouldBeRemoved = !isApproved && labelNames.includes(userLabel);
if (isLabelShouldBeSet) {
- setLabel(octokit, owner, repo, pullRequest.number, userLabel);
+ yield setLabel(octokit, owner, repo, pullRequest.number, userLabel);
+ if (comment !== '') {
+ yield addComment(octokit, owner, repo, pullRequest.number, comment);
+ }
}
else if (isLabelShouldBeRemoved) {
- removeLabel(octokit, owner, repo, pullRequest.number, userLabel);
+ yield removeLabel(octokit, owner, repo, pullRequest.number, userLabel);
}
}
//// Future option to rerun workflows if PR approved
diff --git a/src/main.ts b/src/main.ts
index dac2b83..38679b8 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -162,6 +162,23 @@
})
}
+async function addComment(
+ octokit: github.GitHub,
+ owner: string,
+ repo: string,
+ pullRequestNumber: number,
+ comment: string
+): Promise<void> {
+ core.info(`Adding comment: ${comment}`)
+ await octokit.issues.createComment({
+ owner,
+ repo,
+ // eslint-disable-next-line @typescript-eslint/camelcase
+ issue_number: pullRequestNumber,
+ body: comment
+ })
+}
+
async function getWorkflowId(
octokit: github.GitHub,
runId: number,
@@ -248,11 +265,10 @@
async function run(): Promise<void> {
const token = core.getInput('token', {required: true})
- const userLabel = core.getInput('label', {required: false}) || 'not set'
+ const userLabel = core.getInput('label') || 'not set'
const requireCommittersApproval =
- core.getInput('require_committers_approval', {
- required: false
- }) === 'true'
+ core.getInput('require_committers_approval') === 'true'
+ const comment = core.getInput('comment') || ''
const octokit = new github.GitHub(token)
const context = github.context
const repository = getRequiredEnv('GITHUB_REPOSITORY')
@@ -266,7 +282,8 @@
core.info(
`\n############### Set Label When Approved start ##################\n` +
`label: "${userLabel}"\n` +
- `requireCommittersApproval: ${requireCommittersApproval}`
+ `requireCommittersApproval: ${requireCommittersApproval}\n` +
+ `comment: ${comment}`
)
if (eventName !== 'pull_request_review') {
@@ -305,9 +322,12 @@
isLabelShouldBeRemoved = !isApproved && labelNames.includes(userLabel)
if (isLabelShouldBeSet) {
- setLabel(octokit, owner, repo, pullRequest.number, userLabel)
+ await setLabel(octokit, owner, repo, pullRequest.number, userLabel)
+ if (comment !== '') {
+ await addComment(octokit, owner, repo, pullRequest.number, comment)
+ }
} else if (isLabelShouldBeRemoved) {
- removeLabel(octokit, owner, repo, pullRequest.number, userLabel)
+ await removeLabel(octokit, owner, repo, pullRequest.number, userLabel)
}
}