mirror of
https://gitea.com/Lydanne/pr-extract-issues.git
synced 2025-10-13 23:33:55 +08:00
add
This commit is contained in:
44
README.md
44
README.md
@@ -7,9 +7,53 @@
|
|||||||
## How to use?
|
## How to use?
|
||||||
|
|
||||||
```yml
|
```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
|
## ⚡ Feedback
|
||||||
|
|
||||||
You are very welcome to try it out and put forward your comments. You can use the following methods:
|
You are very welcome to try it out and put forward your comments. You can use the following methods:
|
||||||
|
@@ -16,6 +16,12 @@ inputs:
|
|||||||
way:
|
way:
|
||||||
description: The way to query issues.
|
description: The way to query issues.
|
||||||
required: true
|
required: true
|
||||||
|
issues-lables:
|
||||||
|
description: Extra operations on issues
|
||||||
|
issues-comment:
|
||||||
|
description: Extra operations on issues
|
||||||
|
issues-close:
|
||||||
|
description: Extra operations on issues
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
issues:
|
issues:
|
||||||
|
85
dist/index.js
vendored
85
dist/index.js
vendored
@@ -3666,6 +3666,49 @@ exports.Octokit = Octokit;
|
|||||||
//# sourceMappingURL=index.js.map
|
//# 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:
|
/***/ 682:
|
||||||
@@ -5931,6 +5974,7 @@ function wrappy (fn, cb) {
|
|||||||
const core = __nccwpck_require__(186);
|
const core = __nccwpck_require__(186);
|
||||||
const { Octokit } = __nccwpck_require__(375);
|
const { Octokit } = __nccwpck_require__(375);
|
||||||
const github = __nccwpck_require__(438);
|
const github = __nccwpck_require__(438);
|
||||||
|
const { dealStringToArr } = __nccwpck_require__(55);
|
||||||
|
|
||||||
// **********************************************************
|
// **********************************************************
|
||||||
const token = core.getInput('token');
|
const token = core.getInput('token');
|
||||||
@@ -5960,7 +6004,7 @@ async function run() {
|
|||||||
let arr = body.split('\n');
|
let arr = body.split('\n');
|
||||||
arr.forEach(it => {
|
arr.forEach(it => {
|
||||||
if (it.startsWith('#')) {
|
if (it.startsWith('#')) {
|
||||||
issues.push(it.replace('#', ''));
|
issues.push(it.replace('#', '').replace('\n', ''));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (way === 'commit') {
|
} else if (way === 'commit') {
|
||||||
@@ -5986,6 +6030,45 @@ async function run() {
|
|||||||
|
|
||||||
core.info(`[Action: Query Issues][${issues}]`);
|
core.info(`[Action: Query Issues][${issues}]`);
|
||||||
core.setOutput('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 {
|
} else {
|
||||||
core.setFailed(outEventErr);
|
core.setFailed(outEventErr);
|
||||||
}
|
}
|
||||||
|
@@ -14,7 +14,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.2.6",
|
"@actions/core": "^1.2.6",
|
||||||
"@actions/github": "^4.0.0",
|
"@actions/github": "^4.0.0",
|
||||||
"@octokit/rest": "^18.0.14"
|
"@octokit/rest": "^18.0.14",
|
||||||
|
"actions-util": "^1.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@umijs/fabric": "^2.5.6",
|
"@umijs/fabric": "^2.5.6",
|
||||||
|
42
src/main.js
42
src/main.js
@@ -1,6 +1,7 @@
|
|||||||
const core = require('@actions/core');
|
const core = require('@actions/core');
|
||||||
const { Octokit } = require('@octokit/rest');
|
const { Octokit } = require('@octokit/rest');
|
||||||
const github = require('@actions/github');
|
const github = require('@actions/github');
|
||||||
|
const { dealStringToArr } = require('actions-util');
|
||||||
|
|
||||||
// **********************************************************
|
// **********************************************************
|
||||||
const token = core.getInput('token');
|
const token = core.getInput('token');
|
||||||
@@ -30,7 +31,7 @@ async function run() {
|
|||||||
let arr = body.split('\n');
|
let arr = body.split('\n');
|
||||||
arr.forEach(it => {
|
arr.forEach(it => {
|
||||||
if (it.startsWith('#')) {
|
if (it.startsWith('#')) {
|
||||||
issues.push(it.replace('#', ''));
|
issues.push(it.replace('#', '').replace('\n', ''));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (way === 'commit') {
|
} else if (way === 'commit') {
|
||||||
@@ -56,6 +57,45 @@ async function run() {
|
|||||||
|
|
||||||
core.info(`[Action: Query Issues][${issues}]`);
|
core.info(`[Action: Query Issues][${issues}]`);
|
||||||
core.setOutput('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 {
|
} else {
|
||||||
core.setFailed(outEventErr);
|
core.setFailed(outEventErr);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user