From f6744964acc94dabaecaa7f0c7d465615cfd1a6c Mon Sep 17 00:00:00 2001 From: xrkffgg Date: Fri, 12 Mar 2021 09:52:06 +0800 Subject: [PATCH] add --- README.md | 44 ++++++++++++++++++++++++++ action.yml | 6 ++++ dist/index.js | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++- package.json | 3 +- src/main.js | 42 ++++++++++++++++++++++++- 5 files changed, 177 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d17fa9a..c202fe5 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,53 @@ ## How to use? ```yml +name: PR Extract Issues +on: + pull_request: + types: [opened, edited, synchronize] + +jobs: + extract: + runs-on: ubuntu-latest + steps: + - uses: actions-cool/pr-extract-issues@v1.0.0 + with: + way: 'commit' + issues-lables: 'l1, l2' + issues-comment: | + HI。这个 issue: ${number} 已经被修复了。 + issues-close: true ``` +### Input + +| Name | Desc | Type | Required | +| -- | -- | -- | -- | +| token | GitHub token | string | ✖ | +| way | The way to query issues. Options: `title` `body` `commit` | string | ✔ | +| issues-lables | Extra labels on issues | string | ✖ | +| issues-comment | Extra comment on issues | string | ✖ | +| issues-close | Extra close issues | string | ✖ | + +- `title`: The PR title. Will only match like + - fix: fix other #123 #456 #789 + - Get: 123 456 789 + - refctore: use other #222 #333#44 + - Get:222 33344 + - So you should start with a space # and end with a space +- `body`:The PR body + - Like: https://github.com/actions-cool/pr-extract-issues/pull/4 + - Branch whole line display with # start +- `commit`: Like `title` +- `issues-lables`: Support multiple, need to be separated by comma +- `issues-comment`: `${number}` will be replaced with the current issue number +- `issues-close`: Whether close issue + +### Output + +- `issues`: Get issues numbers + ## ⚡ Feedback You are very welcome to try it out and put forward your comments. You can use the following methods: diff --git a/action.yml b/action.yml index fb6bf2d..29066ca 100644 --- a/action.yml +++ b/action.yml @@ -16,6 +16,12 @@ inputs: way: description: The way to query issues. required: true + issues-lables: + description: Extra operations on issues + issues-comment: + description: Extra operations on issues + issues-close: + description: Extra operations on issues outputs: issues: diff --git a/dist/index.js b/dist/index.js index 2acfb23..37e8d54 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3666,6 +3666,49 @@ exports.Octokit = Octokit; //# sourceMappingURL=index.js.map +/***/ }), + +/***/ 55: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +var checkPermission = function checkPermission(require, permission) { + /** + * 有权限返回 true + */ + var permissions = ['read', 'write', 'admin']; + var requireNo = permissions.indexOf(require); + var permissionNo = permissions.indexOf(permission); + return requireNo <= permissionNo; +}; + +var dealStringToArr = function dealStringToArr(para) { + /** + * in 'x1,x2,x3' + * out ['x1','x2','x3'] + */ + var arr = []; + + if (para) { + var paraArr = para.split(','); + paraArr.forEach(function (it) { + if (it.trim()) { + arr.push(it.trim()); + } + }); + } + + return arr; +}; + +exports.checkPermission = checkPermission; +exports.dealStringToArr = dealStringToArr; + + /***/ }), /***/ 682: @@ -5931,6 +5974,7 @@ function wrappy (fn, cb) { const core = __nccwpck_require__(186); const { Octokit } = __nccwpck_require__(375); const github = __nccwpck_require__(438); +const { dealStringToArr } = __nccwpck_require__(55); // ********************************************************** const token = core.getInput('token'); @@ -5960,7 +6004,7 @@ async function run() { let arr = body.split('\n'); arr.forEach(it => { if (it.startsWith('#')) { - issues.push(it.replace('#', '')); + issues.push(it.replace('#', '').replace('\n', '')); } }); } else if (way === 'commit') { @@ -5986,6 +6030,45 @@ async function run() { core.info(`[Action: Query Issues][${issues}]`); core.setOutput('issues', issues); + + const lables = core.getInput('issues-lables'); + const comment = core.getInput('issues-comment'); + const close = core.getInput('issues-close'); + + if (!lables && !comment && !close) { + return false; + } + + for await (let issue of issues) { + if (lables) { + await octokit.issues.addLabels({ + owner, + repo, + issue_number: issue, + labels: dealStringToArr(labels), + }); + core.info(`Actions: [add-labels][${issue}][${labels}] success!`); + } + if (comment) { + comment.replace('${number}', `#${issue}`); + await octokit.issues.createComment({ + owner, + repo, + issue_number: issue, + comment, + }); + core.info(`Actions: [create-comment][${issue}][${comment}] success!`); + } + if (close == 'true') { + await octokit.issues.update({ + owner, + repo, + issue_number: issue, + state: 'closed', + }); + core.info(`Actions: [close-issue][${issue}] success!`); + } + } } else { core.setFailed(outEventErr); } diff --git a/package.json b/package.json index bc82009..9263f0c 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "dependencies": { "@actions/core": "^1.2.6", "@actions/github": "^4.0.0", - "@octokit/rest": "^18.0.14" + "@octokit/rest": "^18.0.14", + "actions-util": "^1.0.0" }, "devDependencies": { "@umijs/fabric": "^2.5.6", diff --git a/src/main.js b/src/main.js index 336d0e9..d9141a2 100644 --- a/src/main.js +++ b/src/main.js @@ -1,6 +1,7 @@ const core = require('@actions/core'); const { Octokit } = require('@octokit/rest'); const github = require('@actions/github'); +const { dealStringToArr } = require('actions-util'); // ********************************************************** const token = core.getInput('token'); @@ -30,7 +31,7 @@ async function run() { let arr = body.split('\n'); arr.forEach(it => { if (it.startsWith('#')) { - issues.push(it.replace('#', '')); + issues.push(it.replace('#', '').replace('\n', '')); } }); } else if (way === 'commit') { @@ -56,6 +57,45 @@ async function run() { core.info(`[Action: Query Issues][${issues}]`); core.setOutput('issues', issues); + + const lables = core.getInput('issues-lables'); + const comment = core.getInput('issues-comment'); + const close = core.getInput('issues-close'); + + if (!lables && !comment && !close) { + return false; + } + + for await (let issue of issues) { + if (lables) { + await octokit.issues.addLabels({ + owner, + repo, + issue_number: issue, + labels: dealStringToArr(labels), + }); + core.info(`Actions: [add-labels][${issue}][${labels}] success!`); + } + if (comment) { + comment.replace('${number}', `#${issue}`); + await octokit.issues.createComment({ + owner, + repo, + issue_number: issue, + comment, + }); + core.info(`Actions: [create-comment][${issue}][${comment}] success!`); + } + if (close == 'true') { + await octokit.issues.update({ + owner, + repo, + issue_number: issue, + state: 'closed', + }); + core.info(`Actions: [close-issue][${issue}] success!`); + } + } } else { core.setFailed(outEventErr); }