Compare commits

..

14 Commits
v3.5.0 ... main

Author SHA1 Message Date
xrkffgg
77e16f7f08 chore: update issue support create label (#198) 2024-11-01 17:57:55 +08:00
xrkffgg
26a4993608 chore: remove warning (#197)
* fix: remove warning

* chore: update
2024-11-01 17:17:17 +08:00
元凛
f3eb0a0a96 docs: update logo url 2024-02-18 14:24:11 +08:00
元凛
a610082f8a docs: update changelog 2024-02-18 14:19:14 +08:00
xrkffgg
556cc4f66e feat: add assignees to find-issues (#192)
* feat: add assignees to find-issues

* docs: update
2024-02-18 14:15:52 +08:00
buffcode
e0e6d4a469 docs: document default issue filtering (#191) 2024-02-18 13:52:38 +08:00
Daniel Compton
fac636e8a9 chore: Bump runtime to node20 (#190) 2024-02-18 13:51:26 +08:00
xrkffgg
a0d1612783 chore: Update ci.yml 2024-02-18 13:50:22 +08:00
49a9184d18 chore: pins types-ramda to 0.29.4 (#185)
ref: https://github.com/ramda/ramda/issues/3415
2023-10-24 10:13:31 +08:00
元凛
5457ae8d7c chore: update dist & changelog 2023-08-16 13:29:01 +08:00
Just Thomas Hiorth Misund
0071d48bea fix: assign assignees to the assignees field instead of body field (#163) 2023-08-16 13:24:08 +08:00
元凛
25379ae1ea docs: update changelog 2023-07-27 10:04:48 +08:00
元凛
9a2f8c1e68 perf: inactive-mode support more 2023-07-27 09:53:59 +08:00
元凛
554782c560 chore: update changelog 2023-07-19 10:06:17 +08:00
16 changed files with 28048 additions and 48 deletions

View File

@@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
node-version: [20.x]
steps:
- name: checkout
uses: actions/checkout@main

View File

@@ -22,7 +22,7 @@ jobs:
zip -r dist.zip docs-dist
- name: upload dist artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: dist
path: dist.zip
@@ -34,7 +34,7 @@ jobs:
- name: Upload PR number
if: ${{ always() }}
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: pr
path: ./pr-id.txt

View File

@@ -12,7 +12,7 @@ jobs:
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
steps:
- name: download pr artifact
uses: dawidd6/action-download-artifact@v2
uses: dawidd6/action-download-artifact@v6
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
name: pr
@@ -22,7 +22,7 @@ jobs:
run: echo "::set-output name=id::$(<pr-id.txt)"
- name: download dist artifact
uses: dawidd6/action-download-artifact@v2
uses: dawidd6/action-download-artifact@v6
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
workflow_conclusion: success
@@ -69,7 +69,7 @@ jobs:
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'failure'
steps:
- name: download pr artifact
uses: dawidd6/action-download-artifact@v2
uses: dawidd6/action-download-artifact@v6
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
name: pr

View File

@@ -7,8 +7,29 @@
🛠 refactor
-->
## v3.6.0
`2024.02.18`
- 🚀 feat: add assignees to find-issues. [#192](https://github.com/actions-cool/issues-helper/pull/192)
- 💄 chore: Bump runtime to node20. [#190](https://github.com/actions-cool/issues-helper/pull/190) [@danielcompton](https://github.com/danielcompton)
## v3.5.2
`2023.08.16`
- 🐞 fix: return `issue-assignees` in the correct output field for `get-issue`. [#163](https://github.com/actions-cool/issues-helper/pull/163) [@misund](https://github.com/misund)
## v3.5.1
`2023.07.27`
- 💄 perf: `inactive-mode` support `issue-created` `comment-created`.
## v3.5.0
`2023.07.19`
- 🚀 feat: support `inactive-mode`. Optional `comment`, which will check the last comment update time. [#158](https://github.com/actions-cool/issues-helper/pull/158)
## v3.4.0

View File

@@ -79,7 +79,7 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
</td>
<td align="center" width="180">
<a href="https://github.com/umijs/dumi">
<img src="https://gw.alipayobjects.com/zos/bmw-prod/d3e3eb39-1cd7-4aa5-827c-877deced6b7e/lalxt4g3_w256_h256.png" width="46"/>
<img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
@@ -116,7 +116,7 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
</td>
<td align="center" width="180">
<a href="https://github.com/TuSimple/naive-ui">
<img src="https://camo.githubusercontent.com/b8ebecade711b9ae1fa306e7a1c9dd680fb56b0e2b9f015fec9cbad343570353/68747470733a2f2f6e6169766575692e6f73732d636e2d686f6e676b6f6e672e616c6979756e63732e636f6d2f6e616976656c6f676f2e737667" width="46"/>
<img src="https://www.naiveui.com/assets/naivelogo-XQ1U1Js8.svg" width="46"/>
</a>
</td>
</tr>
@@ -792,7 +792,7 @@ jobs:
| body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
| inactive-mode | Detect inactive mode, default `issue`, optional `comment`, which is the last comment update time | string | ✖ |
| inactive-mode | Detect inactive mode, default `issue` | string | ✖ |
| inactive-label | The label name adding | string | ✖ |
| exclude-labels | Exclude labels filtering | string | ✖ |
@@ -802,6 +802,13 @@ jobs:
- `inactive-day`: When entering, it will filter the issue update time earlier than the current time minus the number of inactive days. If not entered, all
- `inactive-label`: The default is `inactive`, others can be customized. When the project does not contain the label, it will be created automatically
- `exclude-labels`: When set to include `$exclude-empty`, no label issue can be excluded
- `inactive-mode`:
- Default `issue`: the issue updated time
- Optional `comment`: the last comment update time
- Optional `issue-created`: the issue created time
- Optional `comment-created`: the comment creation time
- You can also set multiple such as: `comment, issue-created`
- It will be detected with priority, the update time of the last comment will be detected first, if there is no comment, the creation time of the issue will be used
[⏫ Back to list](#List)
@@ -968,11 +975,12 @@ Find the current repository, the creator is k , the title contains `this` , the
```js
[
{number: 1, auth: 'x', body: 'xxx', body: 'xxx', state: 'open', created: '', updated: ''},
{number: 2, auth: 'x', body: 'xxx', body: 'xxx', state: 'closed', created: '', updated: ''},
{number: 1, auth: 'x', body: 'xxx', body: 'xxx', state: 'open', assignees: ['x1', 'x2'], created: '', updated: ''},
{number: 2, auth: 'x', body: 'xxx', body: 'xxx', state: 'closed', assignees: ['x1', 'x2'], created: '', updated: ''},
]
```
- `issue-state`: The default is `open`. Other values are: `closed`, `all`
- `direction` defaults to ascending order, only when `desc` is set, descending order will be returned
- The `created` `updated` in the returned array, determined by the environment, will be UTC +0
- `exclude-labels`: When set to include `$exclude-empty`, no label issue can be excluded

View File

@@ -79,7 +79,7 @@
</td>
<td align="center" width="180">
<a href="https://github.com/umijs/dumi">
<img src="https://gw.alipayobjects.com/zos/bmw-prod/d3e3eb39-1cd7-4aa5-827c-877deced6b7e/lalxt4g3_w256_h256.png" width="46"/>
<img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
@@ -116,7 +116,7 @@
</td>
<td align="center" width="180">
<a href="https://github.com/TuSimple/naive-ui">
<img src="https://camo.githubusercontent.com/b8ebecade711b9ae1fa306e7a1c9dd680fb56b0e2b9f015fec9cbad343570353/68747470733a2f2f6e6169766575692e6f73732d636e2d686f6e676b6f6e672e616c6979756e63732e636f6d2f6e616976656c6f676f2e737667" width="46"/>
<img src="https://www.naiveui.com/assets/naivelogo-XQ1U1Js8.svg" width="46"/>
</a>
</td>
</tr>
@@ -796,7 +796,7 @@ jobs:
| body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
| inactive-mode | 检测不活跃的模式,默认 `issue`,可选 `comment`,即为最后一个评论更新时间 | string | ✖ |
| inactive-mode | 检测不活跃的模式 | string | ✖ |
| inactive-label | 新增标签名称 | string | ✖ |
| exclude-labels | 排除标签筛选 | string | ✖ |
@@ -806,6 +806,13 @@ jobs:
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
- `inactive-label`:默认为 `inactive`,可自定义其他。当项目未包含该 label 时,会自动新建
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
- `inactive-mode`:
- 默认 `issue`,检查 issue 的更新时间
- 可选 `comment`,检查最后一个评论的更新时间
- 可选 `issue-created`,检查 issue 的创建时间
- 可选 `comment-created`,最后一个评论的创建时间
- 你也可以设置多个如:`comment, issue-created`
- 将会以优先级检测,先检测最后一条评论更新时间,如无评论,则使用 issue 的创建时间
[⏫ 返回列表](#列-表)
@@ -970,8 +977,8 @@ jobs:
```js
[
{number: 1, auth: 'x', body: 'xxx', body: 'xxx', state: 'open', created: '', updated: ''},
{number: 2, auth: 'x', body: 'xxx', body: 'xxx', state: 'closed', created: '', updated: ''},
{number: 1, auth: 'x', body: 'xxx', body: 'xxx', state: 'open', assignees: ['x1', 'x2'], created: '', updated: ''},
{number: 2, auth: 'x', body: 'xxx', body: 'xxx', state: 'closed', assignees: ['x1', 'x2'], created: '', updated: ''},
]
```

View File

@@ -77,7 +77,7 @@ const users = [
},
{
url: 'https://github.com/TuSimple/naive-ui',
logo: 'https://camo.githubusercontent.com/b8ebecade711b9ae1fa306e7a1c9dd680fb56b0e2b9f015fec9cbad343570353/68747470733a2f2f6e6169766575692e6f73732d636e2d686f6e676b6f6e672e616c6979756e63732e636f6d2f6e616976656c6f676f2e737667',
logo: 'https://www.naiveui.com/assets/naivelogo-XQ1U1Js8.svg',
},
{
url: 'https://github.com/element-plus/element-plus',

View File

@@ -119,5 +119,5 @@ outputs:
description: 'Check issue'
runs:
using: node16
using: node20
main: 'dist/index.js'

24
dist/index.js vendored
View File

@@ -16408,16 +16408,27 @@ function doQueryIssues(state, creator, ignoreLabels) {
dayjs_1.default.extend(utc_1.default);
dayjs_1.default.extend(isSameOrBefore_1.default);
const lastTime = dayjs_1.default.utc().subtract(+inactiveDay, 'day');
const inactiveMode = core.getInput('inactive-mode') || 'issue';
let updateTime = dayjs_1.default.utc(issue.updated_at);
if (inactiveMode === 'comment') {
const inactiveMode = (0, actions_util_1.dealStringToArr)(core.getInput('inactive-mode'));
let checkTime = null;
for (const mode of inactiveMode) {
if (checkTime) {
break;
}
if (mode === 'comment' || mode === 'comment-created') {
ICE.setIssueNumber(issue.number);
const comments = yield ICE.listComments();
if (comments.length) {
updateTime = dayjs_1.default.utc(comments[comments.length - 1].updated_at);
checkTime = dayjs_1.default.utc(comments[comments.length - 1][mode === 'comment' ? 'updated_at' : 'created_at']);
}
}
if (updateTime && updateTime.isSameOrBefore(lastTime)) {
if (mode === 'issue-created') {
checkTime = dayjs_1.default.utc(issue.created_at);
}
}
if (!checkTime) {
checkTime = dayjs_1.default.utc(issue.updated_at);
}
if (checkTime && checkTime.isSameOrBefore(lastTime)) {
issues.push(issue);
issueNumbers.push(issue.number);
}
@@ -16588,6 +16599,7 @@ function doFindIssues() {
title: issue.title,
body: issue.body,
state: issue.state,
assignees: issue.assignees.map(val => val.login),
created: issue.created_at,
updated: issue.updated_at,
};
@@ -16909,7 +16921,7 @@ function doGetIssue() {
const labelsString = labels.length ? labels.map(({ name }) => name).join(',') : '';
core.setOutput('issue-labels', labelsString);
const assigneesString = assignees.length ? assignees.map(({ login }) => login).join(',') : '';
core.setOutput('issue-body', assigneesString);
core.setOutput('issue-assignees', assigneesString);
});
}
exports.doGetIssue = doGetIssue;

View File

@@ -60,5 +60,8 @@
"prettier": "^2.2.1",
"simple-git": "^2.46.0",
"typescript": "^4.1.3"
},
"resolutions": {
"types-ramda": "0.29.4"
}
}

View File

@@ -85,16 +85,32 @@ export async function doQueryIssues(
const lastTime = dayjs.utc().subtract(+inactiveDay, 'day');
const inactiveMode = core.getInput('inactive-mode') || 'issue';
let updateTime = dayjs.utc(issue.updated_at);
if (inactiveMode === 'comment') {
const inactiveMode = dealStringToArr(core.getInput('inactive-mode'));
let checkTime: dayjs.Dayjs | null = null;
for (const mode of inactiveMode) {
if (checkTime) {
break;
}
if (mode === 'comment' || mode === 'comment-created') {
ICE.setIssueNumber(issue.number);
const comments = await ICE.listComments();
if (comments.length) {
updateTime = dayjs.utc(comments[comments.length - 1].updated_at);
checkTime = dayjs.utc(
comments[comments.length - 1][mode === 'comment' ? 'updated_at' : 'created_at'],
);
}
}
if (updateTime && updateTime.isSameOrBefore(lastTime)) {
if (mode === 'issue-created') {
checkTime = dayjs.utc(issue.created_at);
}
}
if (!checkTime) {
checkTime = dayjs.utc(issue.updated_at);
}
if (checkTime && checkTime.isSameOrBefore(lastTime)) {
issues.push(issue);
issueNumbers.push(issue.number);
}
@@ -256,6 +272,7 @@ export async function doFindIssues() {
title: issue.title,
body: issue.body,
state: issue.state,
assignees: issue.assignees.map(val => val.login),
created: issue.created_at,
updated: issue.updated_at,
};

View File

@@ -74,8 +74,8 @@ export async function doCreateIssue(
export async function doCreateLabel() {
const name = core.getInput('label-name');
const color = core.getInput('label-color') || 'ededed';
const description = core.getInput('label-desc') || '';
const color = core.getInput('label-color');
const description = core.getInput('label-desc');
if (name) {
await ICE.createLabel(name, color, description);
@@ -104,7 +104,7 @@ export async function doGetIssue() {
const labelsString = labels.length ? labels.map(({ name }) => name).join(',') : '';
core.setOutput('issue-labels', labelsString);
const assigneesString = assignees.length ? assignees.map(({ login }) => login).join(',') : '';
core.setOutput('issue-body', assigneesString);
core.setOutput('issue-assignees', assigneesString);
}
export async function doLockIssue(issueNumber?: number) {

View File

@@ -80,8 +80,6 @@ export class IssueHelperEngine implements IIssueHelperEngine {
const issueNumber = core.getInput('issue-number') || defaultCtxNumber;
if (issueNumber) {
this.issueNumber = +issueNumber;
} else {
core.warning(`'issue-number' is missing or this action not needed yet!`);
}
this.emoji = core.getInput('emoji') || '';

View File

@@ -130,8 +130,8 @@ export class IssueCoreEngine implements IIssueCoreEngine {
public async createLabel(
labelName: string,
labelColor: string,
labelDescription: string | undefined,
labelColor: string = 'ededed',
labelDescription: string = '',
) {
const { owner, repo, octokit } = this;
await octokit.issues.createLabel({
@@ -318,11 +318,19 @@ export class IssueCoreEngine implements IIssueCoreEngine {
state: baseState,
} = issue;
const baseLabelsName = baseLabels.map(({ name }: any) => name);
const baseAssignessName = baseAssigness?.map(({ login }: any) => login);
const baseLabelsName = baseLabels.map(({ name }) => name);
const baseAssignessName = baseAssigness?.map(({ login }) => login);
const newBody = body ? (mode === 'append' ? `${baseBody}\n${body}` : body) : baseBody;
if (labels && labels.length) {
for (const label of labels) {
if (baseLabelsName && baseLabelsName.length && baseLabelsName.indexOf(label) < 0) {
await this.createLabel(label);
}
}
}
await octokit.issues.update({
owner,
repo,

View File

@@ -83,7 +83,7 @@ export interface IIssueCoreEngine {
createIssueEmoji: (emoji: TEmoji[]) => Promise<void>;
createLabel: (
labelName: string,
labelColor: string,
labelColor: string | undefined,
labelDescription: string | undefined,
) => Promise<void>;

27926
yarn.lock Normal file

File diff suppressed because it is too large Load Diff