mirror of
https://gitea.com/Lydanne/issues-helper.git
synced 2025-08-19 18:25:58 +08:00
feat: add exclude-labels for query issues (#74)
* feat: add exclude-labels for query issues * add formay * Update ci.yml * docs: add readme
This commit is contained in:
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@@ -15,5 +15,8 @@ jobs:
|
||||
- name: format
|
||||
run: yarn format-check
|
||||
|
||||
- name: test
|
||||
run: yarn test
|
||||
|
||||
- name: package
|
||||
run: yarn package
|
||||
|
@@ -781,6 +781,7 @@ jobs:
|
||||
| title-includes | Title filtering | string | ✖ |
|
||||
| inactive-day | Inactive days filtering | number | ✖ |
|
||||
| inactive-label | The label name adding | string | ✖ |
|
||||
| exclude-labels | Exclude labels filtering | 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`
|
||||
@@ -873,6 +874,7 @@ jobs:
|
||||
| body-includes | Body filtering | string | ✖ |
|
||||
| title-includes | Title filtering | string | ✖ |
|
||||
| inactive-day | Inactive days filtering | number | ✖ |
|
||||
| exclude-labels | Exclude labels filtering | string | ✖ |
|
||||
|
||||
- `labels`: When there are multiple, the query will have multiple at the same time. If not entered, all
|
||||
- `issue-assignee`: Multiplayer is not supported. If you do not enter or enter *, all will be searched. Entering `none` will query issues for which the specified person is not added
|
||||
@@ -957,6 +959,7 @@ jobs:
|
||||
| title-includes | Title filtering | string | ✖ |
|
||||
| inactive-day | Inactive days filtering | number | ✖ |
|
||||
| lock-reason | Reason for locking issue | string | ✖ |
|
||||
| exclude-labels | Exclude labels filtering | 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`
|
||||
|
@@ -783,6 +783,7 @@ jobs:
|
||||
| title-includes | 包含标题筛选 | string | ✖ |
|
||||
| inactive-day | 非活跃天数筛选 | number | ✖ |
|
||||
| inactive-label | 新增标签名称 | string | ✖ |
|
||||
| exclude-labels | 排除标签筛选 | string | ✖ |
|
||||
|
||||
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
|
||||
- `issue-state`:默认为 `open`。可选值 `all` `closed`,非这 2 项时,均为 `open`
|
||||
@@ -871,6 +872,7 @@ jobs:
|
||||
| body-includes | 包含内容筛选 | string | ✖ |
|
||||
| title-includes | 包含标题筛选 | string | ✖ |
|
||||
| inactive-day | 非活跃天数筛选 | number | ✖ |
|
||||
| exclude-labels | 排除标签筛选 | string | ✖ |
|
||||
|
||||
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
|
||||
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
|
||||
@@ -955,6 +957,7 @@ jobs:
|
||||
| title-includes | 包含标题筛选 | string | ✖ |
|
||||
| inactive-day | 非活跃天数筛选 | number | ✖ |
|
||||
| lock-reason | 锁定 issue 的原因 | string | ✖ |
|
||||
| exclude-labels | 排除标签筛选 | string | ✖ |
|
||||
|
||||
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
|
||||
- `issue-state`:默认为 `open`。可选值 `all` `closed`,非这 2 项时,均为 `open`
|
||||
|
@@ -74,6 +74,9 @@ inputs:
|
||||
description: 'The reason lock issue'
|
||||
inactive-label:
|
||||
description: 'Issue label set use'
|
||||
exclude-labels:
|
||||
description: 'Query issues exclude labels'
|
||||
|
||||
duplicate-command:
|
||||
description: 'For mark-duplicate'
|
||||
duplicate-labels:
|
||||
|
@@ -12,6 +12,7 @@
|
||||
"deploy": "npm run docs:build && npm run docs:deploy",
|
||||
"format": "prettier --write **/*.ts **/*.js",
|
||||
"format-check": "prettier --check **/*.ts **/*.js",
|
||||
"test": "father test",
|
||||
"package": "ncc build src/main.js -o dist",
|
||||
"users": "node ./script/update-users.js",
|
||||
"main": "node ./src/main.js",
|
||||
@@ -35,6 +36,7 @@
|
||||
"@actions/github": "^4.0.0",
|
||||
"@octokit/rest": "^18.0.12",
|
||||
"dayjs": "^1.9.7",
|
||||
"father": "^2.30.7",
|
||||
"lodash": "^4.17.20"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
const core = require('@actions/core');
|
||||
const { Octokit } = require('@octokit/rest');
|
||||
|
||||
const { getPreMonth } = require('./util.js');
|
||||
const { getPreMonth, dealStringToArr } = require('./util.js');
|
||||
|
||||
// **************************************************************************
|
||||
var dayjs = require('dayjs');
|
||||
@@ -23,9 +23,20 @@ const issueMentioned = core.getInput('issue-mentioned');
|
||||
const bodyIncludes = core.getInput('body-includes');
|
||||
const titleIncludes = core.getInput('title-includes');
|
||||
|
||||
const excludeLabels = core.getInput('exclude-labels');
|
||||
|
||||
const inactiveDay = core.getInput('inactive-day');
|
||||
|
||||
// **************************************************************************
|
||||
/**
|
||||
* 查询 Issues 列表
|
||||
* @param {*} owner
|
||||
* @param {*} repo
|
||||
* @param {*} labels
|
||||
* @param {*} state
|
||||
* @param {*} creator
|
||||
* @returns
|
||||
*/
|
||||
async function doQueryIssues(owner, repo, labels, state, creator) {
|
||||
let params = {
|
||||
owner,
|
||||
@@ -58,6 +69,13 @@ async function doQueryIssues(owner, repo, labels, state, creator) {
|
||||
* You can identify pull requests by the pull_request key.
|
||||
*/
|
||||
if (a && b && iss.pull_request === undefined) {
|
||||
if (excludeLabels) {
|
||||
const labels = dealStringToArr(excludeLabels);
|
||||
for (let i = 0; i < iss.labels.length; i += 1) {
|
||||
if (labels.includes(iss.labels[i].name)) return;
|
||||
}
|
||||
}
|
||||
|
||||
if (inactiveDay) {
|
||||
let lastTime = dayjs.utc().subtract(Number(inactiveDay), 'day');
|
||||
let updateTime = dayjs.utc(iss.updated_at);
|
||||
|
45
tests/public.test.js
Normal file
45
tests/public.test.js
Normal file
@@ -0,0 +1,45 @@
|
||||
describe('Test Public', () => {
|
||||
it('test query', () => {
|
||||
const issues = [
|
||||
{
|
||||
id: 0,
|
||||
labels: [{ name: '0' }, { name: '1' }],
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
labels: [{ name: '1' }, { name: '2' }],
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
labels: [{ name: '2' }, { name: '3' }],
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
labels: [{ name: '1' }, { name: '4' }],
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
labels: [{ name: '1' }, { name: '3' }],
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
labels: [{ name: '1' }, { name: '5' }],
|
||||
},
|
||||
];
|
||||
|
||||
let ex = ['2', '4'];
|
||||
let r = [];
|
||||
|
||||
issues.forEach(iss => {
|
||||
for (let i = 0; i < iss.labels.length; i += 1) {
|
||||
if (ex.includes(iss.labels[i].name)) return;
|
||||
}
|
||||
r.push(iss);
|
||||
});
|
||||
|
||||
expect(r[0].id).toEqual(0);
|
||||
expect(r[1].id).toEqual(4);
|
||||
expect(r[2].id).toEqual(5);
|
||||
expect(r.length).toEqual(3);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user