Compare commits

...

14 Commits

Author SHA1 Message Date
元凛
adce2a7049 docs: update changelog 2022-08-31 21:54:52 +08:00
元凛
2b3835f42e docs: update mui url 2022-08-31 21:53:17 +08:00
xrkffgg
3cc206fdcb fix: mark-duplicate labels invalid (#116)
* test

* test

* fix labels length
2022-08-31 21:50:32 +08:00
元凛
293fb5e353 docs: fix typo 2022-08-26 16:43:12 +08:00
xrkffgg
982af7d1b7 feat: add `$exclude-empty (#112)
* feat: add `$exclude-empty

* docs: up

* chore: format
2022-08-26 16:33:14 +08:00
元凛
6672cf5641 chore: update dist 2022-08-09 13:00:38 +08:00
元凛
68a418a2e3 docs: update changelog 2022-08-09 12:59:42 +08:00
Noah Hsu
95857edf92 feat: add reason for closing issue (#110)
* feat: add reason for closing issue

* style: fix lint
2022-08-09 11:57:40 +08:00
元凛
99345e5b9f style: fix lint 2022-08-01 11:24:21 +08:00
元凛
0e8eacd7fd 🐞 fix: check will undefined 2022-08-01 11:23:18 +08:00
元凛
b9d9c9bdd8 docs: add user vitest 2022-07-25 13:54:58 +08:00
元凛
863fd9715c docs: add user & fix typo 2022-03-04 15:52:51 +08:00
元凛
aef41a8473 docs: update readme users 2022-02-22 19:16:48 +08:00
xrkffgg
40c49147c3 docs: add bootstrap user 2022-02-22 19:12:56 +08:00
18 changed files with 271 additions and 102 deletions

View File

@@ -7,6 +7,31 @@
🛠 refactor
-->
## v3.2.1
`2022.08.31`
- 🐞 fix: mark-duplicate labels invalid. [#116](https://github.com/actions-cool/issues-helper/pull/116)
## v3.2.0
`2022.08.26`
- 🚀 feat: add `$exclude-empty` for `exclude-labels`. [#112](https://github.com/actions-cool/issues-helper/pull/112)
- When set to include `$exclude-empty`, no label issue can be excluded
## v3.1.0
`2022.08.09`
- 🚀 feat: add reason for closing issue. [#110](https://github.com/actions-cool/issues-helper/pull/110) [@Xhofe](https://github.com/Xhofe)
## v3.0.1
`2022.08.01`
- 🐞 fix: check will undefined.
## v3.0.0
`2022.02.15`

View File

@@ -61,8 +61,8 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/umijs/dumi">
<img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46"/>
<a href="https://github.com/twbs/bootstrap">
<img src="https://getbootstrap.com/docs/5.1/assets/brand/bootstrap-logo-shadow.png" width="46"/>
</a>
</td>
</tr>
@@ -70,8 +70,13 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
<td align="center" width="180"><a href="https://github.com/ant-design/ant-design">ant-design</a></td>
<td align="center" width="180"><a href="https://github.com/ant-design-blazor/ant-design-blazor">ant-design-blazor</a></td>
<td align="center" width="180"><a href="https://github.com/vueComponent/ant-design-vue">ant-design-vue</a></td>
<td align="center" width="180"><a href="https://github.com/umijs/dumi">dumi</a></td>
<td align="center" width="180"><a href="https://github.com/twbs/bootstrap">bootstrap</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/umijs/dumi">
<img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/element-plus/element-plus">
<img src="https://avatars.githubusercontent.com/u/68583457" width="46"/>
@@ -87,18 +92,18 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
<img src="https://avatars.githubusercontent.com/u/6128107?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/mui-org/material-ui">
<img src="https://avatars2.githubusercontent.com/u/33663932?s=200&v=4" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/umijs/dumi">dumi</a></td>
<td align="center" width="180"><a href="https://github.com/element-plus/element-plus">element-plus</a></td>
<td align="center" width="180"><a href="https://github.com/alibaba/formily">formily</a></td>
<td align="center" width="180"><a href="https://github.com/vuejs/jsx-next">jsx-next</a></td>
<td align="center" width="180"><a href="https://github.com/mui-org/material-ui">material-ui</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/mui/material-ui">
<img src="https://avatars.githubusercontent.com/u/33663932?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/TuSimple/naive-ui">
<img src="https://camo.githubusercontent.com/b8ebecade711b9ae1fa306e7a1c9dd680fb56b0e2b9f015fec9cbad343570353/68747470733a2f2f6e6169766575692e6f73732d636e2d686f6e676b6f6e672e616c6979756e63732e636f6d2f6e616976656c6f676f2e737667" width="46"/>
@@ -114,18 +119,18 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
<img src="https://user-images.githubusercontent.com/29775873/129505900-ca248179-2435-429d-9fd3-779206bcd899.png" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/mui/material-ui">material-ui</a></td>
<td align="center" width="180"><a href="https://github.com/TuSimple/naive-ui">naive-ui</a></td>
<td align="center" width="180"><a href="https://github.com/jdf2e/nutui">nutui</a></td>
<td align="center" width="180"><a href="https://github.com/prettier/prettier">prettier</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/ant-design/pro-components">
<img src="https://avatars1.githubusercontent.com/u/12101536?s=200&v=4" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/TuSimple/naive-ui">naive-ui</a></td>
<td align="center" width="180"><a href="https://github.com/jdf2e/nutui">nutui</a></td>
<td align="center" width="180"><a href="https://github.com/prettier/prettier">prettier</a></td>
<td align="center" width="180"><a href="https://github.com/ant-design/pro-components">pro-components</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/react-component">
<img src="https://avatars3.githubusercontent.com/u/9441414?s=200&v=4" width="46"/>
@@ -141,23 +146,40 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
<img src="https://gw.alipayobjects.com/mdn/rms_56cbb2/afts/img/A*TI8XSK3W0EkAAAAAAAAAAAAAARQnAQ" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/ant-design/pro-components">pro-components</a></td>
<td align="center" width="180"><a href="https://github.com/react-component">react-component</a></td>
<td align="center" width="180"><a href="https://github.com/lijinke666/react-music-player">react-music-player</a></td>
<td align="center" width="180"><a href="https://github.com/antvis/S2">S2</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/nolimits4web/swiper">
<img src="https://user-images.githubusercontent.com/29775873/156721728-3b0021ea-6932-4a77-a104-2e0bad97346e.png" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/umijs/umi">
<img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/react-component">react-component</a></td>
<td align="center" width="180"><a href="https://github.com/lijinke666/react-music-player">react-music-player</a></td>
<td align="center" width="180"><a href="https://github.com/antvis/S2">S2</a></td>
<td align="center" width="180"><a href="https://github.com/umijs/umi">umi</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/vitejs/vite">
<img src="https://avatars.githubusercontent.com/u/65625612?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/vitest-dev/vitest">
<img src="https://user-images.githubusercontent.com/11247099/145112184-a9ff6727-661c-439d-9ada-963124a281f7.png" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/nolimits4web/swiper">swiper</a></td>
<td align="center" width="180"><a href="https://github.com/umijs/umi">umi</a></td>
<td align="center" width="180"><a href="https://github.com/vitejs/vite">vite</a></td>
<td align="center" width="180"><a href="https://github.com/vitest-dev/vitest">vitest</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/AttoJS/vue-request">
<img src="https://user-images.githubusercontent.com/29775873/129506134-55044c85-24cd-47d3-81ef-dba842214d71.png" width="46"/>
@@ -173,12 +195,13 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
<img src="https://avatars1.githubusercontent.com/u/70757173?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180"></td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/vitejs/vite">vite</a></td>
<td align="center" width="180"><a href="https://github.com/AttoJS/vue-request">vue-request</a></td>
<td align="center" width="180"><a href="https://github.com/vuepress/vuepress-next">vuepress-next</a></td>
<td align="center" width="180"><a href="https://github.com/zoo-js/zoo">zoo</a></td>
<td align="center" width="180"></td>
</tr>
</table>
@@ -331,6 +354,7 @@ Close the specified issue.
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✖ |
| issue-number | The number of issue. When not input, it will be obtained from the trigger event | number | ✖ |
| close-reason | Reason for closing. Default `not_planned`, another `completed` | string | ✖ |
⏫ [Back to list](#List)
@@ -746,6 +770,7 @@ jobs:
- `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
- `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
⏫ [Back to list](#List)
@@ -833,10 +858,12 @@ jobs:
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
| exclude-labels | Exclude labels filtering | string | ✖ |
| close-reason | Reason for closing. Default `not_planned`, another `completed` | 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
- `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
- `exclude-labels`: When set to include `$exclude-empty`, no label issue can be excluded
⏫ [Back to list](#List)
@@ -917,6 +944,7 @@ Find the current repository, the creator is k , the title contains `this` , the
- `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
⏫ [Back to list](#List)
@@ -965,6 +993,7 @@ jobs:
- `issue-state`: The default is `all`. Optional value `open` `closed`, when these 2 items are not, both are `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
- `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
- `exclude-labels`: When set to include `$exclude-empty`, no label issue can be excluded
⏫ [Back to list](#List)
@@ -980,10 +1009,10 @@ on:
types: [created, edited]
jobs:
mark-duplicate:
mark-assignees:
runs-on: ubuntu-latest
steps:
- name: mark-duplicate
- name: mark-assignees
uses: actions-cool/issues-helper@v3
with:
actions: 'mark-assignees'
@@ -1039,6 +1068,7 @@ jobs:
| emoji | Add [reaction](#emoji-types) for this comment | string | ✖ |
| close-issue | Whether to close the issue at the same time | string | ✖ |
| require-permission | Permission required, default is `write` | string | ✖ |
| close-reason | Reason for closing. Default `not_planned`, another `completed` | string | ✖ |
- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`. Block content contains `?`
- `labels`: Highest priority

View File

@@ -61,8 +61,8 @@
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/umijs/dumi">
<img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46"/>
<a href="https://github.com/twbs/bootstrap">
<img src="https://getbootstrap.com/docs/5.1/assets/brand/bootstrap-logo-shadow.png" width="46"/>
</a>
</td>
</tr>
@@ -70,8 +70,13 @@
<td align="center" width="180"><a href="https://github.com/ant-design/ant-design">ant-design</a></td>
<td align="center" width="180"><a href="https://github.com/ant-design-blazor/ant-design-blazor">ant-design-blazor</a></td>
<td align="center" width="180"><a href="https://github.com/vueComponent/ant-design-vue">ant-design-vue</a></td>
<td align="center" width="180"><a href="https://github.com/umijs/dumi">dumi</a></td>
<td align="center" width="180"><a href="https://github.com/twbs/bootstrap">bootstrap</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/umijs/dumi">
<img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/element-plus/element-plus">
<img src="https://avatars.githubusercontent.com/u/68583457" width="46"/>
@@ -87,18 +92,18 @@
<img src="https://avatars.githubusercontent.com/u/6128107?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/mui-org/material-ui">
<img src="https://avatars2.githubusercontent.com/u/33663932?s=200&v=4" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/umijs/dumi">dumi</a></td>
<td align="center" width="180"><a href="https://github.com/element-plus/element-plus">element-plus</a></td>
<td align="center" width="180"><a href="https://github.com/alibaba/formily">formily</a></td>
<td align="center" width="180"><a href="https://github.com/vuejs/jsx-next">jsx-next</a></td>
<td align="center" width="180"><a href="https://github.com/mui-org/material-ui">material-ui</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/mui/material-ui">
<img src="https://avatars.githubusercontent.com/u/33663932?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/TuSimple/naive-ui">
<img src="https://camo.githubusercontent.com/b8ebecade711b9ae1fa306e7a1c9dd680fb56b0e2b9f015fec9cbad343570353/68747470733a2f2f6e6169766575692e6f73732d636e2d686f6e676b6f6e672e616c6979756e63732e636f6d2f6e616976656c6f676f2e737667" width="46"/>
@@ -114,18 +119,18 @@
<img src="https://user-images.githubusercontent.com/29775873/129505900-ca248179-2435-429d-9fd3-779206bcd899.png" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/mui/material-ui">material-ui</a></td>
<td align="center" width="180"><a href="https://github.com/TuSimple/naive-ui">naive-ui</a></td>
<td align="center" width="180"><a href="https://github.com/jdf2e/nutui">nutui</a></td>
<td align="center" width="180"><a href="https://github.com/prettier/prettier">prettier</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/ant-design/pro-components">
<img src="https://avatars1.githubusercontent.com/u/12101536?s=200&v=4" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/TuSimple/naive-ui">naive-ui</a></td>
<td align="center" width="180"><a href="https://github.com/jdf2e/nutui">nutui</a></td>
<td align="center" width="180"><a href="https://github.com/prettier/prettier">prettier</a></td>
<td align="center" width="180"><a href="https://github.com/ant-design/pro-components">pro-components</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/react-component">
<img src="https://avatars3.githubusercontent.com/u/9441414?s=200&v=4" width="46"/>
@@ -141,23 +146,40 @@
<img src="https://gw.alipayobjects.com/mdn/rms_56cbb2/afts/img/A*TI8XSK3W0EkAAAAAAAAAAAAAARQnAQ" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/ant-design/pro-components">pro-components</a></td>
<td align="center" width="180"><a href="https://github.com/react-component">react-component</a></td>
<td align="center" width="180"><a href="https://github.com/lijinke666/react-music-player">react-music-player</a></td>
<td align="center" width="180"><a href="https://github.com/antvis/S2">S2</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/nolimits4web/swiper">
<img src="https://user-images.githubusercontent.com/29775873/156721728-3b0021ea-6932-4a77-a104-2e0bad97346e.png" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/umijs/umi">
<img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/react-component">react-component</a></td>
<td align="center" width="180"><a href="https://github.com/lijinke666/react-music-player">react-music-player</a></td>
<td align="center" width="180"><a href="https://github.com/antvis/S2">S2</a></td>
<td align="center" width="180"><a href="https://github.com/umijs/umi">umi</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/vitejs/vite">
<img src="https://avatars.githubusercontent.com/u/65625612?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180">
<a href="https://github.com/vitest-dev/vitest">
<img src="https://user-images.githubusercontent.com/11247099/145112184-a9ff6727-661c-439d-9ada-963124a281f7.png" width="46"/>
</a>
</td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/nolimits4web/swiper">swiper</a></td>
<td align="center" width="180"><a href="https://github.com/umijs/umi">umi</a></td>
<td align="center" width="180"><a href="https://github.com/vitejs/vite">vite</a></td>
<td align="center" width="180"><a href="https://github.com/vitest-dev/vitest">vitest</a></td>
</tr><tr>
<td align="center" width="180">
<a href="https://github.com/AttoJS/vue-request">
<img src="https://user-images.githubusercontent.com/29775873/129506134-55044c85-24cd-47d3-81ef-dba842214d71.png" width="46"/>
@@ -173,12 +195,13 @@
<img src="https://avatars1.githubusercontent.com/u/70757173?s=200&v=4" width="46"/>
</a>
</td>
<td align="center" width="180"></td>
</tr>
<tr>
<td align="center" width="180"><a href="https://github.com/vitejs/vite">vite</a></td>
<td align="center" width="180"><a href="https://github.com/AttoJS/vue-request">vue-request</a></td>
<td align="center" width="180"><a href="https://github.com/vuepress/vuepress-next">vuepress-next</a></td>
<td align="center" width="180"><a href="https://github.com/zoo-js/zoo">zoo</a></td>
<td align="center" width="180"></td>
</tr>
</table>
@@ -335,6 +358,7 @@ jobs:
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✖ |
| issue-number | 指定的 issue当不传时会从触发事件中获取 | number | ✖ |
| close-reason | 关闭原因。默认`not_planned`未计划,`completed`完成 | string | ✖ |
⏫ [返回列表](#列-表)
@@ -749,6 +773,7 @@ jobs:
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
- `inactive-label`:默认为 `inactive`,可自定义其他。当项目未包含该 label 时,会自动新建
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
⏫ [返回列表](#列-表)
@@ -832,10 +857,12 @@ jobs:
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
| exclude-labels | 排除标签筛选 | string | ✖ |
| close-reason | 关闭原因。默认`not_planned`未计划,`completed`完成 | string | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
⏫ [返回列表](#列-表)
@@ -916,6 +943,7 @@ jobs:
- `direction` 默认为升序,只有设置 `desc` 时,会返回降序
- 返回数组中 `created` `updated`,由所处环境决定,会是 UTC +0
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
⏫ [返回列表](#列-表)
@@ -964,6 +992,7 @@ jobs:
- `issue-state`:默认为 `open`。可选值 `all` `closed`,非这 2 项时,均为 `open`
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
⏫ [返回列表](#列-表)
@@ -979,10 +1008,10 @@ on:
types: [created, edited]
jobs:
mark-duplicate:
mark-assignees:
runs-on: ubuntu-latest
steps:
- name: mark-duplicate
- name: mark-assignees
uses: actions-cool/issues-helper@v3
with:
actions: 'mark-assignees'
@@ -1038,6 +1067,7 @@ jobs:
| emoji | 为该评论的增加 [emoji](#emoji-types) | string | ✖ |
| close-issue | 是否同时关闭该 issue | string | ✖ |
| require-permission | 要求权限,默认为 `write` | string | ✖ |
| close-reason | 关闭原因。默认`not_planned`未计划,`completed`完成 | string | ✖ |
- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`。屏蔽内容包含 `?`
- `labels`:优先级最高

View File

@@ -4,9 +4,9 @@
// step3: push 3 files & open a new PR
/**
* @param {string} url github地址
* @param {string} logo logo地址
* @param {string} width 自定义宽度,设置 auto 用于长型 logo
* @param {string} url github repo
* @param {string} logo logo url
* @param {string} width auto use rectangle logo
*/
const users = [
@@ -31,8 +31,8 @@ const users = [
logo: 'https://user-images.githubusercontent.com/29775873/129506134-55044c85-24cd-47d3-81ef-dba842214d71.png'
},
{
url: 'https://github.com/mui-org/material-ui',
logo: 'https://avatars2.githubusercontent.com/u/33663932?s=200&v=4'
url: 'https://github.com/mui/material-ui',
logo: 'https://avatars.githubusercontent.com/u/33663932?s=200&v=4'
},
{
url: 'https://github.com/lijinke666/react-music-player',
@@ -91,6 +91,18 @@ const users = [
url: 'https://github.com/antvis/S2',
logo: 'https://gw.alipayobjects.com/mdn/rms_56cbb2/afts/img/A*TI8XSK3W0EkAAAAAAAAAAAAAARQnAQ',
},
{
url: 'https://github.com/twbs/bootstrap',
logo: 'https://getbootstrap.com/docs/5.1/assets/brand/bootstrap-logo-shadow.png',
},
{
url: 'https://github.com/nolimits4web/swiper',
logo: 'https://user-images.githubusercontent.com/29775873/156721728-3b0021ea-6932-4a77-a104-2e0bad97346e.png',
},
{
url: 'https://github.com/vitest-dev/vitest',
logo: 'https://user-images.githubusercontent.com/11247099/145112184-a9ff6727-661c-439d-9ada-963124a281f7.png',
},
];
// **************************************************************************

View File

@@ -28,6 +28,8 @@ inputs:
description: 'Issue assignees'
random-to:
description: 'Issue assignees random to'
close-reason:
description: 'Issue close reason'
# label
labels:

50
dist/index.js vendored
View File

@@ -14605,6 +14605,7 @@ const dayjs_1 = __importDefault(__nccwpck_require__(7401));
const isSameOrBefore_1 = __importDefault(__nccwpck_require__(9517));
const utc_1 = __importDefault(__nccwpck_require__(4359));
const core = __importStar(__nccwpck_require__(9875));
const shared_1 = __nccwpck_require__(3826);
const util_1 = __nccwpck_require__(9604);
const base_1 = __nccwpck_require__(8824);
let ICE;
@@ -14649,8 +14650,14 @@ function doQueryIssues(state, creator, ignoreLabels) {
*/
if (bodyCheck && titleCheck && issue.pull_request === undefined) {
if (excludeLabelsArr.length) {
for (let i = 0; i < issue.labels.length; i += 1) {
if (excludeLabelsArr.includes(issue.labels[i].name))
if (issue.labels.length) {
for (let i = 0; i < issue.labels.length; i += 1) {
if (excludeLabelsArr.includes(issue.labels[i].name))
return;
}
}
else {
if (excludeLabelsArr.includes(shared_1.EConst.ExcludeEmpty))
return;
}
}
@@ -14753,16 +14760,17 @@ function doCheckIssue() {
const bodyArr = bodyIncludes.split('/');
const keyword1 = (0, actions_util_1.dealStringToArr)(bodyArr[0]);
const keyword2 = (0, actions_util_1.dealStringToArr)(bodyArr[1]);
checkResult = keyword2.length
? (0, util_1.matchKeyword)(issue.body, keyword1) && (0, util_1.matchKeyword)(issue.body, keyword2)
: (0, util_1.matchKeyword)(issue.body, keyword1);
checkResult =
keyword2 && keyword2.length
? (0, util_1.matchKeyword)(issue.body, keyword1) && (0, util_1.matchKeyword)(issue.body, keyword2)
: (0, util_1.matchKeyword)(issue.body, keyword1);
}
core.info(`[doCheckIssue] result is [${checkResult}]`);
core.setOutput('check-result', checkResult);
});
}
exports.doCheckIssue = doCheckIssue;
function doCloseIssues(body, emoji) {
function doCloseIssues(body, closeReason, emoji) {
return __awaiter(this, void 0, void 0, function* () {
const issues = yield doQueryIssues('open');
if (issues.length) {
@@ -14770,7 +14778,7 @@ function doCloseIssues(body, emoji) {
core.info(`[doCloseIssues] Doing ---> ${number}`);
if (body)
yield (0, base_1.doCreateComment)(body, emoji, number);
yield (0, base_1.doCloseIssue)(number);
yield (0, base_1.doCloseIssue)(closeReason, number);
}
}
else {
@@ -14888,7 +14896,7 @@ function doMarkAssignees(comment) {
});
}
exports.doMarkAssignees = doMarkAssignees;
function doMarkDuplicate(comment, labels, emoji) {
function doMarkDuplicate(comment, closeReason, labels, emoji) {
return __awaiter(this, void 0, void 0, function* () {
const duplicateCommand = core.getInput('duplicate-command');
const duplicateLabels = core.getInput('duplicate-labels');
@@ -14926,14 +14934,14 @@ function doMarkDuplicate(comment, labels, emoji) {
if (duplicateLabels) {
newLabels = [...newLabels, ...(0, actions_util_1.dealStringToArr)(duplicateLabels)];
}
if (labels) {
if (labels === null || labels === void 0 ? void 0 : labels.length) {
newLabels = [...labels];
}
if (newLabels.length > 0) {
yield (0, base_1.doSetLabels)(newLabels);
}
if (closeIssue === 'true') {
yield (0, base_1.doCloseIssue)();
yield (0, base_1.doCloseIssue)(closeReason);
}
core.info(`[doMarkDuplicate] Done!`);
}
@@ -15031,11 +15039,11 @@ function doAddLabels(labels, issueNumber) {
});
}
exports.doAddLabels = doAddLabels;
function doCloseIssue(issueNumber) {
function doCloseIssue(reason, issueNumber) {
return __awaiter(this, void 0, void 0, function* () {
if (issueNumber)
ICE.setIssueNumber(issueNumber);
yield ICE.closeIssue();
yield ICE.closeIssue(reason);
core.info(`[doCloseIssue] success!`);
});
}
@@ -15243,6 +15251,7 @@ class IssueHelperEngine {
this.body = '';
this.state = 'open';
this.updateMode = 'replace';
this.closeReason = 'not_planned';
this.initInput(ctx);
this.initIssueCore();
(0, base_1.initBaseICE)(this.ICE);
@@ -15280,6 +15289,7 @@ class IssueHelperEngine {
this.body = core.getInput('body') || '';
this.state = core.getInput('state') === 'closed' ? 'closed' : 'open';
this.updateMode = core.getInput('update-mode') === 'append' ? 'append' : 'replace';
this.closeReason = core.getInput('close-reason') === 'completed' ? 'completed' : 'not_planned';
}
initIssueCore() {
const { owner, repo, issueNumber } = this;
@@ -15294,7 +15304,7 @@ class IssueHelperEngine {
}
doExeAction(action) {
return __awaiter(this, void 0, void 0, function* () {
const { issueNumber, emoji, labels, assignees, title, body, updateMode, state, ctx } = this;
const { issueNumber, emoji, labels, assignees, title, body, updateMode, state, ctx, closeReason, } = this;
switch (action) {
// ---[ Base Begin ]--->>>
case 'add-assignees': {
@@ -15316,7 +15326,7 @@ class IssueHelperEngine {
break;
}
case 'close-issue': {
yield (0, base_1.doCloseIssue)();
yield (0, base_1.doCloseIssue)(closeReason);
break;
}
case 'create-comment': {
@@ -15394,7 +15404,7 @@ class IssueHelperEngine {
break;
}
case 'close-issues': {
yield (0, advanced_1.doCloseIssues)(body, emoji);
yield (0, advanced_1.doCloseIssues)(body, closeReason, emoji);
break;
}
case 'find-comments': {
@@ -15422,7 +15432,7 @@ class IssueHelperEngine {
core.warning(`[mark-duplicate] only support event '[issue_comment: created/edited]'!`);
return;
}
yield (0, advanced_1.doMarkDuplicate)(ctx.payload.comment, labels, emoji);
yield (0, advanced_1.doMarkDuplicate)(ctx.payload.comment, closeReason, labels, emoji);
break;
}
case 'welcome': {
@@ -15563,7 +15573,7 @@ class IssueCoreEngine {
});
});
}
closeIssue() {
closeIssue(reason) {
return __awaiter(this, void 0, void 0, function* () {
const { owner, repo, octokit, issueNumber } = this;
yield octokit.issues.update({
@@ -15571,6 +15581,7 @@ class IssueCoreEngine {
repo,
issue_number: issueNumber,
state: 'closed',
state_reason: reason,
});
});
}
@@ -15900,7 +15911,7 @@ main();
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ELockReasons = exports.EEmoji = void 0;
exports.EConst = exports.ELockReasons = exports.EEmoji = void 0;
exports.EEmoji = {
'+1': '+1',
'-1': '-1',
@@ -15917,6 +15928,9 @@ exports.ELockReasons = {
resolved: 'resolved',
spam: 'spam',
};
exports.EConst = {
ExcludeEmpty: '$exclude-empty',
};
/***/ }),

View File

@@ -6,7 +6,8 @@ import utc from 'dayjs/plugin/utc';
import * as core from '../core';
import type { IIssueCoreEngine, IListIssuesParams, TCommentInfo, TIssueList } from '../issue';
import type { TEmoji, TIssueState, TOutList } from '../types';
import { EConst } from '../shared';
import type { TCloseReason, TEmoji, TIssueState, TOutList } from '../types';
import { checkDuplicate, matchKeyword, replaceStr2Arr } from '../util';
import {
doAddAssignees,
@@ -67,8 +68,12 @@ export async function doQueryIssues(
*/
if (bodyCheck && titleCheck && issue.pull_request === undefined) {
if (excludeLabelsArr.length) {
for (let i = 0; i < issue.labels.length; i += 1) {
if (excludeLabelsArr.includes(issue.labels[i].name)) return;
if (issue.labels.length) {
for (let i = 0; i < issue.labels.length; i += 1) {
if (excludeLabelsArr.includes(issue.labels[i].name)) return;
}
} else {
if (excludeLabelsArr.includes(EConst.ExcludeEmpty)) return;
}
}
@@ -169,22 +174,23 @@ export async function doCheckIssue() {
const bodyArr = bodyIncludes.split('/');
const keyword1 = dealStringToArr(bodyArr[0]);
const keyword2 = dealStringToArr(bodyArr[1]);
checkResult = keyword2.length
? matchKeyword(issue.body, keyword1) && matchKeyword(issue.body, keyword2)
: matchKeyword(issue.body, keyword1);
checkResult =
keyword2 && keyword2.length
? matchKeyword(issue.body, keyword1) && matchKeyword(issue.body, keyword2)
: matchKeyword(issue.body, keyword1);
}
core.info(`[doCheckIssue] result is [${checkResult}]`);
core.setOutput('check-result', checkResult);
}
export async function doCloseIssues(body: string, emoji?: string) {
export async function doCloseIssues(body: string, closeReason: TCloseReason, emoji?: string) {
const issues = await doQueryIssues('open');
if (issues.length) {
for (const { number } of issues) {
core.info(`[doCloseIssues] Doing ---> ${number}`);
if (body) await doCreateComment(body, emoji, number);
await doCloseIssue(number);
await doCloseIssue(closeReason, number);
}
} else {
core.info(`[doCloseIssues] Query issues empty!`);
@@ -292,6 +298,7 @@ export async function doMarkAssignees(comment: TCommentInfo) {
export async function doMarkDuplicate(
comment: TCommentInfo,
closeReason: TCloseReason,
labels?: string[] | void,
emoji?: string,
) {
@@ -337,14 +344,14 @@ export async function doMarkDuplicate(
if (duplicateLabels) {
newLabels = [...newLabels, ...dealStringToArr(duplicateLabels)];
}
if (labels) {
if (labels?.length) {
newLabels = [...labels];
}
if (newLabels.length > 0) {
await doSetLabels(newLabels);
}
if (closeIssue === 'true') {
await doCloseIssue();
await doCloseIssue(closeReason);
}
core.info(`[doMarkDuplicate] Done!`);
} else {

View File

@@ -3,7 +3,7 @@ import { dealStringToArr } from 'actions-util';
import * as core from '../core';
import type { IIssueCoreEngine } from '../issue';
import { ELockReasons } from '../shared';
import type { TEmoji, TIssueState, TLockReasons, TUpdateMode } from '../types';
import type { TCloseReason, TEmoji, TIssueState, TLockReasons, TUpdateMode } from '../types';
let ICE: IIssueCoreEngine;
export function initBaseICE(_ICE: IIssueCoreEngine) {
@@ -21,9 +21,9 @@ export async function doAddLabels(labels: string[], issueNumber?: number) {
core.info(`[doAddLabels] [${labels}] success!`);
}
export async function doCloseIssue(issueNumber?: number) {
export async function doCloseIssue(reason: TCloseReason, issueNumber?: number) {
if (issueNumber) ICE.setIssueNumber(issueNumber);
await ICE.closeIssue();
await ICE.closeIssue(reason);
core.info(`[doCloseIssue] success!`);
}

View File

@@ -3,7 +3,7 @@ import { dealStringToArr } from 'actions-util';
import * as core from '../core';
import type { IIssueCoreEngine, TCommentInfo } from '../issue';
import { IssueCoreEngine } from '../issue';
import type { Context, TAction, TIssueState, TUpdateMode } from '../types';
import type { Context, TAction, TCloseReason, TIssueState, TUpdateMode } from '../types';
import { dealRandomAssignees } from '../util';
import {
doCheckInactive,
@@ -51,6 +51,7 @@ export class IssueHelperEngine implements IIssueHelperEngine {
private body: string = '';
private state: TIssueState = 'open';
private updateMode: TUpdateMode = 'replace';
private closeReason: TCloseReason = 'not_planned';
public constructor(readonly ctx: Context) {
this.initInput(ctx);
@@ -92,6 +93,7 @@ export class IssueHelperEngine implements IIssueHelperEngine {
this.body = core.getInput('body') || '';
this.state = core.getInput('state') === 'closed' ? 'closed' : 'open';
this.updateMode = core.getInput('update-mode') === 'append' ? 'append' : 'replace';
this.closeReason = core.getInput('close-reason') === 'completed' ? 'completed' : 'not_planned';
}
private initIssueCore() {
@@ -107,7 +109,18 @@ export class IssueHelperEngine implements IIssueHelperEngine {
}
public async doExeAction(action: TAction) {
const { issueNumber, emoji, labels, assignees, title, body, updateMode, state, ctx } = this;
const {
issueNumber,
emoji,
labels,
assignees,
title,
body,
updateMode,
state,
ctx,
closeReason,
} = this;
switch (action) {
// ---[ Base Begin ]--->>>
case 'add-assignees': {
@@ -127,7 +140,7 @@ export class IssueHelperEngine implements IIssueHelperEngine {
break;
}
case 'close-issue': {
await doCloseIssue();
await doCloseIssue(closeReason);
break;
}
case 'create-comment': {
@@ -202,7 +215,7 @@ export class IssueHelperEngine implements IIssueHelperEngine {
break;
}
case 'close-issues': {
await doCloseIssues(body, emoji);
await doCloseIssues(body, closeReason, emoji);
break;
}
case 'find-comments': {
@@ -230,7 +243,7 @@ export class IssueHelperEngine implements IIssueHelperEngine {
core.warning(`[mark-duplicate] only support event '[issue_comment: created/edited]'!`);
return;
}
await doMarkDuplicate(ctx.payload.comment as TCommentInfo, labels, emoji);
await doMarkDuplicate(ctx.payload.comment as TCommentInfo, closeReason, labels, emoji);
break;
}
case 'welcome': {

View File

@@ -1,7 +1,14 @@
import { Octokit } from '@octokit/rest';
import { EEmoji } from '../shared';
import type { TEmoji, TIssueState, TLockReasons, TUpdateMode, TUserPermission } from '../types';
import type {
TEmoji,
TIssueState,
TLockReasons,
TUpdateMode,
TUserPermission,
TCloseReason,
} from '../types';
import type {
IIssueBaseInfo,
IIssueCoreEngine,
@@ -53,13 +60,14 @@ export class IssueCoreEngine implements IIssueCoreEngine {
});
}
public async closeIssue() {
public async closeIssue(reason: TCloseReason) {
const { owner, repo, octokit, issueNumber } = this;
await octokit.issues.update({
owner,
repo,
issue_number: issueNumber,
state: 'closed',
state_reason: reason,
});
}

View File

@@ -1,4 +1,11 @@
import type { TEmoji, TIssueState, TLockReasons, TUpdateMode, TUserPermission } from '../types';
import type {
TCloseReason,
TEmoji,
TIssueState,
TLockReasons,
TUpdateMode,
TUserPermission,
} from '../types';
export interface IIssueBaseInfo {
owner: string;
@@ -53,7 +60,7 @@ export interface IIssueCoreEngine {
addAssignees: (assignees: string[]) => Promise<void>;
addLabels: (labels: string[]) => Promise<void>;
closeIssue: () => Promise<void>;
closeIssue: (reason: TCloseReason) => Promise<void>;
/**
* @param body The comment body.
* @returns The create new comment id.

View File

@@ -15,3 +15,7 @@ export const ELockReasons = {
resolved: 'resolved',
spam: 'spam',
};
export const EConst = {
ExcludeEmpty: '$exclude-empty',
};

View File

@@ -12,6 +12,8 @@ export type TUpdateMode = 'append' | 'replace';
export type TUserPermission = TPermissionType;
export type TCloseReason = 'completed' | 'not_planned';
export type TOutInfo = {
auth: string;
id?: number;

View File

@@ -3,7 +3,8 @@ import { defineConfig } from 'dumi';
const name = 'issues-helper';
const logo = 'https://gw.alipayobjects.com/mdn/rms_f97235/afts/img/A*8xDgSL-O6O4AAAAAAAAAAAAAARQnAQ';
const logo =
'https://gw.alipayobjects.com/mdn/rms_f97235/afts/img/A*8xDgSL-O6O4AAAAAAAAAAAAAARQnAQ';
export default defineConfig({
title: 'Issues Helper',

View File

@@ -51,6 +51,7 @@ jobs:
- `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
- `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
## `check-issue`
@@ -134,10 +135,12 @@ jobs:
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
| exclude-labels | Exclude labels filtering | string | ✖ |
| close-reason | Reason for closing. Default `not_planned`, another `completed` | 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
- `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
- `exclude-labels`: When set to include `$exclude-empty`, no label issue can be excluded
## `find-comments`
@@ -213,6 +216,7 @@ Find the current repository, the creator is k , the title contains `this` , the
- `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
## `lock-issues`
@@ -259,6 +263,7 @@ jobs:
- `issue-state`: The default is `all`. Optional value `open` `closed`, when these 2 items are not, both are `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
- `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
- `exclude-labels`: When set to include `$exclude-empty`, no label issue can be excluded
## `mark-assignees`
@@ -272,10 +277,10 @@ on:
types: [created, edited]
jobs:
mark-duplicate:
mark-assignees:
runs-on: ubuntu-latest
steps:
- name: mark-duplicate
- name: mark-assignees
uses: actions-cool/issues-helper@v3
with:
actions: 'mark-assignees'
@@ -329,6 +334,7 @@ jobs:
| emoji | Add [emoji](/en-US/guide/ref#-emoji-type) for this comment | string | ✖ |
| close-issue | Whether to close the issue at the same time | string | ✖ |
| require-permission | Permission required, default is `write` | string | ✖ |
| close-reason | Reason for closing. Default `not_planned`, another `completed` | string | ✖ |
- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`. Block content contains `?`
- `labels`: Highest priority

View File

@@ -51,6 +51,7 @@ jobs:
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
- `inactive-label`:默认为 `inactive`,可自定义其他。当项目未包含该 label 时,会自动新建
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
## `check-issue`
@@ -130,10 +131,12 @@ jobs:
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
| exclude-labels | 排除标签筛选 | string | ✖ |
| close-reason | 关闭原因。默认`not_planned`未计划,`completed`完成 | string | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
## `find-comments`
@@ -210,6 +213,7 @@ jobs:
- `direction` 默认为升序,只有设置 `desc` 时,会返回降序
- 返回数组中 `created` `updated`,由所处环境决定,会是 UTC +0
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
## `lock-issues`
@@ -256,6 +260,7 @@ jobs:
- `issue-state`:默认为 `all`。可选值 `open` `closed`,非这 2 项时,均为 `all`
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
- `exclude-labels`:设置包含 `$exclude-empty` 时,可排除无 label issue
## `mark-assignees`
@@ -269,10 +274,10 @@ on:
types: [created, edited]
jobs:
mark-duplicate:
mark-assignees:
runs-on: ubuntu-latest
steps:
- name: mark-duplicate
- name: mark-assignees
uses: actions-cool/issues-helper@v3
with:
actions: 'mark-assignees'
@@ -326,6 +331,7 @@ jobs:
| emoji | 为该评论的增加 [emoji](/guide/ref#-emoji-类型) | string | ✖ |
| close-issue | 是否同时关闭该 issue | string | ✖ |
| require-permission | 要求权限,默认为 `write` | string | ✖ |
| close-reason | 关闭原因。默认`not_planned`未计划,`completed`完成 | string | ✖ |
- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`。屏蔽内容包含 `?`
- `labels`:优先级最高

View File

@@ -98,6 +98,7 @@ Close the specified issue.
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✖ |
| issue-number | The number of issue. When not input, it will be obtained from the trigger event | number | ✖ |
| close-reason | Reason for closing. Default `not_planned`, another `completed` | string | ✖ |
## `create-comment`

View File

@@ -98,6 +98,7 @@ jobs:
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✖ |
| issue-number | 指定的 issue当不传时会从触发事件中获取 | number | ✖ |
| close-reason | 关闭原因。默认`not_planned`未计划,`completed`完成 | string | ✖ |
## `create-comment`