Compare commits

..

21 Commits

Author SHA1 Message Date
xrkffgg
14e4762bf5 docs: up v2.1.0 2021-02-02 20:38:24 +08:00
xrkffgg
fd3eb6dbd3 feat: add create-label (#54)
* feat: add create-label

* add doc

* format

* add
2021-02-02 20:33:00 +08:00
xrkffgg
561193570f up 2021-02-02 20:32:37 +08:00
xrkffgg
f2288b2a14 add 2021-02-02 20:22:50 +08:00
xrkffgg
4281108d01 format 2021-02-02 20:22:38 +08:00
xrkffgg
1cc6f0b7ca add doc 2021-02-02 20:12:42 +08:00
xrkffgg
f6788d2b8e feat: add create-label 2021-02-02 17:55:54 +08:00
xrkffgg
8acd7991df docs: add token trigger note 2021-02-01 10:03:25 +08:00
xrkffgg
321da097ae Create gh-pages.yml 2021-01-28 15:25:47 +08:00
xrkffgg
13e635fb2c docs: up version faq 2021-01-27 11:25:01 +08:00
xrkffgg
ae8b2ad0bd docs: update version desc 2021-01-27 11:17:46 +08:00
xrkffgg
576d7c4cb8 docs: up version v2 (#52) 2021-01-26 23:17:43 +08:00
xrkffgg
b0e25793f1 refactor: add require-permission default (#51) 2021-01-26 22:59:37 +08:00
xrkffgg
eb91801d3e docs: update changelog 1.12 2021-01-26 22:24:40 +08:00
xrkffgg
616c112b12 feat: add lock-reason (#49)
* feat: add lock-reason

* add dist
2021-01-26 22:17:55 +08:00
xrkffgg
1425c335af refactor: rename allow-permissions (#48)
* refactor: rename allow-permissions

* up
2021-01-26 21:50:10 +08:00
xrkffgg
f777971d6d feat: add allow-permissions (#46)
* feat: add

* up

* up

* add doc
2021-01-26 17:55:42 +08:00
xrkffgg
4c5e1fa83c Update ci.yml 2021-01-26 15:40:09 +08:00
xrkffgg
dcad795964 chore: add prettier (#45)
* chore: add prettier

* add badge

* up
2021-01-26 15:38:25 +08:00
xrkffgg
37632245d8 docs: add users 2021-01-22 15:53:33 +08:00
xrkffgg
9018700e94 docs: add users (#44)
* docs: add users

* fix
2021-01-18 09:54:18 +08:00
35 changed files with 3501 additions and 754 deletions

View File

@@ -11,6 +11,9 @@ jobs:
- name: install - name: install
run: yarn install run: yarn install
- name: format
run: yarn format-check
- name: package - name: package
run: yarn package run: yarn package

17
.github/workflows/gh-pages.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
name: github pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: npm run docs:build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs-dist

5
.prettierignore Normal file
View File

@@ -0,0 +1,5 @@
dist/
lib/
docs-dist/
node_modules/
src/.umi/

6
.prettierrc.js Normal file
View File

@@ -0,0 +1,6 @@
const fabric = require('@umijs/fabric');
module.exports = {
...fabric.prettier,
arrowParens: 'avoid',
};

View File

@@ -1,4 +1,4 @@
export default { export default {
base: '/', base: '/',
publicPath: '/' publicPath: '/',
}; };

View File

@@ -6,10 +6,8 @@ const name = 'issues-helper';
export default defineConfig({ export default defineConfig({
title: 'Issue Helper', title: 'Issue Helper',
mode: 'site', mode: 'site',
favicon: favicon: 'https://avatars1.githubusercontent.com/u/73879334?s=200&v=4',
'https://avatars1.githubusercontent.com/u/73879334?s=200&v=4', logo: 'https://avatars1.githubusercontent.com/u/73879334?s=200&v=4',
logo:
'https://avatars1.githubusercontent.com/u/73879334?s=200&v=4',
exportStatic: {}, exportStatic: {},
ssr: {}, ssr: {},
outputPath: 'docs-dist', outputPath: 'docs-dist',
@@ -38,7 +36,7 @@ export default defineConfig({
{ title: 'Advanced', path: '/en-US/advanced' }, { title: 'Advanced', path: '/en-US/advanced' },
{ title: 'Changelog', path: '/en-US/changelog' }, { title: 'Changelog', path: '/en-US/changelog' },
{ title: 'GitHub', path: 'https://github.com/actions-cool/issues-helper' }, { title: 'GitHub', path: 'https://github.com/actions-cool/issues-helper' },
] ],
}, },
menus: { menus: {
'/guide': [ '/guide': [

View File

@@ -1,3 +1,24 @@
## v2.1.0
`2021.02.02`
- feat: add create-label. [#54](https://github.com/actions-cool/issues-helper/pull/54)
## v2.0.0
`2021.01.26`
- refactor: add require-permission default. [#51](https://github.com/actions-cool/issues-helper/pull/51)
## 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 ## v1.11
`2021.01.14` `2021.01.14`

View File

@@ -5,9 +5,11 @@
[![](https://img.shields.io/github/workflow/status/actions-cool/issues-helper/ci?style=flat-square)](https://github.com/actions-cool/issues-helper/actions) [![](https://img.shields.io/github/workflow/status/actions-cool/issues-helper/ci?style=flat-square)](https://github.com/actions-cool/issues-helper/actions)
[![](https://img.shields.io/badge/marketplace-issues--helper-red?style=flat-square)](https://github.com/marketplace/actions/issues-helper) [![](https://img.shields.io/badge/marketplace-issues--helper-red?style=flat-square)](https://github.com/marketplace/actions/issues-helper)
[![dumi](https://img.shields.io/badge/docs%20by-dumi-blue?style=flat-square)](https://github.com/umijs/dumi) [![dumi](https://img.shields.io/badge/docs%20by-dumi-blue?style=flat-square)](https://github.com/umijs/dumi)
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![](https://img.shields.io/github/v/release/actions-cool/issues-helper?style=flat-square&color=orange)](https://github.com/actions-cool/issues-helper/releases) [![](https://img.shields.io/github/v/release/actions-cool/issues-helper?style=flat-square&color=orange)](https://github.com/actions-cool/issues-helper/releases)
[![](https://img.shields.io/badge/discussions-on%20github-blue?style=flat-square&color=%2308979c)](https://github.com/actions-cool/issues-helper/discussions)
[![](https://img.shields.io/github/stars/actions-cool/issues-helper?style=flat-square)](https://github.com/actions-cool/issues-helper/stargazers) [![](https://img.shields.io/github/stars/actions-cool/issues-helper?style=flat-square)](https://github.com/actions-cool/issues-helper/stargazers)
[![](https://img.shields.io/badge/discussions-on%20github-blue?style=flat-square&color=%2308979c)](https://github.com/actions-cool/issues-helper/discussions)
[![](https://img.shields.io/github/license/actions-cool/issues-helper?style=flat-square)](https://github.com/actions-cool/issues-helper/blob/main/LICENSE) [![](https://img.shields.io/github/license/actions-cool/issues-helper?style=flat-square)](https://github.com/actions-cool/issues-helper/blob/main/LICENSE)
A GitHub Action that easily helps you automatically manage issues A GitHub Action that easily helps you automatically manage issues
@@ -54,6 +56,22 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
<img src="https://avatars2.githubusercontent.com/u/33663932?s=200&v=4" width="46" /> <img src="https://avatars2.githubusercontent.com/u/33663932?s=200&v=4" width="46" />
<div>material-ui</div> <div>material-ui</div>
</a></td> </a></td>
<td align="center" width="180">
<a href="https://github.com/prettier/prettier">
<img src="https://github.com/prettier/prettier-logo/blob/master/images/prettier-icon-light.png?raw=true" width="46" />
<div>prettier</div>
</a></td>
<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" />
<div>pro-components</div>
</a></td>
<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" />
<div>react-component</div>
</a></td>
</tr><tr>
<td align="center" width="180"> <td align="center" width="180">
<a href="https://github.com/lijinke666/react-music-player"> <a href="https://github.com/lijinke666/react-music-player">
<img src="https://github.com/lijinke666/react-music-player/blob/master/assetsImg/logo.png?raw=true" width="46" /> <img src="https://github.com/lijinke666/react-music-player/blob/master/assetsImg/logo.png?raw=true" width="46" />
@@ -69,15 +87,11 @@ Please leave a message at [**here**](https://github.com/actions-cool/issues-help
<img src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png" width="46" /> <img src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png" width="46" />
<div>vue-request</div> <div>vue-request</div>
</a></td> </a></td>
</tr><tr>
<td align="center" width="180"> <td align="center" width="180">
<a href="https://github.com/zoo-js/zoo"> <a href="https://github.com/zoo-js/zoo">
<img src="https://avatars1.githubusercontent.com/u/70757173?s=200&v=4" width="46" /> <img src="https://avatars1.githubusercontent.com/u/70757173?s=200&v=4" width="46" />
<div>zoo</div> <div>zoo</div>
</a></td> </a></td>
<td align="center" width="180"></td>
<td align="center" width="180"></td>
<td align="center" width="180"></td>
</tr> </tr>
</table> </table>
@@ -91,6 +105,7 @@ When the following list does not have the features you want, you can submit it i
- [`close-issue`](#close-issue) - [`close-issue`](#close-issue)
- [`create-comment`](#create-comment) - [`create-comment`](#create-comment)
- [`create-issue`](#create-issue) - [`create-issue`](#create-issue)
- [`create-label`](#create-label)
- [`delete-comment`](#delete-comment) - [`delete-comment`](#delete-comment)
- [`lock-issue`](#lock-issue) - [`lock-issue`](#lock-issue)
- [`mark-duplicate`](#mark-duplicate) - [`mark-duplicate`](#mark-duplicate)
@@ -134,7 +149,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Add assigness - name: Add assigness
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'add-assignees' actions: 'add-assignees'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -176,7 +191,7 @@ jobs:
if: contains(github.event.issue.body, 'xxx') == false if: contains(github.event.issue.body, 'xxx') == false
steps: steps:
- name: Add labels - name: Add labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'add-labels' actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -201,7 +216,7 @@ Close the specified issue.
```yml ```yml
- name: Close issue - name: Close issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'close-issue' actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -234,7 +249,7 @@ jobs:
if: github.event.label.name == 'xxx' if: github.event.label.name == 'xxx'
steps: steps:
- name: Create comment - name: Create comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -278,7 +293,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Create issue - name: Create issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-issue' actions: 'create-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -305,13 +320,41 @@ jobs:
⏫ [Back to list](#List) ⏫ [Back to list](#List)
#### `create-label`
Create label。If you want to create multiple labels base on repository path. [See](https://github.com/actions-cool/create-labels).
```yml
- name: Create label
uses: actions-cool/issues-helper@v2.1.0
with:
actions: 'create-label'
token: ${{ secrets.GITHUB_TOKEN }}
label-name: 'xx'
label-color: '0095b3'
label-desc: 'xx'
```
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| label-name | Label name, emoji support | string | ✔ |
| label-color | Label color, the format is hexadecimal color code, without `#` | string | ✖ |
| label-desc | Label description | string | ✖ |
- `label-name`: If it already exists, no operation
- `label-color`: Default is `ededed`
⏫ [Back to list](#List)
#### `delete-comment` #### `delete-comment`
According to [`comment-id`](#comment-id) delete the specified comment. According to [`comment-id`](#comment-id) delete the specified comment.
```yml ```yml
- name: Delete comment - name: Delete comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'delete-comment' actions: 'delete-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -343,7 +386,7 @@ jobs:
if: github.event.label.name == 'invalid' if: github.event.label.name == 'invalid'
steps: steps:
- name: Lock issue - name: Lock issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'lock-issue' actions: 'lock-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -355,6 +398,9 @@ jobs:
| actions | Action type | string | ✔ | | actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ | | token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ | | 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) ⏫ [Back to list](#List)
@@ -374,7 +420,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: mark-duplicate - name: mark-duplicate
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'mark-duplicate' actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -390,10 +436,16 @@ jobs:
| labels | Replace the labels of the issue | string | ✖ | | labels | Replace the labels of the issue | string | ✖ |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ | | contents | Add [reaction](#reactions-types) for this comment | string | ✖ |
| close-issue | Whether to close the issue at the same time | string | ✖ | | close-issue | Whether to close the issue at the same time | string | ✖ |
| require-permission | Permission required, default is `write` | string | ✖ |
- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`. Block content contains `?` - `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`. Block content contains `?`
- `labels`: Highest priority - `labels`: Highest priority
- `close-issue`: Both `true` or `'true'` can take effect - `close-issue`: Both `true` or `'true'` can take effect
- `require-permission`: 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) ⏫ [Back to list](#List)
@@ -403,7 +455,7 @@ Open the specified issue.
```yml ```yml
- name: Open issue - name: Open issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'open-issue' actions: 'open-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -424,7 +476,7 @@ Remove the person designated by issue.
```yml ```yml
- name: Remove assignees - name: Remove assignees
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'remove-assignees' actions: 'remove-assignees'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -447,7 +499,7 @@ Remove the specified labels.
```yml ```yml
- name: Remove labels - name: Remove labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'remove-labels' actions: 'remove-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -472,7 +524,7 @@ Replace the labels of issue.
```yml ```yml
- name: Set labels - name: Set labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'set-labels' actions: 'set-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -495,7 +547,7 @@ Unlock the specified issue.
```yml ```yml
- name: Unlock issue - name: Unlock issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'unlock-issue' actions: 'unlock-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -528,7 +580,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Update comment - name: Update comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-comment' actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -556,7 +608,7 @@ Update the specified issue according to the `issue-number`.
```yml ```yml
- name: Update issue - name: Update issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-issue' actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -606,7 +658,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: welcome - name: welcome
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'welcome' actions: 'welcome'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -649,7 +701,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check-inactive - name: check-inactive
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'check-inactive' actions: 'check-inactive'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -702,7 +754,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check-issue - name: check-issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'check-issue' actions: 'check-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -741,7 +793,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: close-issues - name: close-issues
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'close-issues' actions: 'close-issues'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -775,7 +827,7 @@ Find the current warehouse issue No. 1, the creator is k and the content contain
```yml ```yml
- name: Find comments - name: Find comments
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'find-comments' actions: 'find-comments'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -823,7 +875,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: lock-issues - name: lock-issues
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'lock-issues' actions: 'lock-issues'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -845,6 +897,7 @@ jobs:
| body-includes | Body filtering | string | ✖ | | body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ | | title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ | | 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 - `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` - `issue-state`: The default is `all`. Optional value `open` `closed`, when these 2 items are not, both are `all`
@@ -869,7 +922,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: month-statistics - name: month-statistics
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'month-statistics' actions: 'month-statistics'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -912,7 +965,7 @@ jobs:
if: github.event.label.name == 'watch' if: github.event.label.name == 'watch'
steps: steps:
- name: find comments - name: find comments
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
id: fcid id: fcid
with: with:
actions: 'find-comments' actions: 'find-comments'
@@ -923,7 +976,7 @@ jobs:
- name: create comment - name: create comment
if: ${{ steps.fcid.outputs.comments.length == 0 }} if: ${{ steps.fcid.outputs.comments.length == 0 }}
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -932,7 +985,7 @@ jobs:
- name: update comment - name: update comment
if: ${{ steps.fcid.outputs.comments.length == 1 }} if: ${{ steps.fcid.outputs.comments.length == 1 }}
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-comment' actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -964,7 +1017,7 @@ When the token is not filled in actions or the corresponding secrets are not add
```yml ```yml
- name: Create issue - name: Create issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
id: createissue id: createissue
with: with:
actions: 'create-issue' actions: 'create-issue'
@@ -1039,6 +1092,7 @@ Click the `···` icon in the upper right corner of a comment, select `Copy lin
- v1 represents the initial version - v1 represents the initial version
- The fixes and additions to the v1 version will be released to the v1.1 version - The fixes and additions to the v1 version will be released to the v1.1 version
- When the released v1.x runs stable for a certain period of time or undergoes refactoring, release the advanced v2 version - When the released v1.x runs stable for a certain period of time or undergoes refactoring, release the advanced v2 version
- After the v2 version, the version will be released strictly according to the three-level semantics, such as v2.0.0, v2.1.0
- Version selection - Version selection
- It is recommended to use the latest releases version. It can be seen in [releases](https://github.com/actions-cool/issues-helper/releases) - It is recommended to use the latest releases version. It can be seen in [releases](https://github.com/actions-cool/issues-helper/releases)

116
README.md
View File

@@ -5,9 +5,11 @@
[![](https://img.shields.io/github/workflow/status/actions-cool/issues-helper/ci?style=flat-square)](https://github.com/actions-cool/issues-helper/actions) [![](https://img.shields.io/github/workflow/status/actions-cool/issues-helper/ci?style=flat-square)](https://github.com/actions-cool/issues-helper/actions)
[![](https://img.shields.io/badge/marketplace-issues--helper-red?style=flat-square)](https://github.com/marketplace/actions/issues-helper) [![](https://img.shields.io/badge/marketplace-issues--helper-red?style=flat-square)](https://github.com/marketplace/actions/issues-helper)
[![dumi](https://img.shields.io/badge/docs%20by-dumi-blue?style=flat-square)](https://github.com/umijs/dumi) [![dumi](https://img.shields.io/badge/docs%20by-dumi-blue?style=flat-square)](https://github.com/umijs/dumi)
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![](https://img.shields.io/github/v/release/actions-cool/issues-helper?style=flat-square&color=orange)](https://github.com/actions-cool/issues-helper/releases) [![](https://img.shields.io/github/v/release/actions-cool/issues-helper?style=flat-square&color=orange)](https://github.com/actions-cool/issues-helper/releases)
[![](https://img.shields.io/badge/discussions-on%20github-blue?style=flat-square&color=%2308979c)](https://github.com/actions-cool/issues-helper/discussions)
[![](https://img.shields.io/github/stars/actions-cool/issues-helper?style=flat-square)](https://github.com/actions-cool/issues-helper/stargazers) [![](https://img.shields.io/github/stars/actions-cool/issues-helper?style=flat-square)](https://github.com/actions-cool/issues-helper/stargazers)
[![](https://img.shields.io/badge/discussions-on%20github-blue?style=flat-square&color=%2308979c)](https://github.com/actions-cool/issues-helper/discussions)
[![](https://img.shields.io/github/license/actions-cool/issues-helper?style=flat-square)](https://github.com/actions-cool/issues-helper/blob/main/LICENSE) [![](https://img.shields.io/github/license/actions-cool/issues-helper?style=flat-square)](https://github.com/actions-cool/issues-helper/blob/main/LICENSE)
一个轻松帮你自动管理 issues 的 GitHub Action 一个轻松帮你自动管理 issues 的 GitHub Action
@@ -54,6 +56,22 @@
<img src="https://avatars2.githubusercontent.com/u/33663932?s=200&v=4" width="46" /> <img src="https://avatars2.githubusercontent.com/u/33663932?s=200&v=4" width="46" />
<div>material-ui</div> <div>material-ui</div>
</a></td> </a></td>
<td align="center" width="180">
<a href="https://github.com/prettier/prettier">
<img src="https://github.com/prettier/prettier-logo/blob/master/images/prettier-icon-light.png?raw=true" width="46" />
<div>prettier</div>
</a></td>
<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" />
<div>pro-components</div>
</a></td>
<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" />
<div>react-component</div>
</a></td>
</tr><tr>
<td align="center" width="180"> <td align="center" width="180">
<a href="https://github.com/lijinke666/react-music-player"> <a href="https://github.com/lijinke666/react-music-player">
<img src="https://github.com/lijinke666/react-music-player/blob/master/assetsImg/logo.png?raw=true" width="46" /> <img src="https://github.com/lijinke666/react-music-player/blob/master/assetsImg/logo.png?raw=true" width="46" />
@@ -69,15 +87,11 @@
<img src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png" width="46" /> <img src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png" width="46" />
<div>vue-request</div> <div>vue-request</div>
</a></td> </a></td>
</tr><tr>
<td align="center" width="180"> <td align="center" width="180">
<a href="https://github.com/zoo-js/zoo"> <a href="https://github.com/zoo-js/zoo">
<img src="https://avatars1.githubusercontent.com/u/70757173?s=200&v=4" width="46" /> <img src="https://avatars1.githubusercontent.com/u/70757173?s=200&v=4" width="46" />
<div>zoo</div> <div>zoo</div>
</a></td> </a></td>
<td align="center" width="180"></td>
<td align="center" width="180"></td>
<td align="center" width="180"></td>
</tr> </tr>
</table> </table>
@@ -91,6 +105,7 @@
- [`close-issue`](#close-issue) - [`close-issue`](#close-issue)
- [`create-comment`](#create-comment) - [`create-comment`](#create-comment)
- [`create-issue`](#create-issue) - [`create-issue`](#create-issue)
- [`create-label`](#create-label)
- [`delete-comment`](#delete-comment) - [`delete-comment`](#delete-comment)
- [`lock-issue`](#lock-issue) - [`lock-issue`](#lock-issue)
- [`mark-duplicate`](#mark-duplicate) - [`mark-duplicate`](#mark-duplicate)
@@ -134,7 +149,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Add assigness - name: Add assigness
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'add-assignees' actions: 'add-assignees'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -176,7 +191,7 @@ jobs:
if: contains(github.event.issue.body, 'xxx') == false if: contains(github.event.issue.body, 'xxx') == false
steps: steps:
- name: Add labels - name: Add labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'add-labels' actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -201,7 +216,7 @@ jobs:
```yml ```yml
- name: Close issue - name: Close issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'close-issue' actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -234,7 +249,7 @@ jobs:
if: github.event.label.name == 'xxx' if: github.event.label.name == 'xxx'
steps: steps:
- name: Create comment - name: Create comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -278,7 +293,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Create issue - name: Create issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-issue' actions: 'create-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -305,13 +320,41 @@ jobs:
⏫ [返回列表](#列-表) ⏫ [返回列表](#列-表)
#### `create-label`
新增 label。若想根据目录生成多个 labels[可查看](https://github.com/actions-cool/create-labels)。
```yml
- name: Create label
uses: actions-cool/issues-helper@v2.1.0
with:
actions: 'create-label'
token: ${{ secrets.GITHUB_TOKEN }}
label-name: 'xx'
label-color: '0095b3'
label-desc: 'xx'
```
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| label-name | 标签名称,支持 emoji | string | ✔ |
| label-color | 标签颜色,格式为 16 进制色码,不加 `#` | string | ✖ |
| label-desc | 标签描述 | string | ✖ |
- `label-name`:若已存在,则无操作
- `label-color`:默认为 `ededed`
⏫ [返回列表](#列-表)
#### `delete-comment` #### `delete-comment`
根据 [`comment-id`](#comment-id) 删除指定评论。 根据 [`comment-id`](#comment-id) 删除指定评论。
```yml ```yml
- name: Delete comment - name: Delete comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'delete-comment' actions: 'delete-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -343,7 +386,7 @@ jobs:
if: github.event.label.name == 'invalid' if: github.event.label.name == 'invalid'
steps: steps:
- name: Lock issue - name: Lock issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'lock-issue' actions: 'lock-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -355,6 +398,9 @@ jobs:
| actions | 操作类型 | string | ✔ | | actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ | | token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ | | issue-number | 指定的 issue | number | ✔ |
| lock-reason | 锁定 issue 的原因 | string | ✖ |
- `lock-reason`:可选值有 `off-topic` `too heated` `resolved` `spam`
⏫ [返回列表](#列-表) ⏫ [返回列表](#列-表)
@@ -374,7 +420,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: mark-duplicate - name: mark-duplicate
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'mark-duplicate' actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -390,10 +436,16 @@ jobs:
| labels | 替换该 issue 的 labels | string | ✖ | | labels | 替换该 issue 的 labels | string | ✖ |
| contents | 为该评论的增加 [reaction](#reactions-types) | string | ✖ | | contents | 为该评论的增加 [reaction](#reactions-types) | string | ✖ |
| close-issue | 是否同时关闭该 issue | string | ✖ | | close-issue | 是否同时关闭该 issue | string | ✖ |
| require-permission | 要求权限,默认为 `write` | string | ✖ |
- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`。屏蔽内容包含 `?` - `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`。屏蔽内容包含 `?`
- `labels`:优先级最高 - `labels`:优先级最高
- `close-issue``true``'true'` 均可生效 - `close-issue``true``'true'` 均可生效
- `require-permission`:可选值有 `admin``write``read``none`
- 团队成员若设置 `read` 权限,则为 `read`
- 外部 Collaborator 若设置 `read` 权限,则为 `read`
- 普通用户为 `read` 权限
- 当设置 `write` 后,`admin``write` 满足条件
⏫ [返回列表](#列-表) ⏫ [返回列表](#列-表)
@@ -403,7 +455,7 @@ jobs:
```yml ```yml
- name: Open issue - name: Open issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'open-issue' actions: 'open-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -424,7 +476,7 @@ jobs:
```yml ```yml
- name: Remove assignees - name: Remove assignees
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'remove-assignees' actions: 'remove-assignees'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -447,7 +499,7 @@ jobs:
```yml ```yml
- name: Remove labels - name: Remove labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'remove-labels' actions: 'remove-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -472,7 +524,7 @@ jobs:
```yml ```yml
- name: Set labels - name: Set labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'set-labels' actions: 'set-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -495,7 +547,7 @@ jobs:
```yml ```yml
- name: Unlock issue - name: Unlock issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'unlock-issue' actions: 'unlock-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -528,7 +580,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Update comment - name: Update comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-comment' actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -556,7 +608,7 @@ jobs:
```yml ```yml
- name: Update issue - name: Update issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-issue' actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -604,7 +656,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: welcome - name: welcome
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'welcome' actions: 'welcome'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -647,7 +699,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check-inactive - name: check-inactive
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'check-inactive' actions: 'check-inactive'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -696,7 +748,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check-issue - name: check-issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'check-issue' actions: 'check-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -735,7 +787,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: close-issues - name: close-issues
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'close-issues' actions: 'close-issues'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -769,7 +821,7 @@ jobs:
```yml ```yml
- name: Find comments - name: Find comments
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'find-comments' actions: 'find-comments'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -817,7 +869,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: lock-issues - name: lock-issues
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'lock-issues' actions: 'lock-issues'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -839,6 +891,7 @@ jobs:
| body-includes | 包含内容筛选 | string | ✖ | | body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ | | title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ | | inactive-day | 非活跃天数筛选 | number | ✖ |
| lock-reason | 锁定 issue 的原因 | string | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有 - `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-state`:默认为 `open`。可选值 `all` `closed`,非这 2 项时,均为 `open` - `issue-state`:默认为 `open`。可选值 `all` `closed`,非这 2 项时,均为 `open`
@@ -863,7 +916,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: month-statistics - name: month-statistics
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'month-statistics' actions: 'month-statistics'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -906,7 +959,7 @@ jobs:
if: github.event.label.name == 'watch' if: github.event.label.name == 'watch'
steps: steps:
- name: find comments - name: find comments
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
id: fcid id: fcid
with: with:
actions: 'find-comments' actions: 'find-comments'
@@ -917,7 +970,7 @@ jobs:
- name: create comment - name: create comment
if: ${{ steps.fcid.outputs.comments.length == 0 }} if: ${{ steps.fcid.outputs.comments.length == 0 }}
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -926,7 +979,7 @@ jobs:
- name: update comment - name: update comment
if: ${{ steps.fcid.outputs.comments.length == 1 }} if: ${{ steps.fcid.outputs.comments.length == 1 }}
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-comment' actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -958,7 +1011,7 @@ jobs:
```yml ```yml
- name: Create issue - name: Create issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
id: createissue id: createissue
with: with:
actions: 'create-issue' actions: 'create-issue'
@@ -1034,6 +1087,7 @@ x2 + y2
- v1 表示初始版本 - v1 表示初始版本
- 对 v1 版本的修复和新增会发布到 v1.1 版本 - 对 v1 版本的修复和新增会发布到 v1.1 版本
- 当发布的 v1.x 运行一定时间稳定或进行重构时,发布进阶 v2 版本 - 当发布的 v1.x 运行一定时间稳定或进行重构时,发布进阶 v2 版本
- v2 版本后会严格按照三级语义来发布版本,如 v2.0.0、v2.1.0
- 版本选择 - 版本选择
- 建议采用最新 releases 版本。可在 [releases](https://github.com/actions-cool/issues-helper/releases) 看到 - 建议采用最新 releases 版本。可在 [releases](https://github.com/actions-cool/issues-helper/releases) 看到

View File

@@ -37,6 +37,18 @@ const users = [
url: 'https://github.com/zoo-js/zoo', url: 'https://github.com/zoo-js/zoo',
logo: 'https://avatars1.githubusercontent.com/u/70757173?s=200&v=4' logo: 'https://avatars1.githubusercontent.com/u/70757173?s=200&v=4'
}, },
{
url: 'https://github.com/react-component',
logo: 'https://avatars3.githubusercontent.com/u/9441414?s=200&v=4'
},
{
url: 'https://github.com/ant-design/pro-components',
logo: 'https://avatars1.githubusercontent.com/u/12101536?s=200&v=4'
},
{
url: 'https://github.com/prettier/prettier',
logo: 'https://github.com/prettier/prettier-logo/blob/master/images/prettier-icon-light.png?raw=true'
},
]; ];
// ************************************************************************** // **************************************************************************

View File

@@ -22,8 +22,16 @@ inputs:
description: 'Issue assignees' description: 'Issue assignees'
random-to: random-to:
description: 'Issue assignees random to' description: 'Issue assignees random to'
# label
labels: labels:
description: 'Issue labels' description: 'Issue labels'
label-name:
description: 'Create label name'
label-color:
description: 'Create label color, default #ededed'
label-desc:
description: 'Create label description'
state: state:
description: 'Issue state' description: 'Issue state'
update-mode: update-mode:
@@ -52,12 +60,16 @@ inputs:
description: 'Query use' description: 'Query use'
inactive-day: inactive-day:
description: 'Query use' description: 'Query use'
lock-reason:
description: 'The reason lock issue'
inactive-label: inactive-label:
description: 'Issue label set use' description: 'Issue label set use'
duplicate-command: duplicate-command:
description: 'For mark-duplicate' description: 'For mark-duplicate'
duplicate-labels: duplicate-labels:
description: 'For mark-duplicate add labels' description: 'For mark-duplicate add labels'
require-permission:
description: 'Only the allow can do. Possible admin, write, read, and none.'
remove-labels: remove-labels:
description: 'For remove labels' description: 'For remove labels'
close-issue: close-issue:

531
dist/index.js vendored

File diff suppressed because it is too large Load Diff

View File

@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check-inactive - name: check-inactive
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'check-inactive' actions: 'check-inactive'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -73,7 +73,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check-issue - name: check-issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'check-issue' actions: 'check-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -110,7 +110,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: close-issues - name: close-issues
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'close-issues' actions: 'close-issues'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -142,7 +142,7 @@ Find the current warehouse issue No. 1, the creator is k and the content contain
```yml ```yml
- name: Find comments - name: Find comments
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'find-comments' actions: 'find-comments'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -188,7 +188,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: lock-issues - name: lock-issues
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'lock-issues' actions: 'lock-issues'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -210,6 +210,7 @@ jobs:
| body-includes | Body filtering | string | ✖ | | body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ | | title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ | | 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 - `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` - `issue-state`: The default is `all`. Optional value `open` `closed`, when these 2 items are not, both are `all`
@@ -232,7 +233,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: month-statistics - name: month-statistics
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'month-statistics' actions: 'month-statistics'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check-inactive - name: check-inactive
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'check-inactive' actions: 'check-inactive'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -69,7 +69,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: check-issue - name: check-issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'check-issue' actions: 'check-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -106,7 +106,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: close-issues - name: close-issues
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'close-issues' actions: 'close-issues'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -138,7 +138,7 @@ jobs:
```yml ```yml
- name: Find comments - name: Find comments
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'find-comments' actions: 'find-comments'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -184,7 +184,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: lock-issues - name: lock-issues
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'lock-issues' actions: 'lock-issues'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -206,6 +206,7 @@ jobs:
| body-includes | 包含内容筛选 | string | ✖ | | body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ | | title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ | | inactive-day | 非活跃天数筛选 | number | ✖ |
| lock-reason | 锁定 issue 的原因 | string | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有 - `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-state`:默认为 `all`。可选值 `open` `closed`,非这 2 项时,均为 `all` - `issue-state`:默认为 `all`。可选值 `open` `closed`,非这 2 项时,均为 `all`
@@ -228,7 +229,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: month-statistics - name: month-statistics
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'month-statistics' actions: 'month-statistics'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Add assigness - name: Add assigness
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'add-assignees' actions: 'add-assignees'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -62,7 +62,7 @@ jobs:
if: contains(github.event.issue.body, 'xxx') == false if: contains(github.event.issue.body, 'xxx') == false
steps: steps:
- name: Add labels - name: Add labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'add-labels' actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -85,7 +85,7 @@ Close the specified issue.
```yml ```yml
- name: Close issue - name: Close issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'close-issue' actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -116,7 +116,7 @@ jobs:
if: github.event.label.name == 'xxx' if: github.event.label.name == 'xxx'
steps: steps:
- name: Create comment - name: Create comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -158,7 +158,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Create issue - name: Create issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-issue' actions: 'create-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -183,13 +183,39 @@ jobs:
- `title` default is `Default Title` - `title` default is `Default Title`
- Return `issue-number`. [Usage reference](/en-US/guide/ref#-outputs-use) - Return `issue-number`. [Usage reference](/en-US/guide/ref#-outputs-use)
## `create-label`
Create label。If you want to create multiple labels base on repository path. [See](https://github.com/actions-cool/create-labels).
```yml
- name: Create label
uses: actions-cool/issues-helper@v2.1.0
with:
actions: 'create-label'
token: ${{ secrets.GITHUB_TOKEN }}
label-name: 'xx'
label-color: '0095b3'
label-desc: 'xx'
```
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| label-name | Label name, emoji support | string | ✔ |
| label-color | Label color, the format is hexadecimal color code, without `#` | string | ✖ |
| label-desc | Label description | string | ✖ |
- `label-name`: If it already exists, no operation
- `label-color`: Default is `ededed`
## `delete-comment` ## `delete-comment`
According to [`comment-id`](/en-US/guide/ref#-comment-id) delete the specified comment. According to [`comment-id`](/en-US/guide/ref#-comment-id) delete the specified comment.
```yml ```yml
- name: Delete comment - name: Delete comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'delete-comment' actions: 'delete-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -219,7 +245,7 @@ jobs:
if: github.event.label.name == 'invalid' if: github.event.label.name == 'invalid'
steps: steps:
- name: Lock issue - name: Lock issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'lock-issue' actions: 'lock-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -231,6 +257,9 @@ jobs:
| actions | Action type | string | ✔ | | actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | | token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ | | 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` ## `mark-duplicate`
@@ -248,7 +277,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: mark-duplicate - name: mark-duplicate
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'mark-duplicate' actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -264,10 +293,16 @@ jobs:
| labels | Replace the labels of the issue | string | ✖ | | labels | Replace the labels of the issue | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | 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 | ✖ | | close-issue | Whether to close the issue at the same time | string | ✖ |
| require-permission | Permission required, default is `write` | string | ✖ |
- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`. Block content contains `?` - `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`. Block content contains `?`
- `labels`: Highest priority - `labels`: Highest priority
- `close-issue`: Both `true` or `'true'` can take effect - `close-issue`: Both `true` or `'true'` can take effect
- `require-permission`: 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> <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. 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.
@@ -281,7 +316,7 @@ Open the specified issue.
```yml ```yml
- name: Open issue - name: Open issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'open-issue' actions: 'open-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -300,7 +335,7 @@ Remove the person designated by issue.
```yml ```yml
- name: Remove assignees - name: Remove assignees
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'remove-assignees' actions: 'remove-assignees'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -321,7 +356,7 @@ Remove the specified labels.
```yml ```yml
- name: Remove labels - name: Remove labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'remove-labels' actions: 'remove-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -344,7 +379,7 @@ Replace the labels of issue.
```yml ```yml
- name: Set labels - name: Set labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'set-labels' actions: 'set-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -365,7 +400,7 @@ Unlock the specified issue.
```yml ```yml
- name: Unlock issue - name: Unlock issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'unlock-issue' actions: 'unlock-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -396,7 +431,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Update comment - name: Update comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-comment' actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -422,7 +457,7 @@ Update the specified issue according to the `issue-number`.
```yml ```yml
- name: Update issue - name: Update issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-issue' actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -470,7 +505,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: welcome - name: welcome
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'welcome' actions: 'welcome'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Add assigness - name: Add assigness
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'add-assignees' actions: 'add-assignees'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -62,7 +62,7 @@ jobs:
if: contains(github.event.issue.body, 'xxx') == false if: contains(github.event.issue.body, 'xxx') == false
steps: steps:
- name: Add labels - name: Add labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'add-labels' actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -85,7 +85,7 @@ jobs:
```yml ```yml
- name: Close issue - name: Close issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'close-issue' actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -116,7 +116,7 @@ jobs:
if: github.event.label.name == 'xxx' if: github.event.label.name == 'xxx'
steps: steps:
- name: Create comment - name: Create comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -158,7 +158,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Create issue - name: Create issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-issue' actions: 'create-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -183,13 +183,39 @@ jobs:
- `title` 默认为:`Default Title` - `title` 默认为:`Default Title`
- 返回 `issue-number`[用法参考](/guide/ref#-outputs-使用) - 返回 `issue-number`[用法参考](/guide/ref#-outputs-使用)
## `create-label`
新增 label。若想根据目录生成多个 labels[可查看](https://github.com/actions-cool/create-labels)。
```yml
- name: Create label
uses: actions-cool/issues-helper@v2.1.0
with:
actions: 'create-label'
token: ${{ secrets.GITHUB_TOKEN }}
label-name: 'xx'
label-color: '0095b3'
label-desc: 'xx'
```
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| label-name | 标签名称,支持 emoji | string | ✔ |
| label-color | 标签颜色,格式为 16 进制色码,不加 `#` | string | ✖ |
| label-desc | 标签描述 | string | ✖ |
- `label-name`:若已存在,则无操作
- `label-color`:默认为 `ededed`
## `delete-comment` ## `delete-comment`
根据 [`comment-id`](/guide/ref#-comment-id) 删除指定评论。 根据 [`comment-id`](/guide/ref#-comment-id) 删除指定评论。
```yml ```yml
- name: Delete comment - name: Delete comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'delete-comment' actions: 'delete-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -219,7 +245,7 @@ jobs:
if: github.event.label.name == 'invalid' if: github.event.label.name == 'invalid'
steps: steps:
- name: Lock issue - name: Lock issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'lock-issue' actions: 'lock-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -231,6 +257,9 @@ jobs:
| actions | 操作类型 | string | ✔ | | actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | | token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ | | issue-number | 指定的 issue | number | ✔ |
| lock-reason | 锁定 issue 的原因 | string | ✖ |
- `lock-reason`:可选值有 `off-topic` `too heated` `resolved` `spam`
## `mark-duplicate` ## `mark-duplicate`
@@ -248,7 +277,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: mark-duplicate - name: mark-duplicate
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'mark-duplicate' actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -264,10 +293,16 @@ jobs:
| labels | 替换该 issue 的 labels | string | ✖ | | labels | 替换该 issue 的 labels | string | ✖ |
| contents | 为该评论的增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | | contents | 为该评论的增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
| close-issue | 是否同时关闭该 issue | string | ✖ | | close-issue | 是否同时关闭该 issue | string | ✖ |
| require-permission | 要求权限,默认为 `write` | string | ✖ |
- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`。屏蔽内容包含 `?` - `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`。屏蔽内容包含 `?`
- `labels`:优先级最高 - `labels`:优先级最高
- `close-issue``true``'true'` 均可生效 - `close-issue``true``'true'` 均可生效
- `require-permission`:可选值有 `admin``write``read``none`
- 团队成员若设置 `read` 权限,则为 `read`
- 外部 Collaborator 若设置 `read` 权限,则为 `read`
- 普通用户为 `read` 权限
- 当设置 `write` 后,`admin``write` 满足条件
<Alert> <Alert>
注意:使用简洁命令创建的 Duplicate 不显示下图红框内容。但其实这个没有任何影响的。 注意:使用简洁命令创建的 Duplicate 不显示下图红框内容。但其实这个没有任何影响的。
@@ -281,7 +316,7 @@ jobs:
```yml ```yml
- name: Open issue - name: Open issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'open-issue' actions: 'open-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -300,7 +335,7 @@ jobs:
```yml ```yml
- name: Remove assignees - name: Remove assignees
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'remove-assignees' actions: 'remove-assignees'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -321,7 +356,7 @@ jobs:
```yml ```yml
- name: Remove labels - name: Remove labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'remove-labels' actions: 'remove-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -344,7 +379,7 @@ jobs:
```yml ```yml
- name: Set labels - name: Set labels
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'set-labels' actions: 'set-labels'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -365,7 +400,7 @@ jobs:
```yml ```yml
- name: Unlock issue - name: Unlock issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'unlock-issue' actions: 'unlock-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -396,7 +431,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Update comment - name: Update comment
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-comment' actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -422,7 +457,7 @@ jobs:
```yml ```yml
- name: Update issue - name: Update issue
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'update-issue' actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -469,7 +504,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: welcome - name: welcome
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'welcome' actions: 'welcome'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -9,6 +9,7 @@ toc: menu
- v1 represents the initial version - v1 represents the initial version
- The fixes and additions to the v1 version will be released to the v1.1 version - The fixes and additions to the v1 version will be released to the v1.1 version
- When the released v1.x runs stable for a certain period of time or undergoes refactoring, release the advanced v2 version - When the released v1.x runs stable for a certain period of time or undergoes refactoring, release the advanced v2 version
- After the v2 version, the version will be released strictly according to the three-level semantics, such as v2.0.0, v2.1.0
- Version selection - Version selection
- It is recommended to use the latest releases version. It can be seen in [releases](https://github.com/actions-cool/issues-helper/releases) - It is recommended to use the latest releases version. It can be seen in [releases](https://github.com/actions-cool/issues-helper/releases)

View File

@@ -9,6 +9,7 @@ toc: menu
- v1 表示初始版本 - v1 表示初始版本
- 对 v1 版本的修复和新增会发布到 v1.1 版本 - 对 v1 版本的修复和新增会发布到 v1.1 版本
- 当发布的 v1.x 运行一定时间稳定或进行重构时,发布进阶 v2 版本 - 当发布的 v1.x 运行一定时间稳定或进行重构时,发布进阶 v2 版本
- v2 版本后会严格按照三级语义来发布版本,如 v2.0.0、v2.1.0
- 版本选择 - 版本选择
- 建议采用最新 releases 版本。可在 [releases](https://github.com/actions-cool/issues-helper/releases) 看到 - 建议采用最新 releases 版本。可在 [releases](https://github.com/actions-cool/issues-helper/releases) 看到

View File

@@ -22,6 +22,10 @@ Yes, you can directly modify `actions`. For example: `actions:'create-comment'`
You can view the detailed [changelog](/en-US/changelog). The latest releases version is recommended. You can view the detailed [changelog](/en-US/changelog). The latest releases version is recommended.
## What should I pay attention to when upgrading from v1.x to v2?
There is only one difference between v1.12 and v2.0.0. That is, `require-permission` in `mark-duplicate` has added the default value `write`.
## What should I do if there is no function I want here? ## What should I do if there is no function I want here?
You can submit it in [What do you want?](https://github.com/actions-cool/issues-helper/discussions/18). You can submit it in [What do you want?](https://github.com/actions-cool/issues-helper/discussions/18).

View File

@@ -22,6 +22,10 @@ GitHub Actions 是由 GitHub 免费提供的。其中 `Private` 项目每月有
你可以查看详细的 [更新日志](/changelog)。推荐采用最新 releases 版本。 你可以查看详细的 [更新日志](/changelog)。推荐采用最新 releases 版本。
## 从 v1.x 升级到 v2有什么注意的地方吗
v1.12 和 v2.0.0 版本的差别只有一处。即 `mark-duplicate` 中的 `require-permission` 增加了默认值 `write`
## 如果这里没有我想要的功能,该怎么办? ## 如果这里没有我想要的功能,该怎么办?
你可以在 [What do you want?](https://github.com/actions-cool/issues-helper/discussions/18) 中提出。 你可以在 [What do you want?](https://github.com/actions-cool/issues-helper/discussions/18) 中提出。

View File

@@ -38,6 +38,8 @@ When an action is set, such as adding a label `x1` to an issue, Actions will aut
But if this is done by `GitHub Actions bot` (that is, the token in the actions is not passed, or the default `token: ${{ secrets.GITHUB_TOKEN }}` is used), the actions of label `x2` will not be triggered. But if this is done by `GitHub Actions bot` (that is, the token in the actions is not passed, or the default `token: ${{ secrets.GITHUB_TOKEN }}` is used), the actions of label `x2` will not be triggered.
ref: [GitHub docs](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#triggering-new-workflows-using-a-personal-access-token)
## `assignees` scope ## `assignees` scope
- The owner or collaborator of the warehouse, if there is an organization, including members - The owner or collaborator of the warehouse, if there is an organization, including members

View File

@@ -39,6 +39,8 @@ with:
但如果这个是由 `GitHub Actions bot` 完成的(即 actions 中 token 不传,或使用默认 `token: ${{ secrets.GITHUB_TOKEN }}`),则不会触发 label `x2` 的 Actions。 但如果这个是由 `GitHub Actions bot` 完成的(即 actions 中 token 不传,或使用默认 `token: ${{ secrets.GITHUB_TOKEN }}`),则不会触发 label `x2` 的 Actions。
ref: [GitHub docs](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#triggering-new-workflows-using-a-personal-access-token)
## `assignees` 范围 ## `assignees` 范围
- 仓库的所有者或协作者,若有组织,包括成员 - 仓库的所有者或协作者,若有组织,包括成员

View File

@@ -33,7 +33,7 @@ jobs:
steps: steps:
- name: help wanted - name: help wanted
if: github.event.label.name == 'help wanted' if: github.event.label.name == 'help wanted'
uses: actions-cool/issues-helper@v1.2 uses: actions-cool/issues-helper@v2.0.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -50,7 +50,7 @@ jobs:
- `on`: The action trigger condition - `on`: The action trigger condition
- Reference [Events that trigger workflows](https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows) - Reference [Events that trigger workflows](https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows)
- `uses`: Use actions name - `uses`: Use actions name
- `uses: actions-cool/issues-helper@v1.2`。Please [refer](/en-US/changelog) to version selection - `uses: actions-cool/issues-helper@v2.0.0`。Please [refer](/en-US/changelog) to version selection
- `issues-hepler` parameter - `issues-hepler` parameter
- `actions`: The name of the function used, **required**. Support multiple, separated by commas, such as `create-comment,close-issue` means comment and close issue - `actions`: The name of the function used, **required**. Support multiple, separated by commas, such as `create-comment,close-issue` means comment and close issue
- `token`: A person who needs to have push permission token - `token`: A person who needs to have push permission token

View File

@@ -33,7 +33,7 @@ jobs:
steps: steps:
- name: help wanted - name: help wanted
if: github.event.label.name == 'help wanted' if: github.event.label.name == 'help wanted'
uses: actions-cool/issues-helper@1.x uses: actions-cool/issues-helper@v2.0.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -50,7 +50,7 @@ jobs:
- `on`action 触发条件 - `on`action 触发条件
- 参考 [工作流触发机制](https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows) - 参考 [工作流触发机制](https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows)
- `uses`:使用 actions 名称 - `uses`:使用 actions 名称
- `uses: actions-cool/issues-helper@1.x`。版本选择请 [参考](/changelog) - `uses: actions-cool/issues-helper@v2.0.0`。版本选择请 [参考](/changelog)
- `issues-hepler` 参数 - `issues-hepler` 参数
- `actions`:使用功能的名称,**必填**。支持多个,需用逗号隔开,如 `create-comment,close-issue` 表示评论和关闭 issue - `actions`:使用功能的名称,**必填**。支持多个,需用逗号隔开,如 `create-comment,close-issue` 表示评论和关闭 issue
- `token`:需拥有 push 权限的人员 token - `token`:需拥有 push 权限的人员 token

View File

@@ -38,7 +38,7 @@ jobs:
steps: steps:
- name: help wanted - name: help wanted
if: github.event.label.name == 'help wanted' if: github.event.label.name == 'help wanted'
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -51,7 +51,7 @@ jobs:
## 💖 Who is using? ## 💖 Who is using?
<embed src="../README.md#L29-L82"></embed> <embed src="../README.md#RE-/<table>[^]+?[\r\n]<\/table>/"></embed>
## ⚡ Feedback ## ⚡ Feedback

View File

@@ -38,7 +38,7 @@ jobs:
steps: steps:
- name: help wanted - name: help wanted
if: github.event.label.name == 'help wanted' if: github.event.label.name == 'help wanted'
uses: actions-cool/issues-helper@v1.11 uses: actions-cool/issues-helper@v2.1.0
with: with:
actions: 'create-comment' actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@@ -51,7 +51,7 @@ jobs:
## 💖 谁在使用? ## 💖 谁在使用?
<embed src="../README.md#L29-L82"></embed> <embed src="../README.md#RE-/<table>[^]+?[\r\n]<\/table>/"></embed>
## ⚡ 反馈 ## ⚡ 反馈

View File

@@ -1,6 +1,6 @@
{ {
"name": "issues-helper", "name": "issues-helper",
"version": "1.11.0", "version": "2.0.0",
"private": true, "private": true,
"description": "Some operations on issue.", "description": "Some operations on issue.",
"main": "src/main.js", "main": "src/main.js",
@@ -10,6 +10,8 @@
"docs-dev:build": "UMI_ENV=dev dumi build", "docs-dev:build": "UMI_ENV=dev dumi build",
"docs:deploy": "gh-pages -d docs-dist", "docs:deploy": "gh-pages -d docs-dist",
"deploy": "npm run docs:build && npm run docs:deploy", "deploy": "npm run docs:build && npm run docs:deploy",
"format": "prettier --write **/*.ts **/*.js",
"format-check": "prettier --check **/*.ts **/*.js",
"package": "ncc build src/main.js -o dist", "package": "ncc build src/main.js -o dist",
"users": "node ./script/update-users.js", "users": "node ./script/update-users.js",
"main": "node ./src/main.js", "main": "node ./src/main.js",
@@ -36,10 +38,11 @@
"lodash": "^4.17.20" "lodash": "^4.17.20"
}, },
"devDependencies": { "devDependencies": {
"@umijs/fabric": "^2.5.6",
"@vercel/ncc": "^0.25.1", "@vercel/ncc": "^0.25.1",
"common-tags": "^1.8.0", "common-tags": "^1.8.0",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"dumi": "^1.1.0", "dumi": "^1.1.1",
"gh-pages": "^3.1.0", "gh-pages": "^3.1.0",
"react": "^17.0.1" "react": "^17.0.1"
} }

View File

@@ -17,13 +17,13 @@ for (let j = 1; j <= row; j++) {
let data = ''; let data = '';
data = stripIndent` data = stripIndent`
<tr> <tr>
<td align="center" width="180">${getImg(users[(j-1)*4])}</td> <td align="center" width="180">${getImg(users[(j - 1) * 4])}</td>
<td align="center" width="180">${getImg(users[(j-1)*4+1])}</td> <td align="center" width="180">${getImg(users[(j - 1) * 4 + 1])}</td>
<td align="center" width="180">${getImg(users[(j-1)*4+2])}</td> <td align="center" width="180">${getImg(users[(j - 1) * 4 + 2])}</td>
<td align="center" width="180">${getImg(users[(j-1)*4+3])}</td> <td align="center" width="180">${getImg(users[(j - 1) * 4 + 3])}</td>
</tr>`; </tr>`;
table += data table += data;
}; }
table = `<table> table = `<table>
${table} ${table}
@@ -34,7 +34,7 @@ ${table}
// ************************************************************************** // **************************************************************************
const point = '<table>'; const point = '<table>';
const cnPoint= `## 列 表`; const cnPoint = `## 列 表`;
const enPoint = `## List`; const enPoint = `## List`;
// ************************************************************************** // **************************************************************************
@@ -61,22 +61,22 @@ console.log(`🎉 Done en`);
// ************************************************************************** // **************************************************************************
function getImg (o) { function getImg(o) {
if (o) { if (o) {
return ` return `
<a href="${o.url}"> <a href="${o.url}">
<img src="${o.logo}" width="46" /> <img src="${o.logo}" width="46" />
<div>${getName(o)}</div> <div>${getName(o)}</div>
</a>` </a>`;
} }
return `` return ``;
}; }
function getName (o) { function getName(o) {
if (o) { if (o) {
return o.url.split('/').slice(-1)[0] return o.url.split('/').slice(-1)[0];
} }
return `` return ``;
}; }
// ************************************************************************** // **************************************************************************

View File

@@ -1,7 +1,7 @@
const { readFileSync, writeFileSync } = require('fs'); const { readFileSync, writeFileSync } = require('fs');
const last = /v1\.10/g; const last = /v2\.0\.0/g;
const now = 'v1.11'; const now = 'v2.1.0';
let readme = readFileSync('./README.md', 'utf-8'); let readme = readFileSync('./README.md', 'utf-8');
readme = readme.replace(last, now); readme = readme.replace(last, now);

View File

@@ -1,5 +1,5 @@
require('dotenv').config(); require('dotenv').config();
const core = require("@actions/core"); const core = require('@actions/core');
const { Octokit } = require('@octokit/rest'); const { Octokit } = require('@octokit/rest');
const { const {
@@ -10,17 +10,9 @@ const {
doCreateIssue, doCreateIssue,
} = require('./base.js'); } = require('./base.js');
const { const { doQueryIssues, getIssuesInMonth, getCreatedMonth } = require('./public.js');
doQueryIssues,
getIssuesInMonth,
getCreatedMonth,
} = require('./public.js');
const { const { dealStringToArr, matchKeyword, getPreMonth } = require('./util.js');
dealStringToArr,
matchKeyword,
getPreMonth
} = require('./util.js');
// ************************************************************************** // **************************************************************************
var dayjs = require('dayjs'); var dayjs = require('dayjs');
@@ -31,22 +23,22 @@ dayjs.extend(utc);
const token = core.getInput('token'); const token = core.getInput('token');
const octokit = new Octokit({ auth: `token ${token}` }); const octokit = new Octokit({ auth: `token ${token}` });
let direction = core.getInput("direction"); let direction = core.getInput('direction');
direction = direction === 'desc' ? 'desc' : 'asc'; direction = direction === 'desc' ? 'desc' : 'asc';
const commentAuth = core.getInput("comment-auth"); const commentAuth = core.getInput('comment-auth');
const bodyIncludes = core.getInput('body-includes'); const bodyIncludes = core.getInput('body-includes');
const titleIncludes = core.getInput('title-includes'); const titleIncludes = core.getInput('title-includes');
const assigneeIncludes = core.getInput('assignee-includes'); const assigneeIncludes = core.getInput('assignee-includes');
let issueState = core.getInput("issue-state") || 'open'; let issueState = core.getInput('issue-state') || 'open';
if (issueState != 'all' && issueState != 'closed') { if (issueState != 'all' && issueState != 'closed') {
issueState = 'open'; issueState = 'open';
} }
const inactiveLabel = core.getInput("inactive-label") || 'inactive'; const inactiveLabel = core.getInput('inactive-label') || 'inactive';
// ************************************************************************** // **************************************************************************
async function doCheckInactive (owner, repo, labels) { async function doCheckInactive(owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState); const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) { if (issues.length) {
@@ -57,8 +49,8 @@ async function doCheckInactive (owner, repo, labels) {
}); });
if (!arr.includes(inactiveLabel)) { if (!arr.includes(inactiveLabel)) {
await doAddLabels(owner, repo, issues[i].number, inactiveLabel); await doAddLabels(owner, repo, issues[i].number, inactiveLabel);
if (core.getInput("body")) { if (core.getInput('body')) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body")); await doCreateComment(owner, repo, issues[i].number, core.getInput('body'));
} }
} else { } else {
core.info(`Actions: [add-inactive] issue ${issues[i].number} has label!`); core.info(`Actions: [add-inactive] issue ${issues[i].number} has label!`);
@@ -67,19 +59,19 @@ async function doCheckInactive (owner, repo, labels) {
} else { } else {
core.info(`Actions: [query-issues] empty!`); core.info(`Actions: [query-issues] empty!`);
} }
}; }
/** /**
* 检查 issue 是否满足条件,满足返回 true * 检查 issue 是否满足条件,满足返回 true
* 当前 issue 的指定人是否有一个满足 assigneeIncludes 里的某个 * 当前 issue 的指定人是否有一个满足 assigneeIncludes 里的某个
* 关键字匹配,是否包含前一个某个+后一个某个 '官网,网站/挂了,无法访问' * 关键字匹配,是否包含前一个某个+后一个某个 '官网,网站/挂了,无法访问'
*/ */
async function doCheckIssue (owner, repo, issueNumber) { async function doCheckIssue(owner, repo, issueNumber) {
var checkResult = true; var checkResult = true;
const issue = await octokit.issues.get({ const issue = await octokit.issues.get({
owner, owner,
repo, repo,
issue_number: issueNumber issue_number: issueNumber,
}); });
if (!!checkResult && assigneeIncludes) { if (!!checkResult && assigneeIncludes) {
@@ -90,53 +82,51 @@ async function doCheckIssue (owner, repo, issueNumber) {
checkResult = true; checkResult = true;
checkAssignee = true; checkAssignee = true;
} }
}) });
!checkAssignee ? checkResult = false : null; !checkAssignee ? (checkResult = false) : null;
} }
if (!!checkResult && titleIncludes) { if (!!checkResult && titleIncludes) {
const titleArr = titleIncludes.split('/'); const titleArr = titleIncludes.split('/');
const keyword1 = dealStringToArr(titleArr[0]); const keyword1 = dealStringToArr(titleArr[0]);
const keyword2 = dealStringToArr(titleArr[1]); const keyword2 = dealStringToArr(titleArr[1]);
checkResult = checkResult = keyword2.length
keyword2.length ? ? matchKeyword(issue.data.title, keyword1) && matchKeyword(issue.data.title, keyword2)
matchKeyword(issue.data.title, keyword1) && matchKeyword(issue.data.title, keyword2) : : matchKeyword(issue.data.title, keyword1);
matchKeyword(issue.data.title, keyword1);
} }
if (!!checkResult && bodyIncludes) { if (!!checkResult && bodyIncludes) {
const bodyArr = bodyIncludes.split('/'); const bodyArr = bodyIncludes.split('/');
const keyword1 = dealStringToArr(bodyArr[0]); const keyword1 = dealStringToArr(bodyArr[0]);
const keyword2 = dealStringToArr(bodyArr[1]); const keyword2 = dealStringToArr(bodyArr[1]);
checkResult = checkResult = keyword2.length
keyword2.length ? ? matchKeyword(issue.data.body, keyword1) && matchKeyword(issue.data.body, keyword2)
matchKeyword(issue.data.body, keyword1) && matchKeyword(issue.data.body, keyword2) : : matchKeyword(issue.data.body, keyword1);
matchKeyword(issue.data.body, keyword1);
} }
core.info(`Actions: [check-issue][${!!checkResult}] success!`); core.info(`Actions: [check-issue][${!!checkResult}] success!`);
core.setOutput("check-result", !!checkResult); core.setOutput('check-result', !!checkResult);
}; }
async function doCloseIssues (owner, repo, labels) { async function doCloseIssues(owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, 'open'); const issues = await doQueryIssues(owner, repo, labels, 'open');
if (issues.length) { if (issues.length) {
for (let i = 0; i < issues.length; i++) { for (let i = 0; i < issues.length; i++) {
await doCloseIssue(owner, repo, issues[i].number); await doCloseIssue(owner, repo, issues[i].number);
if (core.getInput("body")) { if (core.getInput('body')) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body")); await doCreateComment(owner, repo, issues[i].number, core.getInput('body'));
} }
} }
} else { } else {
core.info(`Actions: [query-issues] empty!`); core.info(`Actions: [query-issues] empty!`);
} }
}; }
async function doFindComments (owner, repo, issueNumber) { async function doFindComments(owner, repo, issueNumber) {
const res = await octokit.issues.listComments({ const res = await octokit.issues.listComments({
owner, owner,
repo, repo,
issue_number: issueNumber issue_number: issueNumber,
}); });
core.info(`Actions: [find-comments][${issueNumber}] success!`); core.info(`Actions: [find-comments][${issueNumber}] success!`);
let comments = []; let comments = [];
@@ -149,34 +139,34 @@ async function doFindComments (owner, repo, issueNumber) {
auth: item.user.login, auth: item.user.login,
body: item.body, body: item.body,
created: item.created_at, created: item.created_at,
updated: item.updated_at updated: item.updated_at,
}) });
if (direction === 'desc') { if (direction === 'desc') {
comments.reverse(); comments.reverse();
} }
} }
}) });
core.setOutput("comments", comments); core.setOutput('comments', comments);
}; }
async function doLockIssues (owner, repo, labels) { async function doLockIssues(owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState); const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) { if (issues.length) {
for (let i = 0; i < issues.length; i++) { for (let i = 0; i < issues.length; i++) {
await doLockIssue(owner, repo, issues[i].number); await doLockIssue(owner, repo, issues[i].number);
if (core.getInput("body")) { if (core.getInput('body')) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body")); await doCreateComment(owner, repo, issues[i].number, core.getInput('body'));
} }
} }
} else { } else {
core.info(`Actions: [query-issues] empty!`); core.info(`Actions: [query-issues] empty!`);
} }
}; }
async function doMonthStatistics (owner, repo, labels, assignees) { async function doMonthStatistics(owner, repo, labels, assignees) {
const countLables = core.getInput("count-lables"); const countLables = core.getInput('count-lables');
const countComments = core.getInput("count-comments"); const countComments = core.getInput('count-comments');
const thisMonth = dayjs.utc().month() + 1; const thisMonth = dayjs.utc().month() + 1;
const year = thisMonth == 1 ? dayjs.utc().year() - 1 : dayjs.utc().year(); const year = thisMonth == 1 ? dayjs.utc().year() - 1 : dayjs.utc().year();
@@ -184,17 +174,13 @@ async function doMonthStatistics (owner, repo, labels, assignees) {
const month = getPreMonth(thisMonth); const month = getPreMonth(thisMonth);
const showMonth = month < 10 ? `0${month}` : month; const showMonth = month < 10 ? `0${month}` : month;
let issues = await getIssuesInMonth( let issues = await getIssuesInMonth(owner, repo, thisMonth);
owner,
repo,
thisMonth
);
if (issues.length == 0) { if (issues.length == 0) {
core.info(`Actions: [query-issues-${month}] empty!`); core.info(`Actions: [query-issues-${month}] empty!`);
return false; return false;
} }
issues = issues.filter(i => { issues = issues.filter(i => {
return getCreatedMonth(i.created_at) == month return getCreatedMonth(i.created_at) == month;
}); });
let total = issues.length; let total = issues.length;
let totalIssues = [...issues]; let totalIssues = [...issues];
@@ -219,10 +205,12 @@ async function doMonthStatistics (owner, repo, labels, assignees) {
} else { } else {
labelsTotals[l.name] = 1; labelsTotals[l.name] = 1;
} }
}) });
} }
} }
let now = dayjs().utc().format('YYYY-MM-DD HH:mm:ss'); let now = dayjs()
.utc()
.format('YYYY-MM-DD HH:mm:ss');
let body = ` let body = `
- Created time: ${now} - Created time: ${now}
@@ -244,8 +232,8 @@ async function doMonthStatistics (owner, repo, labels, assignees) {
for (var lab in labelsTotals) { for (var lab in labelsTotals) {
labelsArr.push({ labelsArr.push({
labelName: lab, labelName: lab,
number: labelsTotals[lab] number: labelsTotals[lab],
}) });
} }
labelsArr.sort((a, b) => b.number - a.number); labelsArr.sort((a, b) => b.number - a.number);
let labelsTitle = ` let labelsTitle = `
@@ -255,12 +243,16 @@ async function doMonthStatistics (owner, repo, labels, assignees) {
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Number</th> <th>Number</th>
</tr>` </tr>`;
let labelsBody = ''; let labelsBody = '';
labelsArr.forEach(it => { labelsArr.forEach(it => {
labelsBody += `<tr><td>${it.labelName}</td><td>${it.number}</td></tr>` labelsBody += `<tr><td>${it.labelName}</td><td>${it.number}</td></tr>`;
}) });
body = body + labelsTitle + labelsBody + `</table> body =
body +
labelsTitle +
labelsBody +
`</table>
`; `;
} }
@@ -279,21 +271,21 @@ async function doMonthStatistics (owner, repo, labels, assignees) {
<th>Number</th> <th>Number</th>
<th>State</th> <th>State</th>
</tr> </tr>
` `;
let commentBody = ''; let commentBody = '';
maxComments.forEach((it,ind) => { maxComments.forEach((it, ind) => {
commentBody += `<tr> commentBody += `<tr>
<td>${ind + 1}</td> <td>${ind + 1}</td>
<td>${it.number}</td> <td>${it.number}</td>
<td>${it.title}</td> <td>${it.title}</td>
<td>${it.comments}</td> <td>${it.comments}</td>
<td>${it.state}</td></tr>` <td>${it.state}</td></tr>`;
}) });
body = body + commentTitle + commentBody + '</table>'; body = body + commentTitle + commentBody + '</table>';
} }
await doCreateIssue(owner, repo, title, body, labels, assignees); await doCreateIssue(owner, repo, title, body, labels, assignees);
}; }
// ************************************************************************** // **************************************************************************
module.exports = { module.exports = {

View File

@@ -1,28 +1,18 @@
require('dotenv').config(); require('dotenv').config();
const core = require("@actions/core"); const core = require('@actions/core');
const github = require("@actions/github"); const github = require('@actions/github');
const { Octokit } = require('@octokit/rest'); const { Octokit } = require('@octokit/rest');
// ************************************************************************** // **************************************************************************
const ALLREACTIONS = [ const ALLREACTIONS = ['+1', '-1', 'laugh', 'confused', 'heart', 'hooray', 'rocket', 'eyes'];
"+1",
"-1",
"laugh",
"confused",
"heart",
"hooray",
"rocket",
"eyes",
];
const { const { doQueryIssues } = require('./public.js');
doQueryIssues
} = require('./public.js');
const { const {
dealStringToArr, dealStringToArr,
dealRandomAssignees, dealRandomAssignees,
testDuplicate, testDuplicate,
checkPermission,
} = require('./util.js'); } = require('./util.js');
// ************************************************************************** // **************************************************************************
@@ -30,56 +20,56 @@ const token = core.getInput('token');
const octokit = new Octokit({ auth: `token ${token}` }); const octokit = new Octokit({ auth: `token ${token}` });
const context = github.context; const context = github.context;
const contents = core.getInput("contents"); const contents = core.getInput('contents');
const randomTo = core.getInput("random-to"); const randomTo = core.getInput('random-to');
// ************************************************************************** // **************************************************************************
async function doAddAssignees (owner, repo, issueNumber, assignees) { async function doAddAssignees(owner, repo, issueNumber, assignees) {
const arr = dealRandomAssignees(assignees, randomTo); const arr = dealRandomAssignees(assignees, randomTo);
await octokit.issues.addAssignees({ await octokit.issues.addAssignees({
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
assignees: arr assignees: arr,
}); });
core.info(`Actions: [add-assignees][${arr}] success!`); core.info(`Actions: [add-assignees][${arr}] success!`);
}; }
async function doAddLabels (owner, repo, issueNumber, labels) { async function doAddLabels(owner, repo, issueNumber, labels) {
await octokit.issues.addLabels({ await octokit.issues.addLabels({
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
labels: dealStringToArr(labels) labels: dealStringToArr(labels),
}); });
core.info(`Actions: [add-labels][${labels}] success!`); core.info(`Actions: [add-labels][${labels}] success!`);
}; }
async function doCloseIssue (owner, repo, issueNumber) { async function doCloseIssue(owner, repo, issueNumber) {
await octokit.issues.update({ await octokit.issues.update({
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
state: 'closed' state: 'closed',
}); });
core.info(`Actions: [close-issue][${issueNumber}] success!`); core.info(`Actions: [close-issue][${issueNumber}] success!`);
}; }
async function doCreateComment (owner, repo, issueNumber, body) { async function doCreateComment(owner, repo, issueNumber, body) {
const { data } = await octokit.issues.createComment({ const { data } = await octokit.issues.createComment({
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
body body,
}); });
core.info(`Actions: [create-comment][${body}] success!`); core.info(`Actions: [create-comment][${body}] success!`);
core.setOutput("comment-id", data.id); core.setOutput('comment-id', data.id);
if (contents) { if (contents) {
await doCreateCommentContent(owner, repo, data.id, dealStringToArr(contents)); await doCreateCommentContent(owner, repo, data.id, dealStringToArr(contents));
} }
}; }
async function doCreateCommentContent(owner, repo, commentId, contents) { async function doCreateCommentContent(owner, repo, commentId, contents) {
if (contents.length) { if (contents.length) {
@@ -89,15 +79,15 @@ async function doCreateCommentContent(owner, repo, commentId, contents) {
owner, owner,
repo, repo,
comment_id: commentId, comment_id: commentId,
content: item content: item,
}); });
core.info(`Actions: [create-reactions][${item}] success!`); core.info(`Actions: [create-reactions][${item}] success!`);
} }
}) });
} }
}; }
async function doCreateIssue (owner, repo, title, body, labels, assignees) { async function doCreateIssue(owner, repo, title, body, labels, assignees) {
let params = { let params = {
owner, owner,
repo, repo,
@@ -109,12 +99,12 @@ async function doCreateIssue (owner, repo, title, body, labels, assignees) {
const { data } = await octokit.issues.create(params); const { data } = await octokit.issues.create(params);
core.info(`Actions: [create-issue][${title}] success!`); core.info(`Actions: [create-issue][${title}] success!`);
core.setOutput("issue-number", data.number); core.setOutput('issue-number', data.number);
if (contents) { if (contents) {
await doCreateIssueContent(owner, repo, data.number, dealStringToArr(contents)); await doCreateIssueContent(owner, repo, data.number, dealStringToArr(contents));
} }
}; }
async function doCreateIssueContent(owner, repo, issueNumber, contents) { async function doCreateIssueContent(owner, repo, issueNumber, contents) {
if (contents.length) { if (contents.length) {
@@ -124,51 +114,100 @@ async function doCreateIssueContent(owner, repo, issueNumber, contents) {
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
content: item content: item,
}); });
core.info(`Actions: [create-reactions][${item}] success!`); core.info(`Actions: [create-reactions][${item}] success!`);
} }
}) });
} }
}; }
async function doDeleteComment (owner, repo, commentId) { async function doCreateLabel(owner, repo) {
const name = core.getInput('label-name');
const color = core.getInput('label-color') || 'ededed';
const description = core.getInput('label-desc') || '';
if (!name) {
core.setFailed(`This actions should input 'label-name'!`);
return false;
}
try {
await octokit.issues.createLabel({
owner,
repo,
name,
color,
description,
});
core.info(`Actions: [create-label][${name}] success!`);
} catch (err) {
console.log(err.message);
}
}
async function doDeleteComment(owner, repo, commentId) {
await octokit.issues.deleteComment({ await octokit.issues.deleteComment({
owner, owner,
repo, repo,
comment_id: commentId comment_id: commentId,
}); });
core.info(`Actions: [delete-comment][${commentId}] success!`); core.info(`Actions: [delete-comment][${commentId}] success!`);
}; }
async function doLockIssue (owner, repo, issueNumber) { async function doLockIssue(owner, repo, issueNumber) {
await octokit.issues.lock({ const lockReason = core.getInput('lock-reason');
let params = {
owner, owner,
repo, repo,
issue_number: issueNumber, 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!`); core.info(`Actions: [lock-issue][${issueNumber}] success!`);
}; }
async function doMarkDuplicate (owner, repo, labels) { async function doMarkDuplicate(owner, repo, labels) {
if (context.eventName != 'issue_comment') { if (context.eventName != 'issue_comment') {
core.info(`This actions only support on 'issue_comment'!`); core.info(`This actions only support on 'issue_comment'!`);
return false; return false;
} }
if (context.payload.action == 'created' || context.payload.action == 'edited') { if (context.payload.action == 'created' || context.payload.action == 'edited') {
const duplicateCommand = core.getInput("duplicate-command"); const duplicateCommand = core.getInput('duplicate-command');
const duplicateLabels = core.getInput("duplicate-labels"); const duplicateLabels = core.getInput('duplicate-labels');
const removeLables = core.getInput("remove-labels"); const removeLables = core.getInput('remove-labels');
const closeIssue = core.getInput("close-issue"); const closeIssue = core.getInput('close-issue');
const requirePermission = core.getInput('require-permission') || 'write';
const commentId = context.payload.comment.id; const commentId = context.payload.comment.id;
const commentBody = context.payload.comment.body; const commentBody = context.payload.comment.body;
const commentUser = context.payload.comment.user.login;
const issueNumber = context.payload.issue.number; const issueNumber = context.payload.issue.number;
const ifCommandInput = !!duplicateCommand; const ifCommandInput = !!duplicateCommand;
if (!commentBody.includes('?') && ((ifCommandInput && commentBody.startsWith(duplicateCommand) && commentBody.split(' ')[0] == duplicateCommand) || testDuplicate(commentBody))) { const res = await octokit.repos.getCollaboratorPermissionLevel({
owner,
repo,
username: commentUser,
});
const { permission } = res.data;
if (!checkPermission(requirePermission, permission)) {
core.info(`The user ${commentUser} is not allow!`);
return false;
}
if (
!commentBody.includes('?') &&
((ifCommandInput &&
commentBody.startsWith(duplicateCommand) &&
commentBody.split(' ')[0] == duplicateCommand) ||
testDuplicate(commentBody))
) {
if (ifCommandInput) { if (ifCommandInput) {
const nextBody = commentBody.replace(duplicateCommand, 'Duplicate of'); const nextBody = commentBody.replace(duplicateCommand, 'Duplicate of');
await doUpdateComment(owner, repo, commentId, nextBody, 'replace', true); await doUpdateComment(owner, repo, commentId, nextBody, 'replace', true);
@@ -179,11 +218,13 @@ async function doMarkDuplicate (owner, repo, labels) {
const issue = await octokit.issues.get({ const issue = await octokit.issues.get({
owner, owner,
repo, repo,
issue_number: issueNumber issue_number: issueNumber,
}); });
let newLabels = []; let newLabels = [];
if (issue.data.labels.length > 0) { if (issue.data.labels.length > 0) {
newLabels = issue.data.labels.map(({ name }) => name).filter(name => !dealStringToArr(removeLables).includes(name)); newLabels = issue.data.labels
.map(({ name }) => name)
.filter(name => !dealStringToArr(removeLables).includes(name));
} }
if (duplicateLabels) { if (duplicateLabels) {
newLabels = [...newLabels, ...dealStringToArr(duplicateLabels)]; newLabels = [...newLabels, ...dealStringToArr(duplicateLabels)];
@@ -200,34 +241,36 @@ async function doMarkDuplicate (owner, repo, labels) {
await doCloseIssue(owner, repo, issueNumber); await doCloseIssue(owner, repo, issueNumber);
} }
} else { } else {
core.info(`This comment body should start whith 'duplicate-command' or 'Duplicate of' and not include '?'`); core.info(
`This comment body should start whith 'duplicate-command' or 'Duplicate of' and not include '?'`,
);
} }
} else { } else {
core.info(`This actions only support on 'issue_comment' created or edited!`); core.info(`This actions only support on 'issue_comment' created or edited!`);
} }
}; }
async function doOpenIssue (owner, repo, issueNumber) { async function doOpenIssue(owner, repo, issueNumber) {
await octokit.issues.update({ await octokit.issues.update({
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
state: 'open' state: 'open',
}); });
core.info(`Actions: [open-issue][${issueNumber}] success!`); core.info(`Actions: [open-issue][${issueNumber}] success!`);
}; }
async function doRemoveAssignees (owner, repo, issueNumber, assignees) { async function doRemoveAssignees(owner, repo, issueNumber, assignees) {
await octokit.issues.removeAssignees({ await octokit.issues.removeAssignees({
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
assignees: dealStringToArr(assignees) assignees: dealStringToArr(assignees),
}); });
core.info(`Actions: [remove-assignees][${assignees}] success!`); core.info(`Actions: [remove-assignees][${assignees}] success!`);
}; }
async function doRemoveLabels (owner, repo, issueNumber, labels) { async function doRemoveLabels(owner, repo, issueNumber, labels) {
const dealLabels = dealStringToArr(labels); const dealLabels = dealStringToArr(labels);
for (label of dealLabels) { for (label of dealLabels) {
await octokit.issues.removeLabel({ await octokit.issues.removeLabel({
@@ -239,9 +282,9 @@ async function doRemoveLabels (owner, repo, issueNumber, labels) {
core.info(`Actions: [remove-labels-foreach][${label}] success!`); core.info(`Actions: [remove-labels-foreach][${label}] success!`);
} }
core.info(`Actions: [remove-labels][${labels}] success!`); core.info(`Actions: [remove-labels][${labels}] success!`);
}; }
async function doSetLabels (owner, repo, issueNumber, labels) { async function doSetLabels(owner, repo, issueNumber, labels) {
// 概率性出现问题https://github.com/octokit/rest.js/issues/1982规避 setLabels // 概率性出现问题https://github.com/octokit/rest.js/issues/1982规避 setLabels
if (labels) { if (labels) {
// await octokit.issues.setLabels({ // await octokit.issues.setLabels({
@@ -253,7 +296,7 @@ async function doSetLabels (owner, repo, issueNumber, labels) {
const issue = await octokit.issues.get({ const issue = await octokit.issues.get({
owner, owner,
repo, repo,
issue_number: issueNumber issue_number: issueNumber,
}); });
const baseLabels = issue.data.labels.map(({ name }) => name); const baseLabels = issue.data.labels.map(({ name }) => name);
const removeLabels = baseLabels.filter(name => !dealStringToArr(labels).includes(name)); const removeLabels = baseLabels.filter(name => !dealStringToArr(labels).includes(name));
@@ -271,39 +314,32 @@ async function doSetLabels (owner, repo, issueNumber, labels) {
core.info(`Actions: [set-labels][${labels}] success!`); core.info(`Actions: [set-labels][${labels}] success!`);
} }
}; }
async function doUnlockIssue (owner, repo, issueNumber) { async function doUnlockIssue(owner, repo, issueNumber) {
await octokit.issues.unlock({ await octokit.issues.unlock({
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
}); });
core.info(`Actions: [unlock-issue][${issueNumber}] success!`); core.info(`Actions: [unlock-issue][${issueNumber}] success!`);
}; }
async function doUpdateComment ( async function doUpdateComment(owner, repo, commentId, body, updateMode, ifUpdateBody) {
owner,
repo,
commentId,
body,
updateMode,
ifUpdateBody,
) {
const comment = await octokit.issues.getComment({ const comment = await octokit.issues.getComment({
owner, owner,
repo, repo,
comment_id: commentId comment_id: commentId,
}) });
const comment_body = comment.data.body; const comment_body = comment.data.body;
let params = { let params = {
owner, owner,
repo, repo,
comment_id: commentId comment_id: commentId,
}; };
if (core.getInput("body") || ifUpdateBody) { if (core.getInput('body') || ifUpdateBody) {
if (updateMode === 'append') { if (updateMode === 'append') {
params.body = `${comment_body}\n${body}`; params.body = `${comment_body}\n${body}`;
} else { } else {
@@ -317,9 +353,9 @@ async function doUpdateComment (
if (contents) { if (contents) {
await doCreateCommentContent(owner, repo, commentId, dealStringToArr(contents)); await doCreateCommentContent(owner, repo, commentId, dealStringToArr(contents));
} }
}; }
async function doUpdateIssue ( async function doUpdateIssue(
owner, owner,
repo, repo,
issueNumber, issueNumber,
@@ -328,26 +364,26 @@ async function doUpdateIssue (
body, body,
updateMode, updateMode,
assignees, assignees,
labels labels,
) { ) {
const issue = await octokit.issues.get({ const issue = await octokit.issues.get({
owner, owner,
repo, repo,
issue_number: issueNumber issue_number: issueNumber,
}) });
const issue_body = issue.data.body; const issue_body = issue.data.body;
const issue_title = issue.data.title; const issue_title = issue.data.title;
let issue_labels = []; let issue_labels = [];
if (issue.data.labels.length > 0) { if (issue.data.labels.length > 0) {
issue.data.labels.forEach(it =>{ issue.data.labels.forEach(it => {
issue_labels.push(it.name); issue_labels.push(it.name);
}); });
} }
let issue_assignees = []; let issue_assignees = [];
if (issue.data.assignees.length > 0) { if (issue.data.assignees.length > 0) {
issue.data.assignees.forEach(it =>{ issue.data.assignees.forEach(it => {
issue_assignees.push(it.login); issue_assignees.push(it.login);
}); });
} }
@@ -356,13 +392,13 @@ async function doUpdateIssue (
owner, owner,
repo, repo,
issue_number: issueNumber, issue_number: issueNumber,
state state,
}; };
params.title = core.getInput("title") ? title : issue_title; params.title = core.getInput('title') ? title : issue_title;
let next_body; let next_body;
if (core.getInput("body")) { if (core.getInput('body')) {
if (updateMode === 'append') { if (updateMode === 'append') {
next_body = `${issue_body}\n${body}`; next_body = `${issue_body}\n${body}`;
} else { } else {
@@ -382,21 +418,21 @@ async function doUpdateIssue (
if (contents) { if (contents) {
await doCreateIssueContent(owner, repo, issueNumber, contents); await doCreateIssueContent(owner, repo, issueNumber, contents);
} }
}; }
async function doWelcome (owner, repo, assignees, labels, body) { async function doWelcome(owner, repo, assignees, labels, body) {
const context = github.context; const context = github.context;
const isIssue = !!context.payload.issue; const isIssue = !!context.payload.issue;
const issueContents = core.getInput("issue-contents"); const issueContents = core.getInput('issue-contents');
if (!isIssue) { if (!isIssue) {
core.setFailed("The event that triggered this action must be a issue. Error!"); core.setFailed('The event that triggered this action must be a issue. Error!');
} else { } else {
const auth = context.payload.sender.login; const auth = context.payload.sender.login;
core.info(`Actions: [welcome: auth=][${auth}]`); core.info(`Actions: [welcome: auth=][${auth}]`);
const issueNumber = context.issue.number; const issueNumber = context.issue.number;
const issues = await doQueryIssues(owner, repo, false, 'all', auth); const issues = await doQueryIssues(owner, repo, false, 'all', auth);
if (issues.length == 0 || (issues.length == 1 && issues[0].number == issueNumber)) { if (issues.length == 0 || (issues.length == 1 && issues[0].number == issueNumber)) {
if (core.getInput("body")) { if (core.getInput('body')) {
await doCreateComment(owner, repo, issueNumber, body); await doCreateComment(owner, repo, issueNumber, body);
} else { } else {
core.info(`Actions: [welcome] no body!`); core.info(`Actions: [welcome] no body!`);
@@ -417,17 +453,17 @@ async function doWelcome (owner, repo, assignees, labels, body) {
core.info(`Actions: [welcome][${auth}] is not first time!`); core.info(`Actions: [welcome][${auth}] is not first time!`);
} }
} }
}; }
// ************************************************************************** // **************************************************************************
function testContent(con) { function testContent(con) {
if (ALLREACTIONS.includes(con)) { if (ALLREACTIONS.includes(con)) {
return true; return true;
} else { } else {
core.setFailed("This actions not supported!"); core.setFailed('This actions not supported!');
return false; return false;
} }
}; }
// ************************************************************************** // **************************************************************************
module.exports = { module.exports = {
@@ -438,6 +474,7 @@ module.exports = {
doCreateCommentContent, doCreateCommentContent,
doCreateIssue, doCreateIssue,
doCreateIssueContent, doCreateIssueContent,
doCreateLabel,
doDeleteComment, doDeleteComment,
doMarkDuplicate, doMarkDuplicate,
doLockIssue, doLockIssue,

View File

@@ -1,5 +1,5 @@
const core = require("@actions/core"); const core = require('@actions/core');
const github = require("@actions/github"); const github = require('@actions/github');
// ************************************************************************** // **************************************************************************
const { const {
@@ -8,6 +8,7 @@ const {
doCloseIssue, doCloseIssue,
doCreateComment, doCreateComment,
doCreateIssue, doCreateIssue,
doCreateLabel,
doDeleteComment, doDeleteComment,
doMarkDuplicate, doMarkDuplicate,
doLockIssue, doLockIssue,
@@ -38,6 +39,7 @@ const ALLACTIONS = [
'close-issue', 'close-issue',
'create-comment', 'create-comment',
'create-issue', 'create-issue',
'create-label',
'delete-comment', 'delete-comment',
'lock-issue', 'lock-issue',
'mark-duplicate', 'mark-duplicate',
@@ -68,24 +70,24 @@ async function main() {
const issueNumber = core.getInput('issue-number'); const issueNumber = core.getInput('issue-number');
const commentId = core.getInput('comment-id'); const commentId = core.getInput('comment-id');
const defaultBody = `Currently at ${owner}/${repo}. And this is default comment.` const defaultBody = `Currently at ${owner}/${repo}. And this is default comment.`;
const body = core.getInput("body") || defaultBody; const body = core.getInput('body') || defaultBody;
const defaultTitle = `Default Title`; const defaultTitle = `Default Title`;
const title = core.getInput("title") || defaultTitle; const title = core.getInput('title') || defaultTitle;
const assignees = core.getInput("assignees"); const assignees = core.getInput('assignees');
const labels = core.getInput("labels"); const labels = core.getInput('labels');
const state = core.getInput("state") || 'open'; const state = core.getInput('state') || 'open';
let updateMode = core.getInput("update-mode"); let updateMode = core.getInput('update-mode');
if (updateMode !== 'append') { if (updateMode !== 'append') {
updateMode = 'replace'; updateMode = 'replace';
} }
// actions // actions
const actions = core.getInput("actions", { required: true }); const actions = core.getInput('actions', { required: true });
const actionsArr = actions.split(','); const actionsArr = actions.split(',');
actionsArr.forEach(item => { actionsArr.forEach(item => {
@@ -96,9 +98,9 @@ async function main() {
if (ALLACTIONS.includes(action)) { if (ALLACTIONS.includes(action)) {
choseActions(action); choseActions(action);
} else { } else {
core.setFailed("This actions not supported!"); core.setFailed('This actions not supported!');
} }
}; }
async function choseActions(action) { async function choseActions(action) {
switch (action) { switch (action) {
@@ -118,6 +120,9 @@ async function main() {
case 'create-issue': case 'create-issue':
await doCreateIssue(owner, repo, title, body, labels, assignees); await doCreateIssue(owner, repo, title, body, labels, assignees);
break; break;
case 'create-label':
await doCreateLabel(owner, repo);
break;
case 'delete-comment': case 'delete-comment':
await doDeleteComment(owner, repo, commentId); await doDeleteComment(owner, repo, commentId);
break; break;
@@ -143,13 +148,7 @@ async function main() {
await doUnlockIssue(owner, repo, issueNumber); await doUnlockIssue(owner, repo, issueNumber);
break; break;
case 'update-comment': case 'update-comment':
await doUpdateComment( await doUpdateComment(owner, repo, commentId, body, updateMode);
owner,
repo,
commentId,
body,
updateMode
);
break; break;
case 'update-issue': case 'update-issue':
await doUpdateIssue( await doUpdateIssue(
@@ -161,70 +160,38 @@ async function main() {
body, body,
updateMode, updateMode,
assignees, assignees,
labels labels,
); );
break; break;
case 'welcome': case 'welcome':
await doWelcome( await doWelcome(owner, repo, assignees, labels, body);
owner,
repo,
assignees,
labels,
body
);
break; break;
// advanced // advanced
case 'check-inactive': case 'check-inactive':
await doCheckInactive( await doCheckInactive(owner, repo, labels);
owner,
repo,
labels
)
break; break;
case 'check-issue': case 'check-issue':
await doCheckIssue( await doCheckIssue(owner, repo, issueNumber);
owner,
repo,
issueNumber
);
break; break;
case 'close-issues': case 'close-issues':
await doCloseIssues( await doCloseIssues(owner, repo, labels);
owner,
repo,
labels
)
break; break;
case 'find-comments': case 'find-comments':
await doFindComments( await doFindComments(owner, repo, issueNumber);
owner,
repo,
issueNumber
);
break; break;
case 'lock-issues': case 'lock-issues':
await doLockIssues( await doLockIssues(owner, repo, labels);
owner,
repo,
labels
);
break; break;
case 'month-statistics': case 'month-statistics':
await doMonthStatistics( await doMonthStatistics(owner, repo, labels, assignees);
owner,
repo,
labels,
assignees
);
break; break;
// default // default
default: default:
break; break;
} }
}; }
} } catch (error) {
catch (error) {
core.setFailed(error.message); core.setFailed(error.message);
} }
} }

View File

@@ -1,10 +1,8 @@
require('dotenv').config(); require('dotenv').config();
const core = require("@actions/core"); const core = require('@actions/core');
const { Octokit } = require('@octokit/rest'); const { Octokit } = require('@octokit/rest');
const { const { getPreMonth } = require('./util.js');
getPreMonth
} = require('./util.js');
// ************************************************************************** // **************************************************************************
var dayjs = require('dayjs'); var dayjs = require('dayjs');
@@ -19,26 +17,26 @@ const octokit = new Octokit({ auth: `token ${token}` });
const perPage = 100; const perPage = 100;
const issueCreator = core.getInput("issue-creator"); const issueCreator = core.getInput('issue-creator');
const issueAssignee = core.getInput('issue-assignee'); const issueAssignee = core.getInput('issue-assignee');
const issueMentioned = core.getInput('issue-mentioned'); const issueMentioned = core.getInput('issue-mentioned');
const bodyIncludes = core.getInput('body-includes'); const bodyIncludes = core.getInput('body-includes');
const titleIncludes = core.getInput('title-includes'); const titleIncludes = core.getInput('title-includes');
const inactiveDay = core.getInput("inactive-day"); const inactiveDay = core.getInput('inactive-day');
// ************************************************************************** // **************************************************************************
async function doQueryIssues (owner, repo, labels, state, creator) { async function doQueryIssues(owner, repo, labels, state, creator) {
let params = { let params = {
owner, owner,
repo, repo,
state, state,
}; };
issueCreator ? params.creator = issueCreator : null; issueCreator ? (params.creator = issueCreator) : null;
issueAssignee ? params.assignee = issueAssignee : null; issueAssignee ? (params.assignee = issueAssignee) : null;
issueMentioned ? params.mentioned = issueMentioned : null; issueMentioned ? (params.mentioned = issueMentioned) : null;
if (labels) { if (labels) {
params.labels = labels; params.labels = labels;
@@ -73,47 +71,51 @@ async function doQueryIssues (owner, repo, labels, state, creator) {
issueNumbers.push(iss.number); issueNumbers.push(iss.number);
} }
} }
}) });
core.info(`Actions: [query-issues]: [${JSON.stringify(issueNumbers)}]!`); core.info(`Actions: [query-issues]: [${JSON.stringify(issueNumbers)}]!`);
} }
return issues; return issues;
}; }
async function getIssues (params, page = 1) { async function getIssues(params, page = 1) {
let { data: issues } = await octokit.issues.listForRepo({ let { data: issues } = await octokit.issues.listForRepo({
...params, ...params,
per_page: perPage, per_page: perPage,
page page,
}); });
if (issues.length >= perPage) { if (issues.length >= perPage) {
issues = issues.concat(await getIssues(params, page + 1)); issues = issues.concat(await getIssues(params, page + 1));
} }
return issues; return issues;
}; }
async function getIssuesInMonth (owner, repo, thisMonth, page = 1) { async function getIssuesInMonth(owner, repo, thisMonth, page = 1) {
const month = getPreMonth(thisMonth); const month = getPreMonth(thisMonth);
let { data: issues } = await octokit.issues.listForRepo({ let { data: issues } = await octokit.issues.listForRepo({
owner, owner,
repo, repo,
state: 'all', state: 'all',
per_page: perPage, per_page: perPage,
page page,
}); });
issues = issues.filter(i => { issues = issues.filter(i => {
return i.pull_request === undefined return i.pull_request === undefined;
}); });
if (issues.length && getCreatedMonth(issues[issues.length - 1].created_at) >= month) { if (issues.length && getCreatedMonth(issues[issues.length - 1].created_at) >= month) {
issues = issues.concat(await getIssuesInMonth(owner, repo, thisMonth, page + 1)); issues = issues.concat(await getIssuesInMonth(owner, repo, thisMonth, page + 1));
} }
return issues; return issues;
}; }
// ************************************************************************** // **************************************************************************
function getCreatedMonth (d) { function getCreatedMonth(d) {
return dayjs(d).utc().month() + 1; return (
}; dayjs(d)
.utc()
.month() + 1
);
}
// ************************************************************************** // **************************************************************************
module.exports = { module.exports = {

View File

@@ -1,6 +1,6 @@
const sampleSize = require('lodash/sampleSize'); const sampleSize = require('lodash/sampleSize');
function dealStringToArr (para) { function dealStringToArr(para) {
/** /**
* in 'x1,x2,x3' * in 'x1,x2,x3'
* out ['x1','x2','x3'] * out ['x1','x2','x3']
@@ -9,25 +9,25 @@ function dealStringToArr (para) {
if (para) { if (para) {
const paraArr = para.split(','); const paraArr = para.split(',');
paraArr.forEach(it => { paraArr.forEach(it => {
if(it.trim()){ if (it.trim()) {
arr.push(it.trim()) arr.push(it.trim());
} }
}) });
} }
return arr; return arr;
}; }
function dealRandomAssignees (assignees, randomTo) { function dealRandomAssignees(assignees, randomTo) {
let arr = dealStringToArr(assignees); let arr = dealStringToArr(assignees);
if (randomTo && Number(randomTo) > 0 && Number(randomTo) < arr.length) { if (randomTo && Number(randomTo) > 0 && Number(randomTo) < arr.length) {
arr = sampleSize(arr, randomTo); arr = sampleSize(arr, randomTo);
} }
return arr; return arr;
}; }
function matchKeyword (content, keywords) { function matchKeyword(content, keywords) {
return keywords.find(item => content.toLowerCase().includes(item)); return keywords.find(item => content.toLowerCase().includes(item));
}; }
function testDuplicate(body) { function testDuplicate(body) {
if (!body || !body.startsWith('Duplicate of')) { if (!body || !body.startsWith('Duplicate of')) {
@@ -40,16 +40,29 @@ function testDuplicate(body) {
} else { } else {
return false; return false;
} }
}; }
function getPreMonth (m) { function getPreMonth(m) {
return m == 1 ? 12 : m -1; 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 = { module.exports = {
dealStringToArr, dealStringToArr,
dealRandomAssignees, dealRandomAssignees,
getPreMonth, getPreMonth,
matchKeyword, matchKeyword,
testDuplicate, testDuplicate,
checkPermission,
}; };

2632
yarn.lock

File diff suppressed because it is too large Load Diff