mirror of
https://gitea.com/Lydanne/issues-helper.git
synced 2025-10-14 07:43:46 +08:00
Merge pull request #50 from actions-cool/main
branch: merge main into 1.x
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
## v1.12
|
||||
|
||||
> It will be the last version of 1.x
|
||||
|
||||
`2021.01.26`
|
||||
|
||||
- feat: add require-permission. [#46](https://github.com/actions-cool/issues-helper/pull/46) [#48](https://github.com/actions-cool/issues-helper/pull/48)
|
||||
- feat: add lock-reason. [#49](https://github.com/actions-cool/issues-helper/pull/49)
|
||||
|
||||
## v1.11
|
||||
|
||||
`2021.01.14`
|
||||
|
@@ -365,6 +365,9 @@ jobs:
|
||||
| actions | Action type | string | ✔ |
|
||||
| token | [Token explain](#token) | string | ✔ |
|
||||
| issue-number | The number of issue | number | ✔ |
|
||||
| lock-reason | Reason for locking issue | string | ✖ |
|
||||
|
||||
- `lock-reason`: Optional values are `off-topic` `too heated` `resolved` `spam`
|
||||
|
||||
⏫ [Back to list](#List)
|
||||
|
||||
@@ -400,15 +403,16 @@ jobs:
|
||||
| labels | Replace the labels of the issue | string | ✖ |
|
||||
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ |
|
||||
| close-issue | Whether to close the issue at the same time | string | ✖ |
|
||||
| allow-permissions | Permission to operate | string | ✖ |
|
||||
| require-permission | Permission required | string | ✖ |
|
||||
|
||||
- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`. Block content contains `?`
|
||||
- `labels`: Highest priority
|
||||
- `close-issue`: Both `true` or `'true'` can take effect
|
||||
- `allow-permissions`: When you do not input, there is no limit. Anyone comment will trigger. Optional values are `admin`, `write`, `read`, `none`
|
||||
- If the team member sets the read permission, it is read
|
||||
- If the external Collaborator is set to read permission, it is read
|
||||
- Ordinary users have read permission
|
||||
- `require-permission`: When you do not input, there is no limit. Anyone comment will trigger. Optional values are `admin`, `write`, `read`, `none`
|
||||
- If the team member sets the `read` permission, it is `read`
|
||||
- If the external Collaborator is set to `read` permission, it is `read`
|
||||
- Ordinary users have `read` permission
|
||||
- When set `write`, `admin` and `write` meet the conditions
|
||||
|
||||
⏫ [Back to list](#List)
|
||||
|
||||
@@ -860,6 +864,7 @@ jobs:
|
||||
| body-includes | Body filtering | string | ✖ |
|
||||
| title-includes | Title filtering | string | ✖ |
|
||||
| inactive-day | Inactive days filtering | number | ✖ |
|
||||
| lock-reason | Reason for locking issue | string | ✖ |
|
||||
|
||||
- `labels`: When there are multiple, the query will have multiple at the same time. If not entered, all
|
||||
- `issue-state`: The default is `all`. Optional value `open` `closed`, when these 2 items are not, both are `all`
|
||||
|
15
README.md
15
README.md
@@ -365,6 +365,9 @@ jobs:
|
||||
| actions | 操作类型 | string | ✔ |
|
||||
| token | [token 说明](#token) | string | ✔ |
|
||||
| issue-number | 指定的 issue | number | ✔ |
|
||||
| lock-reason | 锁定 issue 的原因 | string | ✖ |
|
||||
|
||||
- `lock-reason`:可选值有 `off-topic` `too heated` `resolved` `spam`
|
||||
|
||||
⏫ [返回列表](#列-表)
|
||||
|
||||
@@ -400,15 +403,16 @@ jobs:
|
||||
| labels | 替换该 issue 的 labels | string | ✖ |
|
||||
| contents | 为该评论的增加 [reaction](#reactions-types) | string | ✖ |
|
||||
| close-issue | 是否同时关闭该 issue | string | ✖ |
|
||||
| allow-permissions | 允许操作的权限 | string | ✖ |
|
||||
| require-permission | 要求权限 | string | ✖ |
|
||||
|
||||
- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`。屏蔽内容包含 `?`
|
||||
- `labels`:优先级最高
|
||||
- `close-issue`:`true` 或 `'true'` 均可生效
|
||||
- `allow-permissions`:当不输时,即无限制。任何人评论都会触发。可选值有 `admin`,`write`,`read`,`none`
|
||||
- 团队成员若设置 read 权限,则为 read
|
||||
- 外部 Collaborator 若设置 read 权限,则为 read
|
||||
- 普通用户为 read 权限
|
||||
- `require-permission`:当不输时,即无限制,任何人评论都会触发。可选值有 `admin`,`write`,`read`,`none`
|
||||
- 团队成员若设置 `read` 权限,则为 `read`
|
||||
- 外部 Collaborator 若设置 `read` 权限,则为 `read`
|
||||
- 普通用户为 `read` 权限
|
||||
- 当设置 `write` 后,`admin` 和 `write` 满足条件
|
||||
|
||||
⏫ [返回列表](#列-表)
|
||||
|
||||
@@ -854,6 +858,7 @@ jobs:
|
||||
| body-includes | 包含内容筛选 | string | ✖ |
|
||||
| title-includes | 包含标题筛选 | string | ✖ |
|
||||
| inactive-day | 非活跃天数筛选 | number | ✖ |
|
||||
| lock-reason | 锁定 issue 的原因 | string | ✖ |
|
||||
|
||||
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
|
||||
- `issue-state`:默认为 `open`。可选值 `all` `closed`,非这 2 项时,均为 `open`
|
||||
|
@@ -52,13 +52,15 @@ inputs:
|
||||
description: 'Query use'
|
||||
inactive-day:
|
||||
description: 'Query use'
|
||||
lock-reason:
|
||||
description: 'The reason lock issue'
|
||||
inactive-label:
|
||||
description: 'Issue label set use'
|
||||
duplicate-command:
|
||||
description: 'For mark-duplicate'
|
||||
duplicate-labels:
|
||||
description: 'For mark-duplicate add labels'
|
||||
allow-permissions:
|
||||
require-permission:
|
||||
description: 'Only the allow can do. Possible admin, write, read, and none.'
|
||||
remove-labels:
|
||||
description: 'For remove labels'
|
||||
|
36
dist/index.js
vendored
36
dist/index.js
vendored
@@ -7871,7 +7871,12 @@ const ALLREACTIONS = ['+1', '-1', 'laugh', 'confused', 'heart', 'hooray', 'rocke
|
||||
|
||||
const { doQueryIssues } = __webpack_require__(197);
|
||||
|
||||
const { dealStringToArr, dealRandomAssignees, testDuplicate } = __webpack_require__(6254);
|
||||
const {
|
||||
dealStringToArr,
|
||||
dealRandomAssignees,
|
||||
testDuplicate,
|
||||
checkPermission,
|
||||
} = __webpack_require__(6254);
|
||||
|
||||
// **************************************************************************
|
||||
const token = core.getInput('token');
|
||||
@@ -7990,11 +7995,17 @@ async function doDeleteComment(owner, repo, commentId) {
|
||||
}
|
||||
|
||||
async function doLockIssue(owner, repo, issueNumber) {
|
||||
await octokit.issues.lock({
|
||||
const lockReason = core.getInput('lock-reason');
|
||||
let params = {
|
||||
owner,
|
||||
repo,
|
||||
issue_number: issueNumber,
|
||||
});
|
||||
};
|
||||
const reasons = ['off-topic', 'too heated', 'resolved', 'spam'];
|
||||
if (lockReason && reasons.includes(lockReason)) {
|
||||
params.lock_reason = lockReason;
|
||||
}
|
||||
await octokit.issues.lock(params);
|
||||
core.info(`Actions: [lock-issue][${issueNumber}] success!`);
|
||||
}
|
||||
|
||||
@@ -8009,7 +8020,7 @@ async function doMarkDuplicate(owner, repo, labels) {
|
||||
const duplicateLabels = core.getInput('duplicate-labels');
|
||||
const removeLables = core.getInput('remove-labels');
|
||||
const closeIssue = core.getInput('close-issue');
|
||||
const allowPermissions = core.getInput('allow-permissions');
|
||||
const requirePermission = core.getInput('require-permission');
|
||||
|
||||
const commentId = context.payload.comment.id;
|
||||
const commentBody = context.payload.comment.body;
|
||||
@@ -8018,14 +8029,14 @@ async function doMarkDuplicate(owner, repo, labels) {
|
||||
|
||||
const ifCommandInput = !!duplicateCommand;
|
||||
|
||||
if (allowPermissions) {
|
||||
if (requirePermission) {
|
||||
const res = await octokit.repos.getCollaboratorPermissionLevel({
|
||||
owner,
|
||||
repo,
|
||||
username: commentUser,
|
||||
});
|
||||
const { permission } = res.data;
|
||||
if (!allowPermissions.includes(permission)) {
|
||||
if (!checkPermission(requirePermission, permission)) {
|
||||
core.info(`The user ${commentUser} is not allow!`);
|
||||
return false;
|
||||
}
|
||||
@@ -8706,12 +8717,25 @@ function getPreMonth(m) {
|
||||
return m == 1 ? 12 : m - 1;
|
||||
}
|
||||
|
||||
function checkPermission(require, permission) {
|
||||
/**
|
||||
* 有权限返回 true
|
||||
*/
|
||||
const permissions = ['none', 'read', 'write', 'admin'];
|
||||
const requireNo = permissions.indexOf(require);
|
||||
const permissionNo = permissions.indexOf(permission);
|
||||
|
||||
return requireNo <= permissionNo;
|
||||
}
|
||||
|
||||
// **********************************************************
|
||||
module.exports = {
|
||||
dealStringToArr,
|
||||
dealRandomAssignees,
|
||||
getPreMonth,
|
||||
matchKeyword,
|
||||
testDuplicate,
|
||||
checkPermission,
|
||||
};
|
||||
|
||||
|
||||
|
@@ -210,6 +210,7 @@ jobs:
|
||||
| body-includes | Body filtering | string | ✖ |
|
||||
| title-includes | Title filtering | string | ✖ |
|
||||
| inactive-day | Inactive days filtering | number | ✖ |
|
||||
| lock-reason | Reason for locking issue | string | ✖ |
|
||||
|
||||
- `labels`: When there are multiple, the query will have multiple at the same time. If not entered, all
|
||||
- `issue-state`: The default is `all`. Optional value `open` `closed`, when these 2 items are not, both are `all`
|
||||
|
@@ -206,6 +206,7 @@ jobs:
|
||||
| body-includes | 包含内容筛选 | string | ✖ |
|
||||
| title-includes | 包含标题筛选 | string | ✖ |
|
||||
| inactive-day | 非活跃天数筛选 | number | ✖ |
|
||||
| lock-reason | 锁定 issue 的原因 | string | ✖ |
|
||||
|
||||
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
|
||||
- `issue-state`:默认为 `all`。可选值 `open` `closed`,非这 2 项时,均为 `all`
|
||||
|
@@ -231,6 +231,9 @@ jobs:
|
||||
| actions | Action type | string | ✔ |
|
||||
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
|
||||
| issue-number | The number of issue | number | ✔ |
|
||||
| lock-reason | Reason for locking issue | string | ✖ |
|
||||
|
||||
- `lock-reason`: Optional values are `off-topic` `too heated` `resolved` `spam`
|
||||
|
||||
## `mark-duplicate`
|
||||
|
||||
@@ -264,15 +267,16 @@ jobs:
|
||||
| labels | Replace the labels of the issue | string | ✖ |
|
||||
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ |
|
||||
| close-issue | Whether to close the issue at the same time | string | ✖ |
|
||||
| allow-permissions | Permission to operate | string | ✖ |
|
||||
| require-permission | Permission required | string | ✖ |
|
||||
|
||||
- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`. Block content contains `?`
|
||||
- `labels`: Highest priority
|
||||
- `close-issue`: Both `true` or `'true'` can take effect
|
||||
- `allow-permissions`: When you do not input, there is no limit. Anyone comment will trigger. Optional values are `admin`, `write`, `read`, `none`
|
||||
- If the team member sets the read permission, it is read
|
||||
- If the external Collaborator is set to read permission, it is read
|
||||
- Ordinary users have read permission
|
||||
- `require-permission`: When you do not input, there is no limit. Anyone comment will trigger. Optional values are `admin`, `write`, `read`, `none`
|
||||
- If the team member sets the `read` permission, it is `read`
|
||||
- If the external Collaborator is set to `read` permission, it is `read`
|
||||
- Ordinary users have `read` permission
|
||||
- When set `write`, `admin` and `write` meet the conditions
|
||||
|
||||
<Alert>
|
||||
Note: Duplicate created with the concise command does not display the content of the red box in the figure below. But in fact this has no effect.
|
||||
|
14
docs/base.md
14
docs/base.md
@@ -231,6 +231,9 @@ jobs:
|
||||
| actions | 操作类型 | string | ✔ |
|
||||
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
|
||||
| issue-number | 指定的 issue | number | ✔ |
|
||||
| lock-reason | 锁定 issue 的原因 | string | ✖ |
|
||||
|
||||
- `lock-reason`:可选值有 `off-topic` `too heated` `resolved` `spam`
|
||||
|
||||
## `mark-duplicate`
|
||||
|
||||
@@ -264,15 +267,16 @@ jobs:
|
||||
| labels | 替换该 issue 的 labels | string | ✖ |
|
||||
| contents | 为该评论的增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
|
||||
| close-issue | 是否同时关闭该 issue | string | ✖ |
|
||||
| allow-permissions | 允许操作的权限 | string | ✖ |
|
||||
| require-permission | 要求权限 | string | ✖ |
|
||||
|
||||
- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`。屏蔽内容包含 `?`
|
||||
- `labels`:优先级最高
|
||||
- `close-issue`:`true` 或 `'true'` 均可生效
|
||||
- `allow-permissions`:当不输时,即无限制。任何人评论都会触发。可选值有 `admin`,`write`,`read`,`none`
|
||||
- 团队成员若设置 read 权限,则为 read
|
||||
- 外部 Collaborator 若设置 read 权限,则为 read
|
||||
- 普通用户为 read 权限
|
||||
- `require-permission`:当不输时,即无限制,任何人评论都会触发。可选值有 `admin`,`write`,`read`,`none`
|
||||
- 团队成员若设置 `read` 权限,则为 `read`
|
||||
- 外部 Collaborator 若设置 `read` 权限,则为 `read`
|
||||
- 普通用户为 `read` 权限
|
||||
- 当设置 `write` 后,`admin` 和 `write` 满足条件
|
||||
|
||||
<Alert>
|
||||
注意:使用简洁命令创建的 Duplicate 不显示下图红框内容。但其实这个没有任何影响的。
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "issues-helper",
|
||||
"version": "1.11.0",
|
||||
"version": "1.12.0",
|
||||
"private": true,
|
||||
"description": "Some operations on issue.",
|
||||
"main": "src/main.js",
|
||||
|
23
src/base.js
23
src/base.js
@@ -8,7 +8,12 @@ const ALLREACTIONS = ['+1', '-1', 'laugh', 'confused', 'heart', 'hooray', 'rocke
|
||||
|
||||
const { doQueryIssues } = require('./public.js');
|
||||
|
||||
const { dealStringToArr, dealRandomAssignees, testDuplicate } = require('./util.js');
|
||||
const {
|
||||
dealStringToArr,
|
||||
dealRandomAssignees,
|
||||
testDuplicate,
|
||||
checkPermission,
|
||||
} = require('./util.js');
|
||||
|
||||
// **************************************************************************
|
||||
const token = core.getInput('token');
|
||||
@@ -127,11 +132,17 @@ async function doDeleteComment(owner, repo, commentId) {
|
||||
}
|
||||
|
||||
async function doLockIssue(owner, repo, issueNumber) {
|
||||
await octokit.issues.lock({
|
||||
const lockReason = core.getInput('lock-reason');
|
||||
let params = {
|
||||
owner,
|
||||
repo,
|
||||
issue_number: issueNumber,
|
||||
});
|
||||
};
|
||||
const reasons = ['off-topic', 'too heated', 'resolved', 'spam'];
|
||||
if (lockReason && reasons.includes(lockReason)) {
|
||||
params.lock_reason = lockReason;
|
||||
}
|
||||
await octokit.issues.lock(params);
|
||||
core.info(`Actions: [lock-issue][${issueNumber}] success!`);
|
||||
}
|
||||
|
||||
@@ -146,7 +157,7 @@ async function doMarkDuplicate(owner, repo, labels) {
|
||||
const duplicateLabels = core.getInput('duplicate-labels');
|
||||
const removeLables = core.getInput('remove-labels');
|
||||
const closeIssue = core.getInput('close-issue');
|
||||
const allowPermissions = core.getInput('allow-permissions');
|
||||
const requirePermission = core.getInput('require-permission');
|
||||
|
||||
const commentId = context.payload.comment.id;
|
||||
const commentBody = context.payload.comment.body;
|
||||
@@ -155,14 +166,14 @@ async function doMarkDuplicate(owner, repo, labels) {
|
||||
|
||||
const ifCommandInput = !!duplicateCommand;
|
||||
|
||||
if (allowPermissions) {
|
||||
if (requirePermission) {
|
||||
const res = await octokit.repos.getCollaboratorPermissionLevel({
|
||||
owner,
|
||||
repo,
|
||||
username: commentUser,
|
||||
});
|
||||
const { permission } = res.data;
|
||||
if (!allowPermissions.includes(permission)) {
|
||||
if (!checkPermission(requirePermission, permission)) {
|
||||
core.info(`The user ${commentUser} is not allow!`);
|
||||
return false;
|
||||
}
|
||||
|
13
src/util.js
13
src/util.js
@@ -46,10 +46,23 @@ function getPreMonth(m) {
|
||||
return m == 1 ? 12 : m - 1;
|
||||
}
|
||||
|
||||
function checkPermission(require, permission) {
|
||||
/**
|
||||
* 有权限返回 true
|
||||
*/
|
||||
const permissions = ['none', 'read', 'write', 'admin'];
|
||||
const requireNo = permissions.indexOf(require);
|
||||
const permissionNo = permissions.indexOf(permission);
|
||||
|
||||
return requireNo <= permissionNo;
|
||||
}
|
||||
|
||||
// **********************************************************
|
||||
module.exports = {
|
||||
dealStringToArr,
|
||||
dealRandomAssignees,
|
||||
getPreMonth,
|
||||
matchKeyword,
|
||||
testDuplicate,
|
||||
checkPermission,
|
||||
};
|
||||
|
Reference in New Issue
Block a user