This commit is contained in:
xrkffgg
2021-03-12 09:52:06 +08:00
parent 87311115d9
commit f6744964ac
5 changed files with 177 additions and 3 deletions

View File

@@ -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
- Get222 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:

View File

@@ -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:

85
dist/index.js vendored
View File

@@ -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);
}

View File

@@ -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",

View File

@@ -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);
}