Compare commits

..

9 Commits
v1.6 ... v1.7

Author SHA1 Message Date
xrkffgg
c70fbba1bd 🤖 auto: updated dist 2021-01-02 15:02:14 +00:00
xrkffgg
ffe8047e9a perf: update text 2021-01-02 23:01:24 +08:00
xrkffgg
d8f67aa451 docs: fix emoji 2021-01-02 22:51:52 +08:00
xrkffgg
c604486551 feat: add month-statistics && fix bug (#27)
* wip

* wip

* fix

* fix

* test

* test

* fix

* fix

* fix

* fix

* add

* opt

* update

* add changelog

* remove version

* fix

* a

* Update README.md

* a

* Update .umirc.dev.ts
2021-01-02 22:47:40 +08:00
xrkffgg
80c1fcca98 chore: add update-user (#26)
* chore: add update-user

* fix link
2020-12-31 22:23:41 +08:00
xrkffgg
dc73f4f963 Update README.en-US.md 2020-12-31 16:56:28 +08:00
xrkffgg
da4725492d chore: add gitee 2020-12-31 15:50:06 +08:00
xrkffgg
7668c4b549 docs: add gitee 2020-12-31 15:14:13 +08:00
xrkffgg
b769c20e3f chore: update site & dumi version (#25) 2020-12-31 14:27:48 +08:00
24 changed files with 2315 additions and 1848 deletions

View File

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

View File

@@ -11,6 +11,7 @@ export default defineConfig({
logo:
'https://avatars1.githubusercontent.com/u/73879334?s=200&v=4',
exportStatic: {},
ssr: {},
outputPath: 'docs-dist',
hash: true,
base: `/${name}/`,
@@ -28,6 +29,7 @@ export default defineConfig({
{ title: '基 础', path: '/base' },
{ title: '进 阶', path: '/advanced' },
{ title: '更新日志', path: '/changelog' },
{ title: '国内镜像', path: 'https://issues-helper.gitee.io' },
{ title: 'GitHub', path: 'https://github.com/actions-cool/issues-helper' },
],
'en-US': [
@@ -73,10 +75,6 @@ export default defineConfig({
.markdown table {
width: auto !important;
}
.__dumi-default-code-block + table {
margin-top: 16px;
}
`,
]
});

View File

@@ -1,3 +1,12 @@
## v1.7
`2021.01.02`
- [#27](https://github.com/actions-cool/issues-helper/pull/27)
- feat: add `month-statistics`
- fix: query issues less because pages max 100
- fix: js nested `require`
## v1.6
`2020.12.30`

View File

@@ -43,12 +43,13 @@ When the following list does not have the features you want, you can submit it i
- [`update-comment`](#update-comment)
- [`update-issue`](#update-issue)
- [`welcome`](#welcome)
- Advanced
- 🌟 Advanced
- [`check-inactive`](#check-inactive)
- [`check-issue`](#check-issue)
- [`close-issues`](#close-issues)
- [`find-comments`](#find-comments)
- [`lock-issues`](#lock-issues)
- [`month-statistics`](#month-statistics)
- 🌰 Example
- [`find-comments + create-comment + update-comment`](#find-comments--create-comment--update-comment)
@@ -74,7 +75,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Add assigness
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'add-assignees'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -82,18 +83,18 @@ jobs:
assignees: 'xxx' or 'xx1,xx2'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| assignees | Designated person. No operation when no input or empty character | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| assignees | Designated person. No operation when no input or empty character | string | ✖ |
- `actions` support multiple and separated by comma. Like: `add-assignees,add-labels`
- The `name` can be modified according to the actual situation
- [Reference to on](#github-docs)
- `${{ github.event.issue.number }}` is the current issue. [More references](https://docs.github.com/en/free-pro-team@latest/developers/webhooks-and-events)
- `assignees` support multiple and separated by comma. Pay attention to multiple settings, you need to use the version above v1.1
- `assignees` support multiple and separated by comma
⏫ [Back to list](#List)
@@ -114,7 +115,7 @@ jobs:
if: contains(github.event.issue.body, 'xxx') == false
steps:
- name: Add labels
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -122,14 +123,14 @@ jobs:
labels: 'bug' or 'xx1,xx2'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| labels | New labels. When it is not filled in or is empty character, do not add | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| labels | New labels. When it is not filled in or is empty character, do not add | string | ✖ |
- `labels` support multiple and separated by comma. Pay attention to multiple settings, you need to use the version above v1.1
- `labels` support multiple and separated by comma
⏫ [Back to list](#List)
@@ -139,7 +140,7 @@ Close the specified issue.
```yml
- name: Close issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -147,11 +148,11 @@ Close the specified issue.
body: 'This is auto closed.'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
⏫ [Back to list](#List)
@@ -172,7 +173,7 @@ jobs:
if: github.event.label.name == 'xxx'
steps:
- name: Create comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -184,19 +185,19 @@ jobs:
contents: '+1' or '+1,heart'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| body | Add comment content | string | ✖ | v1 |
| contents | Add [reaction](#reactions-types) | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| body | Add comment content | string | ✖ |
| contents | Add [reaction](#reactions-types) | string | ✖ |
- `body` default is `Currently at ${owner}/${repo}. And this is default comment.`
- Where `${owner}/${repo}` means the current repo
- Return `comment-id`, which can be used for subsequent operations. [Usage reference](#outputs-use)
- `${{ github.event.issue.user.login }}` indicates the creator of the issue
- `contents` support multiple and separated by comma. Pay attention to multiple settings, you need to use the version above v1.1
- `contents` support multiple and separated by comma
⏫ [Back to list](#List)
@@ -216,7 +217,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Create issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -227,15 +228,15 @@ jobs:
contents: '+1'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| title | The title of the new issue | string | ✖ | v1 |
| body | The body of the new issue | string | ✖ | v1 |
| labels | The labels for the new issue | string | ✖ | v1.1 |
| assignees | The assignees for the new issue | string | ✖ | v1.1 |
| contents | Add [reaction](#reactions-types) | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| title | The title of the new issue | string | ✖ |
| body | The body of the new issue | string | ✖ |
| labels | The labels for the new issue | string | ✖ |
| assignees | The assignees for the new issue | string | ✖ |
| contents | Add [reaction](#reactions-types) | string | ✖ |
- `title` default is `Default Title`
- Return `issue-number`. [Usage reference](#outputs-use)
@@ -248,18 +249,18 @@ According to [`comment-id`](#comment-id) delete the specified comment.
```yml
- name: Delete comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'delete-comment'
token: ${{ secrets.GITHUB_TOKEN }}
comment-id: xxx
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| comment-id | The comment ID | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| comment-id | The comment ID | number | ✔ |
⏫ [Back to list](#List)
@@ -280,18 +281,18 @@ jobs:
if: github.event.label.name == 'invalid'
steps:
- name: Lock issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'lock-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
⏫ [Back to list](#List)
@@ -311,21 +312,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: mark-duplicate
uses: actions-cool/issues-helper@v1.5
uses: actions-cool/issues-helper@v1.7
with:
actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }}
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1.5 |
| token | [Token explain](#token) | string | ✔ | v1.5 |
| duplicate-command | Simple commands can be set, such as: `/d` | string | ✖ | v1.6 |
| duplicate-labels | Add additional labels to this issue | string | ✖ | v1.5 |
| labels | Replace the labels of the issue | string | ✖ | v1.5 |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ | v1.5 |
| close-issue | Whether to close the issue at the same time | string | ✖ | v1.6 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| duplicate-command | Simple commands can be set, such as: `/d` | string | ✖ |
| duplicate-labels | Add additional labels to this issue | string | ✖ |
| labels | Replace the labels of the issue | string | ✖ |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ |
| close-issue | Whether to close the issue at the same time | string | ✖ |
- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`
- `close-issue`: Both `true` or `'true'` can take effect
@@ -338,18 +339,18 @@ Open the specified issue.
```yml
- name: Open issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'open-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: xxx
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
⏫ [Back to list](#List)
@@ -359,7 +360,7 @@ Remove the person designated by issue.
```yml
- name: Remove assignees
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'remove-assignees'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -367,12 +368,12 @@ Remove the person designated by issue.
assignees: 'xx'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| assignees | Designated person removed. When it is an empty character, do not remove | string | ✔ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| assignees | Designated person removed. When it is an empty character, do not remove | string | ✔ |
⏫ [Back to list](#List)
@@ -382,7 +383,7 @@ Remove the specified labels.
```yml
- name: Remove labels
uses: actions-cool/issues-helper@v1.2
uses: actions-cool/issues-helper@v1.7
with:
actions: 'remove-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -390,12 +391,12 @@ Remove the specified labels.
labels: 'xx'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1.2 |
| token | [Token explain](#token) | string | ✔ | v1.2 |
| issue-number | The number of issue | number | ✔ | v1.2 |
| labels | The removed labels. When it is a blank character, do not remove | string | ✔ | v1.2 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| labels | The removed labels. When it is a blank character, do not remove | string | ✔ |
- `labels` supports multiple, such as `x1,x2,x3`, only the labels added by the issue will be removed
@@ -407,7 +408,7 @@ Replace the labels of issue.
```yml
- name: Set labels
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'set-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -415,12 +416,12 @@ Replace the labels of issue.
labels: 'xx'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| labels | labels set. When empty characters, will remove all | string | ✔ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| labels | labels set. When empty characters, will remove all | string | ✔ |
⏫ [Back to list](#List)
@@ -430,18 +431,18 @@ Unlock the specified issue.
```yml
- name: Unlock issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'unlock-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
⏫ [Back to list](#List)
@@ -463,7 +464,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Update comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -471,14 +472,14 @@ jobs:
contents: 'eyes'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| comment-id | The comment ID | number | ✔ | v1 |
| body | Update the content of comment | string | ✖ | v1 |
| update-mode | Update mode. Default `replace`, another `append` | string | ✖ | v1 |
| contents | Add [reaction](#reactions-types) | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| comment-id | The comment ID | number | ✔ |
| body | Update the content of comment | string | ✖ |
| update-mode | Update mode. Default `replace`, another `append` | string | ✖ |
| contents | Add [reaction](#reactions-types) | string | ✖ |
- When `body` is not entered, it will remain as it is
- When `update-mode` is `append`, additional operations will be performed. Anything other than `append` will be replaced. Only effective for `body`
@@ -491,7 +492,7 @@ Update the specified issue according to the `issue-number`.
```yml
- name: Update issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -505,18 +506,18 @@ Update the specified issue according to the `issue-number`.
contents: '+1'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| state | Modify the status of issue, optional value `open` `closed` | string | ✖ | v1 |
| title | Modify the title of the issue | string | ✖ | v1 |
| body | Modify the content of issue | string | ✖ | v1 |
| update-mode | Update mode. Default `replace`, another `append` | string | ✖ | v1 |
| labels | Replace the labels of issue | string | ✖ | v1.1 |
| assignees | Replace the assignees of issue | string | ✖ | v1.1 |
| contents | Add [reaction](#reactions-types) | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| state | Modify the status of issue, optional value `open` `closed` | string | ✖ |
| title | Modify the title of the issue | string | ✖ |
| body | Modify the content of issue | string | ✖ |
| update-mode | Update mode. Default `replace`, another `append` | string | ✖ |
| labels | Replace the labels of issue | string | ✖ |
| assignees | Replace the assignees of issue | string | ✖ |
| contents | Add [reaction](#reactions-types) | string | ✖ |
- `state` defaults to `open`
- When the option is not filled, it will keep the original
@@ -541,7 +542,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: welcome
uses: actions-cool/issues-helper@v1.3
uses: actions-cool/issues-helper@v1.7
with:
actions: 'welcome'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -551,14 +552,14 @@ jobs:
issue-contents: '+1, -1, eyes'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1.3 |
| token | [Token explain](#token) | string | ✔ | v1.3 |
| body | Comment on the welcome content, no comment if you leave it blank | string | ✖ | v1.3 |
| labels | Add labels to this issue | string | ✖ | v1.3 |
| assignees | Add assignees to this issue | string | ✖ | v1.3 |
| issue-contents | Add [reaction](#reactions-types) to this issue| string | ✖ | v1.3 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| body | Comment on the welcome content, no comment if you leave it blank | string | ✖ |
| labels | Add labels to this issue | string | ✖ |
| assignees | Add assignees to this issue | string | ✖ |
| issue-contents | Add [reaction](#reactions-types) to this issue| string | ✖ |
- If these 4 options are not filled, no operation
@@ -584,28 +585,28 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: check-inactive
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'check-inactive'
token: ${{ secrets.GITHUB_TOKEN }}
inactive-day: 30
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ | v1 |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ | v1 |
| labels | Labels filtering | string | ✖ | v1.1 |
| issue-state | State filtering | string | ✖ | v1 |
| issue-assignee | Assignee filtering | string | ✖ | v1 |
| issue-creator | Creator filtering | string | ✖ | v1 |
| issue-mentioned | Mentioned filtering | string | ✖ | v1 |
| body-includes | Body filtering | string | ✖ | v1 |
| title-includes | Title filtering | string | ✖ | v1 |
| inactive-day | Inactive days filtering | number | ✖ | v1.4 |
| inactive-label | The label name adding | string | ✖ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ |
| labels | Labels filtering | string | ✖ |
| issue-state | State filtering | string | ✖ |
| issue-assignee | Assignee filtering | string | ✖ |
| issue-creator | Creator filtering | string | ✖ |
| issue-mentioned | Mentioned filtering | string | ✖ |
| body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
| inactive-label | The label name adding | string | ✖ |
- `labels`: When there are multiple, the query will have multiple at the same time. If not entered, all
- `issue-state`: The default is `all`. Optional value `open` `closed`, when these 2 items are not, both are `all`
@@ -637,7 +638,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: check-issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'check-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -646,14 +647,14 @@ jobs:
title-includes: 'x1,x2/y1,y2'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1.2 |
| token | [Token explain](#token) | string | ✔ | v1.2 |
| issue-number | The number of issue | number | ✔ | v1.2 |
| assignee-includes | Assignees contains check | string | ✖ | v1.2 |
| title-includes | Title contains check | string | ✖ | v1.2 |
| body-includes | Body contains check | string | ✖ | v1.2 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| assignee-includes | Assignees contains check | string | ✖ |
| title-includes | Title contains check | string | ✖ |
| body-includes | Body contains check | string | ✖ |
- `title-includes` `body-includes` supports the format `x1,x2` or `x1,x2/y1,y2`. Only supports two levels
- Return `check-result`
@@ -676,7 +677,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: close-issues
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'close-issues'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -684,19 +685,19 @@ jobs:
inactive-day: 7
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ | v1 |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ | v1 |
| labels | Labels filtering | string | ✖ | v1.1 |
| issue-assignee | Assignee filtering | string | ✖ | v1 |
| issue-creator | Creator filtering | string | ✖ | v1 |
| issue-mentioned | Mentioned filtering | string | ✖ | v1 |
| body-includes | Body filtering | string | ✖ | v1 |
| title-includes | Title filtering | string | ✖ | v1 |
| inactive-day | Inactive days filtering | number | ✖ | v1.4 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ |
| labels | Labels filtering | string | ✖ |
| issue-assignee | Assignee filtering | string | ✖ |
| issue-creator | Creator filtering | string | ✖ |
| issue-mentioned | Mentioned filtering | string | ✖ |
| body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
- `labels`: When there are multiple, the query will have multiple at the same time. If not entered, all
- `issue-assignee`: Multiplayer is not supported. If you do not enter or enter *, all will be searched. Entering `none` will query issues for which the specified person is not added
@@ -710,7 +711,7 @@ Find the current warehouse issue No. 1, the creator is k and the content contain
```yml
- name: Find comments
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'find-comments'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -719,14 +720,14 @@ Find the current warehouse issue No. 1, the creator is k and the content contain
body-includes: 'this'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| comment-auth | Comment creator, all will be queried if not filled | string | ✖ | v1 |
| body-includes | Comment content includes filtering, no verification if not filled | string | ✖ | v1 |
| direction | Return `comments` sort | string | ✖ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| comment-auth | Comment creator, all will be queried if not filled | string | ✖ |
| body-includes | Comment content includes filtering, no verification if not filled | string | ✖ |
| direction | Return `comments` sort | string | ✖ |
- Return `comments` in the following format:
@@ -758,7 +759,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: lock-issues
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'lock-issues'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -766,20 +767,20 @@ jobs:
inactive-day: 128
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](#token) | string | ✔ | v1 |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ | v1 |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ | v1 |
| labels | Labels filtering | string | ✖ | v1.1 |
| issue-state | State filtering | string | ✖ | v1 |
| issue-assignee | Assignee filtering | string | ✖ | v1 |
| issue-creator | Creator filtering | string | ✖ | v1 |
| issue-mentioned | Mentioned filtering | string | ✖ | v1 |
| body-includes | Body filtering | string | ✖ | v1 |
| title-includes | Title filtering | string | ✖ | v1 |
| inactive-day | Inactive days filtering | number | ✖ | v1.4 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ |
| contents | Add [reaction](#reactions-types) for this comment | string | ✖ |
| labels | Labels filtering | string | ✖ |
| issue-state | State filtering | string | ✖ |
| issue-assignee | Assignee filtering | string | ✖ |
| issue-creator | Creator filtering | string | ✖ |
| issue-mentioned | Mentioned filtering | string | ✖ |
| body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
- `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`
@@ -788,6 +789,44 @@ jobs:
⏫ [Back to list](#List)
#### `month-statistics`
At 1 o'clock on the 1st of each month, an issue is generated for the statistics of the previous month.
```
name: Issue Month Statistics
on:
schedule:
- cron: "0 1 1 * *"
jobs:
month-statistics:
runs-on: ubuntu-latest
steps:
- name: month-statistics
uses: actions-cool/issues-helper@v1.7
with:
actions: 'month-statistics'
token: ${{ secrets.GITHUB_TOKEN }}
count-lables: 'true'
```
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](#token) | string | ✔ |
| labels | The labels for the new issue | string | ✖ |
| assignees | The assignees for the new issue | string | ✖ |
| count-lables | Whether the new issue count labels | string | ✖ |
| count-comments | Whether the new issue count comments | string | ✖ |
- The new issue title defaults to `[Current repo] Month Statistics: Year-Month`
- `count-lables`: You can set `'true'` to add labels statistics
- `count-comments`: You can set `'true'` to add comments statistics
⏫ [Back to list](#List)
## 🌰 Example
Flexible reference.
@@ -809,7 +848,7 @@ jobs:
if: github.event.label.name == 'watch'
steps:
- name: find comments
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
id: fcid
with:
actions: 'find-comments'
@@ -820,7 +859,7 @@ jobs:
- name: create comment
if: ${{ steps.fcid.outputs.comments.length == 0 }}
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -829,7 +868,7 @@ jobs:
- name: update comment
if: ${{ steps.fcid.outputs.comments.length == 1 }}
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -861,7 +900,7 @@ When the token is not filled in actions or the corresponding secrets are not add
```yml
- name: Create issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
id: createissue
with:
actions: 'create-issue'
@@ -936,7 +975,6 @@ Click the `···` icon in the upper right corner of a comment, select `Copy lin
- v1 represents the initial 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, release the advanced v2 version
- The parameters in the API must use the largest version and above
- 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)
@@ -961,50 +999,33 @@ You can come to the following repositories for reference. Please leave a message
At the same time, if you have any questions during use, you can also ask and inquire in the issue or discussion.
<table>
<tr>
<td align="center">
<a href="https://github.com/ant-design/ant-design">
<img src="https://avatars1.githubusercontent.com/u/12101536?s=200&v=4" width="46" />
</a>
</td>
<td align="center">
<a href="https://github.com/vueComponent/ant-design-vue">
<img src="https://avatars2.githubusercontent.com/u/32120805?s=200&v=4" width="46" />
</a>
</td>
<td align="center">
<a href="https://github.com/umijs/dumi">
<img src="https://avatars2.githubusercontent.com/u/33895495?s=200&v=4" width="46" />
</a>
</td>
<td align="center">
<a href="https://github.com/umijs/umi">
<img src="https://avatars2.githubusercontent.com/u/33895495?s=200&v=4" width="46" />
</a>
</td>
<td align="center">
<a href="https://github.com/AttoJS/vue-request">
<img src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png" width="46" />
</a>
</td>
</tr>
<tr>
<td align="center" width="160">
<strong>ant-design</strong>
</td>
<td align="center" width="160">
<strong>ant-design-vue</strong>
</td>
<td align="center" width="160">
<strong>dumi</strong>
</td>
<td align="center" width="160">
<strong>umi</strong>
</td>
<td align="center" width="160">
<strong>vue-request</strong>
</td>
</tr>
<tr>
<td align="center"><a href="https://github.com/ant-design/ant-design"><img src="https://avatars1.githubusercontent.com/u/12101536?s=200&v=4" width="46" /></a></td>
<td align="center"><a href="https://github.com/vueComponent/ant-design-vue"><img src="https://avatars1.githubusercontent.com/u/32120805?s=200&v=4" width="46" /></a></td>
<td align="center"><a href="https://github.com/umijs/dumi"><img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46" /></a></td>
<td align="center"><a href="https://github.com/mui-org/material-ui"><img src="https://avatars2.githubusercontent.com/u/33663932?s=200&v=4" width="46" /></a></td>
<td align="center"><a href="https://github.com/umijs/umi"><img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46" /></a></td>
</tr>
<tr>
<td width="160" align="center">ant-design</td>
<td width="160" align="center">ant-design-vue</td>
<td width="160" align="center">dumi</td>
<td width="160" align="center">material-ui</td>
<td width="160" align="center">umi</td>
</tr><tr>
<td align="center"><a href="https://github.com/AttoJS/vue-request"><img src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png" width="46" /></a></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td width="160" align="center">vue-request</td>
<td width="160" align="center"></td>
<td width="160" align="center"></td>
<td width="160" align="center"></td>
<td width="160" align="center"></td>
</tr>
</table>
## LICENSE

507
README.md
View File

@@ -12,7 +12,7 @@
一个轻松帮你自动管理 issues 的 GitHub Action
[在线文档](https://actions-cool.github.io/issues-helper/) | [更新日志](https://github.com/actions-cool/issues-helper/blob/main/CHANGELOG.md)
[在线文档](https://actions-cool.github.io/issues-helper/) | [更新日志](https://github.com/actions-cool/issues-helper/blob/main/CHANGELOG.md) | [国内镜像](https://issues-helper.gitee.io/)
## 😎 为什么用 GitHub Action
@@ -43,12 +43,13 @@
- [`update-comment`](#update-comment)
- [`update-issue`](#update-issue)
- [`welcome`](#welcome)
- 进 阶
- 🌟 进 阶
- [`check-inactive`](#check-inactive)
- [`check-issue`](#check-issue)
- [`close-issues`](#close-issues)
- [`find-comments`](#find-comments)
- [`lock-issues`](#lock-issues)
- [`month-statistics`](#month-statistics)
- 🌰 例 子
- [`find-comments + create-comment + update-comment`](#find-comments--create-comment--update-comment)
@@ -74,7 +75,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Add assigness
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'add-assignees'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -82,18 +83,18 @@ jobs:
assignees: 'xxx' or 'xx1,xx2'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| assignees | 指定人。当不填或者为空字符时,不操作 | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| assignees | 指定人。当不填或者为空字符时,不操作 | string | ✖ |
- `actions` 支持多个,需用逗号隔开。如:`add-assignees,add-labels`
- 其中的 `name` 可根据自行根据实际情况修改
- [on 参考](#github-docs)
- `${{ github.event.issue.number }}` 表示当前 issue[更多参考](https://docs.github.com/en/free-pro-team@latest/developers/webhooks-and-events)
- `assignees` 支持多个,需用逗号隔开。注意设置多个需使用v1.1以上版本
- `assignees` 支持多个,需用逗号隔开
⏫ [返回列表](#列-表)
@@ -114,7 +115,7 @@ jobs:
if: contains(github.event.issue.body, 'xxx') == false
steps:
- name: Add labels
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -122,14 +123,14 @@ jobs:
labels: 'bug' or 'bug1,bug2'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| labels | 新增的 labels。当不填或者为空字符时不新增 | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| labels | 新增的 labels。当不填或者为空字符时不新增 | string | ✖ |
- `labels` 支持多个,需用逗号隔开。注意设置多个需使用v1.1以上版本
- `labels` 支持多个,需用逗号隔开
⏫ [返回列表](#列-表)
@@ -139,7 +140,7 @@ jobs:
```yml
- name: Close issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -147,11 +148,11 @@ jobs:
body: 'This is auto closed.'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
⏫ [返回列表](#列-表)
@@ -172,7 +173,7 @@ jobs:
if: github.event.label.name == 'xxx'
steps:
- name: Create comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -184,19 +185,19 @@ jobs:
contents: '+1' or '+1,heart'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| body | 新增评论的内容 | string | ✖ | v1 |
| contents | 为新增评论的增加 [reaction](#reactions-types) | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| body | 新增评论的内容 | string | ✖ |
| contents | 为新增评论的增加 [reaction](#reactions-types) | string | ✖ |
- `body` 默认为:`Currently at ${owner}/${repo}. And this is default comment.`
- 其中 `${owner}/${repo}` 表示当前仓库
- 返回 `comment-id`,可用于之后操作。[用法参考](#outputs-使用)
- `${{ github.event.issue.user.login }}` 表示该 issue 的创建者
- `contents` 支持多个,需用逗号隔开。注意设置多个需使用v1.1以上版本
- `contents` 支持多个,需用逗号隔开
⏫ [返回列表](#列-表)
@@ -216,7 +217,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Create issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -227,15 +228,15 @@ jobs:
contents: '+1'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| title | 新增 issue 的标题 | string | ✖ | v1 |
| body | 新增 issue 的内容 | string | ✖ | v1 |
| labels | 为新增 issue 添加 labels | string | ✖ | v1.1 |
| assignees | 为新增 issue 添加 assignees | string | ✖ | v1.1 |
| contents | 为新增 issue 增加 [reaction](#reactions-types) | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| title | 新增 issue 的标题 | string | ✖ |
| body | 新增 issue 的内容 | string | ✖ |
| labels | 为新增 issue 添加 labels | string | ✖ |
| assignees | 为新增 issue 添加 assignees | string | ✖ |
| contents | 为新增 issue 增加 [reaction](#reactions-types) | string | ✖ |
- `title` 默认为:`Default Title`
- 返回 `issue-number`[用法参考](#outputs-使用)
@@ -248,18 +249,18 @@ jobs:
```yml
- name: Delete comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'delete-comment'
token: ${{ secrets.GITHUB_TOKEN }}
comment-id: xxx
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| comment-id | 指定的 comment | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| comment-id | 指定的 comment | number | ✔ |
⏫ [返回列表](#列-表)
@@ -280,18 +281,18 @@ jobs:
if: github.event.label.name == 'invalid'
steps:
- name: Lock issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'lock-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
⏫ [返回列表](#列-表)
@@ -311,21 +312,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: mark-duplicate
uses: actions-cool/issues-helper@v1.5
uses: actions-cool/issues-helper@v1.7
with:
actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }}
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1.5 |
| token | [token 说明](#token) | string | ✔ | v1.5 |
| duplicate-command | 可设置简洁命令,如:`/d` | string | ✖ | v1.6 |
| duplicate-labels | 为该 issue 额外增加 labels | string | ✖ | v1.5 |
| labels | 替换该 issue 的 labels | string | ✖ | v1.5 |
| contents | 为该评论的增加 [reaction](#reactions-types) | string | ✖ | v1.5 |
| close-issue | 是否同时关闭该 issue | string | ✖ | v1.6 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| duplicate-command | 可设置简洁命令,如:`/d` | string | ✖ |
| duplicate-labels | 为该 issue 额外增加 labels | string | ✖ |
| labels | 替换该 issue 的 labels | string | ✖ |
| contents | 为该评论的增加 [reaction](#reactions-types) | string | ✖ |
| close-issue | 是否同时关闭该 issue | string | ✖ |
- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`
- `close-issue``true``'true'` 均可生效
@@ -338,18 +339,18 @@ jobs:
```yml
- name: Open issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'open-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: xxx
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
⏫ [返回列表](#列-表)
@@ -359,7 +360,7 @@ jobs:
```yml
- name: Remove assignees
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'remove-assignees'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -367,12 +368,12 @@ jobs:
assignees: 'xx'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| assignees | 移除的指定人。当为空字符时,不进行移除 | string | ✔ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| assignees | 移除的指定人。当为空字符时,不进行移除 | string | ✔ |
⏫ [返回列表](#列-表)
@@ -382,7 +383,7 @@ jobs:
```yml
- name: Remove labels
uses: actions-cool/issues-helper@v1.2
uses: actions-cool/issues-helper@v1.7
with:
actions: 'remove-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -390,12 +391,12 @@ jobs:
labels: 'xx'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1.2 |
| token | [token 说明](#token) | string | ✔ | v1.2 |
| issue-number | 指定的 issue | number | ✔ | v1.2 |
| labels | 移除的 labels。当为空字符时不进行移除 | string | ✔ | v1.2 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| labels | 移除的 labels。当为空字符时不进行移除 | string | ✔ |
- `labels` 支持多个,如 `x1,x2,x3`,只会移除 issue 已添加的 labels
@@ -407,7 +408,7 @@ jobs:
```yml
- name: Set labels
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'set-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -415,12 +416,12 @@ jobs:
labels: 'xx'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| labels | labels 设置。当空字符时,会移除所有 | string | ✔ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| labels | labels 设置。当空字符时,会移除所有 | string | ✔ |
⏫ [返回列表](#列-表)
@@ -430,18 +431,18 @@ jobs:
```yml
- name: Unlock issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'unlock-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
⏫ [返回列表](#列-表)
@@ -463,7 +464,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Update comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -471,14 +472,14 @@ jobs:
contents: 'eyes'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| comment-id | 指定的 comment | number | ✔ | v1 |
| body | 更新 comment 的内容 | string | ✖ | v1 |
| update-mode | 更新模式。默认 `replace` 替换,`append` 附加 | string | ✖ | v1 |
| contents | 增加 [reaction](#reactions-types) | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| comment-id | 指定的 comment | number | ✔ |
| body | 更新 comment 的内容 | string | ✖ |
| update-mode | 更新模式。默认 `replace` 替换,`append` 附加 | string | ✖ |
| contents | 增加 [reaction](#reactions-types) | string | ✖ |
- `body` 不填时,会保持原有
- `update-mode``append` 时,会进行附加操作。非 `append` 都会进行替换。仅对 `body` 生效
@@ -491,7 +492,7 @@ jobs:
```yml
- name: Update issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -505,18 +506,18 @@ jobs:
contents: '+1'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| state | 修改 issue 的状态,可选值 `open` `closed` | string | ✖ | v1 |
| title | 修改 issue 的标题 | string | ✖ | v1 |
| body | 修改 issue 的内容 | string | ✖ | v1 |
| update-mode | 更新模式。默认 `replace` 替换,`append` 附加 | string | ✖ | v1 |
| labels | 替换 issue 的 labels | string | ✖ | v1.1 |
| assignees | 替换 issue 的 assignees | string | ✖ | v1.1 |
| contents | 增加 [reaction](#reactions-types) | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| state | 修改 issue 的状态,可选值 `open` `closed` | string | ✖ |
| title | 修改 issue 的标题 | string | ✖ |
| body | 修改 issue 的内容 | string | ✖ |
| update-mode | 更新模式。默认 `replace` 替换,`append` 附加 | string | ✖ |
| labels | 替换 issue 的 labels | string | ✖ |
| assignees | 替换 issue 的 assignees | string | ✖ |
| contents | 增加 [reaction](#reactions-types) | string | ✖ |
- `state` 默认为 `open`
- 当可选项不填时,会保持原有
@@ -539,7 +540,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: welcome
uses: actions-cool/issues-helper@v1.3
uses: actions-cool/issues-helper@v1.7
with:
actions: 'welcome'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -549,14 +550,14 @@ jobs:
issue-contents: '+1, -1, eyes'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1.3 |
| token | [token 说明](#token) | string | ✔ | v1.3 |
| body | 评论欢迎的内容,不填则不评论 | string | ✖ | v1.3 |
| labels | 为该 issue 增加 labels | string | ✖ | v1.3 |
| assignees | 为该 issue 增加 assignees | string | ✖ | v1.3 |
| issue-contents | 为该 issue 增加 [reaction](#reactions-types) | string | ✖ | v1.3 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| body | 评论欢迎的内容,不填则不评论 | string | ✖ |
| labels | 为该 issue 增加 labels | string | ✖ |
| assignees | 为该 issue 增加 assignees | string | ✖ |
| issue-contents | 为该 issue 增加 [reaction](#reactions-types) | string | ✖ |
- 若这 4 个可选项都不填,则无操作
@@ -582,31 +583,31 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: check-inactive
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'check-inactive'
token: ${{ secrets.GITHUB_TOKEN }}
inactive-day: 30
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ | v1 |
| contents | 为该评论增加 [reaction](#reactions-types) | string | ✖ | v1 |
| labels | 标签筛选 | string | ✖ | v1.1 |
| issue-state | 状态筛选 | string | ✖ | v1 |
| issue-assignee | 指定人筛选 | string | ✖ | v1 |
| issue-creator | 创建人筛选 | string | ✖ | v1 |
| issue-mentioned | 提及人筛选 | string | ✖ | v1 |
| body-includes | 包含内容筛选 | string | ✖ | v1 |
| title-includes | 包含标题筛选 | string | ✖ | v1 |
| inactive-day | 非活跃天数筛选 | number | ✖ | v1.4 |
| inactive-label | 新增标签名称 | string | ✖ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ |
| contents | 为该评论增加 [reaction](#reactions-types) | string | ✖ |
| labels | 标签筛选 | string | ✖ |
| issue-state | 状态筛选 | string | ✖ |
| issue-assignee | 指定人筛选 | string | ✖ |
| issue-creator | 创建人筛选 | string | ✖ |
| issue-mentioned | 提及人筛选 | string | ✖ |
| body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
| inactive-label | 新增标签名称 | string | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-state`:默认为 `all`。可选值 `open` `closed`,非这 2 项时,均为 `all`
- `issue-state`:默认为 `open`。可选值 `all` `closed`,非这 2 项时,均为 `open`
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
- `inactive-label`:默认为 `inactive`,可自定义其他。当项目未包含该 label 时,会自动新建
@@ -631,7 +632,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: check-issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'check-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -640,14 +641,14 @@ jobs:
title-includes: 'x1,x2/y1,y2'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1.2 |
| token | [token 说明](#token) | string | ✔ | v1.2 |
| issue-number | 指定的 issue | number | ✔ | v1.2 |
| assignee-includes | 是否包含指定人 | string | ✖ | v1.2 |
| title-includes | 标题包含校验 | string | ✖ | v1.2 |
| body-includes | 内容包含校验 | string | ✖ | v1.2 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| assignee-includes | 是否包含指定人 | string | ✖ |
| title-includes | 标题包含校验 | string | ✖ |
| body-includes | 内容包含校验 | string | ✖ |
- `title-includes` `body-includes` 支持格式 `x1,x2` 或者 `x1,x2/y1,y2`。只支持两个层级
- 返回 `check-result`
@@ -670,7 +671,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: close-issues
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'close-issues'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -678,19 +679,19 @@ jobs:
inactive-day: 7
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ | v1 |
| contents | 为该评论增加 [reaction](#reactions-types) | string | ✖ | v1 |
| labels | 标签筛选 | string | ✖ | v1.1 |
| issue-assignee | 指定人筛选 | string | ✖ | v1 |
| issue-creator | 创建人筛选 | string | ✖ | v1 |
| issue-mentioned | 提及人筛选 | string | ✖ | v1 |
| body-includes | 包含内容筛选 | string | ✖ | v1 |
| title-includes | 包含标题筛选 | string | ✖ | v1 |
| inactive-day | 非活跃天数筛选 | number | ✖ | v1.4 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ |
| contents | 为该评论增加 [reaction](#reactions-types) | string | ✖ |
| labels | 标签筛选 | string | ✖ |
| issue-assignee | 指定人筛选 | string | ✖ |
| issue-creator | 创建人筛选 | string | ✖ |
| issue-mentioned | 提及人筛选 | string | ✖ |
| body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
@@ -704,7 +705,7 @@ jobs:
```yml
- name: Find comments
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'find-comments'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -713,14 +714,14 @@ jobs:
body-includes: 'this'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| comment-auth | 评论创建者,不填时会查询所有 | string | ✖ | v1 |
| body-includes | 评论内容包含过滤,不填时无校验 | string | ✖ | v1 |
| direction | 返回 `comments` 排序 | string | ✖ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| comment-auth | 评论创建者,不填时会查询所有 | string | ✖ |
| body-includes | 评论内容包含过滤,不填时无校验 | string | ✖ |
| direction | 返回 `comments` 排序 | string | ✖ |
- 返回 `comments`,格式如下:
@@ -752,7 +753,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: lock-issues
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'lock-issues'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -760,28 +761,66 @@ jobs:
inactive-day: 128
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](#token) | string | ✔ | v1 |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ | v1 |
| contents | 为该评论增加 [reaction](#reactions-types) | string | ✖ | v1 |
| labels | 标签筛选 | string | ✖ | v1.1 |
| issue-state | 状态筛选 | string | ✖ | v1 |
| issue-assignee | 指定人筛选 | string | ✖ | v1 |
| issue-creator | 创建人筛选 | string | ✖ | v1 |
| issue-mentioned | 提及人筛选 | string | ✖ | v1 |
| body-includes | 包含内容筛选 | string | ✖ | v1 |
| title-includes | 包含标题筛选 | string | ✖ | v1 |
| inactive-day | 非活跃天数筛选 | number | ✖ | v1.4 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ |
| contents | 为该评论增加 [reaction](#reactions-types) | string | ✖ |
| labels | 标签筛选 | string | ✖ |
| issue-state | 状态筛选 | string | ✖ |
| issue-assignee | 指定人筛选 | string | ✖ |
| issue-creator | 创建人筛选 | string | ✖ |
| issue-mentioned | 提及人筛选 | string | ✖ |
| body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-state`:默认为 `all`。可选值 `open` `closed`,非这 2 项时,均为 `all`
- `issue-state`:默认为 `open`。可选值 `all` `closed`,非这 2 项时,均为 `open`
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
⏫ [返回列表](#列-表)
#### `month-statistics`
每月 1 号 1 时,生成一个 issue 上月统计。
```
name: Issue Month Statistics
on:
schedule:
- cron: "0 1 1 * *"
jobs:
month-statistics:
runs-on: ubuntu-latest
steps:
- name: month-statistics
uses: actions-cool/issues-helper@v1.7.7
with:
actions: 'month-statistics'
token: ${{ secrets.GITHUB_TOKEN }}
count-lables: 'true'
```
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](#token) | string | ✔ |
| labels | 为新增 issue 添加 labels | string | ✖ |
| assignees | 为新增 issue 添加 assignees | string | ✖ |
| count-lables | 新增 issue 是否统计 labels | string | ✖ |
| count-comments | 新增 issue 是否统计 comments | string | ✖ |
- 新增 `issue` 的标题默认为 `[当前仓库] Month Statistics: 年-月`
- `count-lables`:可设置 `'true'`,增加 labels 统计
- `count-comments`:可设置 `'true'`,增加 comments 统计
⏫ [返回列表](#列-表)
## 🌰 例 子
灵活参考。
@@ -803,7 +842,7 @@ jobs:
if: github.event.label.name == 'watch'
steps:
- name: find comments
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
id: fcid
with:
actions: 'find-comments'
@@ -814,7 +853,7 @@ jobs:
- name: create comment
if: ${{ steps.fcid.outputs.comments.length == 0 }}
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -823,7 +862,7 @@ jobs:
- name: update comment
if: ${{ steps.fcid.outputs.comments.length == 1 }}
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -855,7 +894,7 @@ jobs:
```yml
- name: Create issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
id: createissue
with:
actions: 'create-issue'
@@ -931,7 +970,6 @@ x2 + y2
- v1 表示初始版本
- 对 v1 版本的修复和新增会发布到 v1.1 版本
- 当发布的 v1.x 运行一定时间稳定后,发布进阶 v2 版本
- API 中参数需使用其中最大及以上版本
- 版本选择
- 建议采用最新 releases 版本。可在 [releases](https://github.com/actions-cool/issues-helper/releases) 看到
@@ -956,50 +994,33 @@ x2 + y2
同时,如果你在使用过程中有什么疑问,也可以在 issue 或者 discussion 中进行提问和查询。
<table>
<tr>
<td align="center">
<a href="https://github.com/ant-design/ant-design">
<img src="https://avatars1.githubusercontent.com/u/12101536?s=200&v=4" width="46" />
</a>
</td>
<td align="center">
<a href="https://github.com/vueComponent/ant-design-vue">
<img src="https://avatars2.githubusercontent.com/u/32120805?s=200&v=4" width="46" />
</a>
</td>
<td align="center">
<a href="https://github.com/umijs/dumi">
<img src="https://avatars2.githubusercontent.com/u/33895495?s=200&v=4" width="46" />
</a>
</td>
<td align="center">
<a href="https://github.com/umijs/umi">
<img src="https://avatars2.githubusercontent.com/u/33895495?s=200&v=4" width="46" />
</a>
</td>
<td align="center">
<a href="https://github.com/AttoJS/vue-request">
<img src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png" width="46" />
</a>
</td>
</tr>
<tr>
<td align="center" width="160">
<strong>ant-design</strong>
</td>
<td align="center" width="160">
<strong>ant-design-vue</strong>
</td>
<td align="center" width="160">
<strong>dumi</strong>
</td>
<td align="center" width="160">
<strong>umi</strong>
</td>
<td align="center" width="160">
<strong>vue-request</strong>
</td>
</tr>
<tr>
<td align="center"><a href="https://github.com/ant-design/ant-design"><img src="https://avatars1.githubusercontent.com/u/12101536?s=200&v=4" width="46" /></a></td>
<td align="center"><a href="https://github.com/vueComponent/ant-design-vue"><img src="https://avatars1.githubusercontent.com/u/32120805?s=200&v=4" width="46" /></a></td>
<td align="center"><a href="https://github.com/umijs/dumi"><img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46" /></a></td>
<td align="center"><a href="https://github.com/mui-org/material-ui"><img src="https://avatars2.githubusercontent.com/u/33663932?s=200&v=4" width="46" /></a></td>
<td align="center"><a href="https://github.com/umijs/umi"><img src="https://avatars1.githubusercontent.com/u/33895495?s=200&v=4" width="46" /></a></td>
</tr>
<tr>
<td width="160" align="center">ant-design</td>
<td width="160" align="center">ant-design-vue</td>
<td width="160" align="center">dumi</td>
<td width="160" align="center">material-ui</td>
<td width="160" align="center">umi</td>
</tr><tr>
<td align="center"><a href="https://github.com/AttoJS/vue-request"><img src="https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png" width="46" /></a></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td width="160" align="center">vue-request</td>
<td width="160" align="center"></td>
<td width="160" align="center"></td>
<td width="160" align="center"></td>
<td width="160" align="center"></td>
</tr>
</table>
## LICENSE

View File

@@ -58,6 +58,10 @@ inputs:
description: 'For mark-duplicate add labels'
close-issue:
description: 'For mark-duplicate'
count-lables:
description: 'For month-statistics'
count-comments:
description: 'For month-statistics'
outputs:
issue-number:
description: 'Create Issue Number'

641
dist/index.js vendored
View File

@@ -6022,242 +6022,7 @@ function wrappy (fn, cb) {
/***/ }),
/***/ 9319:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
__webpack_require__(2437).config();
const core = __webpack_require__(2186);
const { Octokit } = __webpack_require__(5375);
var dayjs = __webpack_require__(7401);
var utc = __webpack_require__(4359);
dayjs.extend(utc);
var isSameOrBefore = __webpack_require__(9517);
dayjs.extend(isSameOrBefore);
const {
doAddLabels,
doCloseIssue,
doCreateComment,
doLockIssue
} = __webpack_require__(9932);
const { dealInput, matchKeyword } = __webpack_require__(6254);
const token = core.getInput('token');
const octokit = new Octokit({ auth: `token ${token}` });
let direction = core.getInput("direction");
direction = direction === 'desc' ? 'desc' : 'asc';
const commentAuth = core.getInput("comment-auth");
const bodyIncludes = core.getInput('body-includes');
const titleIncludes = core.getInput('title-includes');
const assigneeIncludes = core.getInput('assignee-includes');
const issueCreator = core.getInput("issue-creator");
const issueAssignee = core.getInput('issue-assignee');
const issueMentioned = core.getInput('issue-mentioned');
let issueState = core.getInput("issue-state") || 'all';
if (issueState != 'open' && issueState != 'closed') {
issueState = 'all';
}
const inactiveDay = core.getInput("inactive-day");
const inactiveLabel = core.getInput("inactive-label") || 'inactive';
async function doCheckInactive (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
if (!JSON.stringify(issues[i].labels).includes(inactiveLabel)) {
await doAddLabels(owner, repo, issues[i].number, inactiveLabel);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
} else {
core.info(`Actions: [add-inactive] issue ${issues[i].number} has label!`);
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
/**
* 检查 issue 是否满足条件,满足返回 true
* 当前 issue 的指定人是否有一个满足 assigneeIncludes 里的某个
* 关键字匹配,是否包含前一个某个+后一个某个 '官网,网站/挂了,无法访问'
*/
async function doCheckIssue (owner, repo, issueNumber) {
var checkResult = true;
const issue = await octokit.issues.get({
owner,
repo,
issue_number: issueNumber
});
if (!!checkResult && assigneeIncludes) {
let assigneesCheck = dealInput(assigneeIncludes);
let checkAssignee = false;
issue.data.assignees.forEach(it => {
if (checkResult && !checkAssignee && assigneesCheck.includes(it.login)) {
checkResult = true;
checkAssignee = true;
}
})
!checkAssignee ? checkResult = false : null;
}
if (!!checkResult && titleIncludes) {
const titleArr = titleIncludes.split('/');
const keyword1 = dealInput(titleArr[0]);
const keyword2 = dealInput(titleArr[1]);
checkResult =
keyword2.length ?
matchKeyword(issue.data.title, keyword1) && matchKeyword(issue.data.title, keyword2) :
matchKeyword(issue.data.title, keyword1);
}
if (!!checkResult && bodyIncludes) {
const bodyArr = bodyIncludes.split('/');
const keyword1 = dealInput(bodyArr[0]);
const keyword2 = dealInput(bodyArr[1]);
checkResult =
keyword2.length ?
matchKeyword(issue.data.body, keyword1) && matchKeyword(issue.data.body, keyword2) :
matchKeyword(issue.data.body, keyword1);
}
core.info(`Actions: [check-issue][${!!checkResult}] success!`);
core.setOutput("check-result", !!checkResult);
};
async function doCloseIssues (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, 'open');
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
await doCloseIssue(owner, repo, issues[i].number);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
async function doFindComments (owner, repo, issueNumber) {
const res = await octokit.issues.listComments({
owner,
repo,
issue_number: issueNumber
});
core.info(`Actions: [find-comments][${issueNumber}] success!`);
let comments = [];
res.data.forEach(item => {
const a = commentAuth ? item.user.login === commentAuth : true;
const b = bodyIncludes ? item.body.includes(bodyIncludes) : true;
if (a && b) {
comments.push({
id: item.id,
auth: item.user.login,
body: item.body,
created: item.created_at,
updated: item.updated_at
})
if (direction === 'desc') {
comments.reverse();
}
}
})
core.setOutput("comments", comments);
};
async function doLockIssues (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
await doLockIssue(owner, repo, issues[i].number);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
async function doQueryIssues (owner, repo, labels, state, creator) {
let params = {
owner,
repo,
state,
};
issueCreator ? params.creator = issueCreator : null;
issueAssignee ? params.assignee = issueAssignee : null;
issueMentioned ? params.mentioned = issueMentioned : null;
if (labels) {
params.labels = labels;
}
if (creator) {
params.creator = creator;
}
const res = await octokit.issues.listForRepo(params);
let issues = [];
let issueNumbers = [];
if (res.data.length) {
res.data.forEach(iss => {
const a = bodyIncludes ? iss.body.includes(bodyIncludes) : true;
const b = titleIncludes ? iss.title.includes(titleIncludes) : true;
/**
* Note: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request.
* For this reason, "Issues" endpoints may return both issues and pull requests in the response.
* You can identify pull requests by the pull_request key.
*/
if (a && b && iss.pull_request === undefined) {
if (inactiveDay) {
let lastTime = dayjs.utc().subtract(Number(inactiveDay), 'day');
let updateTime = dayjs.utc(iss.updated_at);
if (updateTime.isSameOrBefore(lastTime)) {
issues.push(iss);
issueNumbers.push(iss.number);
}
} else {
issues.push(iss);
issueNumbers.push(iss.number);
}
}
})
core.info(`Actions: [query-issues]: [${JSON.stringify(issueNumbers)}]!`);
}
return issues;
};
module.exports = {
doCheckInactive,
doCheckIssue,
doCloseIssues,
doFindComments,
doLockIssues,
// tool
doQueryIssues,
};
/***/ }),
/***/ 9932:
/***/ 9075:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
__webpack_require__(2437).config();
@@ -6265,7 +6030,11 @@ const core = __webpack_require__(2186);
const github = __webpack_require__(5438);
const { Octokit } = __webpack_require__(5375);
const { doQueryIssues } = __webpack_require__(9319);
var dayjs = __webpack_require__(7401);
var utc = __webpack_require__(4359);
dayjs.extend(utc);
var isSameOrBefore = __webpack_require__(9517);
dayjs.extend(isSameOrBefore);
const ALLREACTIONS = [
"+1",
@@ -6278,16 +6047,46 @@ const ALLREACTIONS = [
"eyes",
];
const { dealInput, testDuplicate } = __webpack_require__(6254);
const {
dealInput,
matchKeyword,
testDuplicate,
getPreMonth
} = __webpack_require__(6254);
const token = core.getInput('token');
const octokit = new Octokit({ auth: `token ${token}` });
const contents = core.getInput("contents");
const issueContents = core.getInput("issue-contents");
// advanced
let direction = core.getInput("direction");
direction = direction === 'desc' ? 'desc' : 'asc';
const commentAuth = core.getInput("comment-auth");
const bodyIncludes = core.getInput('body-includes');
const titleIncludes = core.getInput('title-includes');
const assigneeIncludes = core.getInput('assignee-includes');
const issueCreator = core.getInput("issue-creator");
const issueAssignee = core.getInput('issue-assignee');
const issueMentioned = core.getInput('issue-mentioned');
let issueState = core.getInput("issue-state") || 'open';
if (issueState != 'all' && issueState != 'closed') {
issueState = 'open';
}
const inactiveDay = core.getInput("inactive-day");
const inactiveLabel = core.getInput("inactive-label") || 'inactive';
const perPage = 100;
// context
const context = github.context;
// base
async function doAddAssignees (owner, repo, issueNumber, assignees) {
await octokit.issues.addAssignees({
owner,
@@ -6615,8 +6414,7 @@ async function doWelcome (owner, repo, assignees, labels, body) {
const auth = context.payload.sender.login;
core.info(`Actions: [welcome: auth=][${auth}]`);
const issueNumber = context.issue.number;
const creator = 'zoo-js-bot';
const issues = await doQueryIssues(owner, repo, false, 'all', creator);
const issues = await doQueryIssues(owner, repo, false, 'all', auth);
if (issues.length == 0 || (issues.length == 1 && issues[0].number == issueNumber)) {
if (core.getInput("body")) {
await doCreateComment(owner, repo, issueNumber, body);
@@ -6641,6 +6439,335 @@ async function doWelcome (owner, repo, assignees, labels, body) {
}
};
// advanced
async function doCheckInactive (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
if (!JSON.stringify(issues[i].labels).includes(inactiveLabel)) {
await doAddLabels(owner, repo, issues[i].number, inactiveLabel);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
} else {
core.info(`Actions: [add-inactive] issue ${issues[i].number} has label!`);
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
/**
* 检查 issue 是否满足条件,满足返回 true
* 当前 issue 的指定人是否有一个满足 assigneeIncludes 里的某个
* 关键字匹配,是否包含前一个某个+后一个某个 '官网,网站/挂了,无法访问'
*/
async function doCheckIssue (owner, repo, issueNumber) {
var checkResult = true;
const issue = await octokit.issues.get({
owner,
repo,
issue_number: issueNumber
});
if (!!checkResult && assigneeIncludes) {
let assigneesCheck = dealInput(assigneeIncludes);
let checkAssignee = false;
issue.data.assignees.forEach(it => {
if (checkResult && !checkAssignee && assigneesCheck.includes(it.login)) {
checkResult = true;
checkAssignee = true;
}
})
!checkAssignee ? checkResult = false : null;
}
if (!!checkResult && titleIncludes) {
const titleArr = titleIncludes.split('/');
const keyword1 = dealInput(titleArr[0]);
const keyword2 = dealInput(titleArr[1]);
checkResult =
keyword2.length ?
matchKeyword(issue.data.title, keyword1) && matchKeyword(issue.data.title, keyword2) :
matchKeyword(issue.data.title, keyword1);
}
if (!!checkResult && bodyIncludes) {
const bodyArr = bodyIncludes.split('/');
const keyword1 = dealInput(bodyArr[0]);
const keyword2 = dealInput(bodyArr[1]);
checkResult =
keyword2.length ?
matchKeyword(issue.data.body, keyword1) && matchKeyword(issue.data.body, keyword2) :
matchKeyword(issue.data.body, keyword1);
}
core.info(`Actions: [check-issue][${!!checkResult}] success!`);
core.setOutput("check-result", !!checkResult);
};
async function doCloseIssues (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, 'open');
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
await doCloseIssue(owner, repo, issues[i].number);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
async function doFindComments (owner, repo, issueNumber) {
const res = await octokit.issues.listComments({
owner,
repo,
issue_number: issueNumber
});
core.info(`Actions: [find-comments][${issueNumber}] success!`);
let comments = [];
res.data.forEach(item => {
const a = commentAuth ? item.user.login === commentAuth : true;
const b = bodyIncludes ? item.body.includes(bodyIncludes) : true;
if (a && b) {
comments.push({
id: item.id,
auth: item.user.login,
body: item.body,
created: item.created_at,
updated: item.updated_at
})
if (direction === 'desc') {
comments.reverse();
}
}
})
core.setOutput("comments", comments);
};
async function doLockIssues (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
await doLockIssue(owner, repo, issues[i].number);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
async function doMonthStatistics (owner, repo, labels, assignees) {
const countLables = core.getInput("count-lables");
const countComments = core.getInput("count-comments");
const thisMonth = dayjs.utc().month() + 1;
const year = thisMonth == 1 ? dayjs.utc().year() - 1 : dayjs.utc().year();
const month = getPreMonth(thisMonth);
const showMonth = month < 10 ? `0${month}` : month;
let issues = await getIssuesInMonth(
owner,
repo,
thisMonth
);
if (issues.length == 0) {
core.info(`Actions: [query-issues-${month}] empty!`);
return false;
}
issues = issues.filter(i => {
return getCreatedMontn(i.created_at) == month
});
let total = issues.length;
let totalIssues = [...issues];
let openTotal = 0;
let openIssuesNumber = [];
let closeTotal = 0;
let closeIssuesNumber = [];
let labelsTotals = [];
const title = `[${owner}/${repo}] Month Statistics: ${year}-${showMonth}`;
for (let i = 0; i < issues.length; i++) {
if (issues[i].state == 'closed') {
closeTotal += 1;
closeIssuesNumber.push(issues[i].number);
} else if (issues[i].state == 'open') {
openTotal += 1;
openIssuesNumber.push(issues[i].number);
}
if (countLables && issues[i].labels) {
issues[i].labels.forEach(l => {
if (l.name in labelsTotals) {
labelsTotals[l.name] += 1;
} else {
labelsTotals[l.name] = 1;
}
})
}
}
let now = dayjs().utc().format('YYYY-MM-DD HH:mm:ss');
let body = `
- Created time: ${now}
- Time base: UTC +0
`;
let totalShow = `
### Count
| Total | Open | Closed |
| -- | -- | -- |
| ${total} | ${openTotal} | ${closeTotal} |
`;
body += totalShow;
if (countLables == 'true') {
let labelsArr = [];
for (var lab in labelsTotals) {
labelsArr.push({
labelName: lab,
number: labelsTotals[lab]
})
}
labelsArr.sort((a, b) => b.number - a.number);
let labelsTitle = `
### Labels statistics
<table>
<tr>
<th>Name</th>
<th>Number</th>
</tr>`
let labelsBody = '';
labelsArr.forEach(it => {
labelsBody += `<tr><td>${it.labelName}</td><td>${it.number}</td></tr>`
})
body = body + labelsTitle + labelsBody + `</table>
`;
}
if (countComments == 'true') {
totalIssues.sort((a, b) => b.comments - a.comments);
const maxComments = totalIssues.slice(0, 3);
let commentTitle = `
### Most comments
<table>
<tr>
<th>#</th>
<th>Issue</th>
<th>Title</th>
<th>Number</th>
<th>State</th>
</tr>
`
let commentBody = '';
maxComments.forEach((it,ind) => {
commentBody += `<tr>
<td>${ind + 1}</td>
<td>${it.number}</td>
<td>${it.title}</td>
<td>${it.comments}</td>
<td>${it.state}</td></tr>`
})
body = body + commentTitle + commentBody + '</table>';
}
await doCreateIssue(owner, repo, title, body, labels, assignees);
};
// Tool
async function doQueryIssues (owner, repo, labels, state, creator) {
let params = {
owner,
repo,
state,
};
issueCreator ? params.creator = issueCreator : null;
issueAssignee ? params.assignee = issueAssignee : null;
issueMentioned ? params.mentioned = issueMentioned : null;
if (labels) {
params.labels = labels;
}
if (creator) {
params.creator = creator;
}
const res = await getIssues(params);
let issues = [];
let issueNumbers = [];
if (res.length) {
res.forEach(iss => {
const a = bodyIncludes ? iss.body.includes(bodyIncludes) : true;
const b = titleIncludes ? iss.title.includes(titleIncludes) : true;
/**
* Note: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request.
* For this reason, "Issues" endpoints may return both issues and pull requests in the response.
* You can identify pull requests by the pull_request key.
*/
if (a && b && iss.pull_request === undefined) {
if (inactiveDay) {
let lastTime = dayjs.utc().subtract(Number(inactiveDay), 'day');
let updateTime = dayjs.utc(iss.updated_at);
if (updateTime.isSameOrBefore(lastTime)) {
issues.push(iss);
issueNumbers.push(iss.number);
}
} else {
issues.push(iss);
issueNumbers.push(iss.number);
}
}
})
core.info(`Actions: [query-issues]: [${JSON.stringify(issueNumbers)}]!`);
}
return issues;
};
async function getIssues (params, page = 1) {
let { data: issues } = await octokit.issues.listForRepo({
...params,
per_page: perPage,
page
});
if (issues.length >= perPage) {
issues = issues.concat(await getIssues(params, page + 1));
}
return issues;
};
async function getIssuesInMonth (owner, repo, thisMonth, page = 1) {
const month = getPreMonth(thisMonth);
let { data: issues } = await octokit.issues.listForRepo({
owner,
repo,
state: 'all',
per_page: perPage,
page
});
issues = issues.filter(i => {
return i.pull_request === undefined
});
if (issues.length && getCreatedMontn(issues[issues.length - 1].created_at) >= month) {
issues = issues.concat(await getIssuesInMonth(owner, repo, thisMonth, page + 1));
}
return issues;
};
// tool
function testContent(con) {
if (ALLREACTIONS.includes(con)) {
@@ -6651,8 +6778,13 @@ function testContent(con) {
}
};
function getCreatedMontn (d) {
return dayjs(d).utc().month() + 1;
};
// exports
module.exports = {
// base
doAddAssignees,
doAddLabels,
doCloseIssue,
@@ -6671,6 +6803,14 @@ module.exports = {
doUpdateComment,
doUpdateIssue,
doWelcome,
// advanced
doCheckInactive,
doCheckIssue,
doCloseIssues,
doFindComments,
doLockIssues,
doMonthStatistics,
};
@@ -6683,6 +6823,7 @@ const core = __webpack_require__(2186);
const github = __webpack_require__(5438);
const {
// base
doAddAssignees,
doAddLabels,
doCloseIssue,
@@ -6701,15 +6842,15 @@ const {
doUpdateComment,
doUpdateIssue,
doWelcome,
} = __webpack_require__(9932);
const {
// advanced
doCheckInactive,
doCheckIssue,
doCloseIssues,
doFindComments,
doLockIssues,
} = __webpack_require__(9319);
doMonthStatistics,
} = __webpack_require__(9075);
const ALLACTIONS = [
// base
@@ -6736,6 +6877,7 @@ const ALLACTIONS = [
'close-issues',
'find-comments',
'lock-issues',
'month-statistics',
];
async function main() {
@@ -6888,6 +7030,14 @@ async function main() {
labels
);
break;
case 'month-statistics':
await doMonthStatistics(
owner,
repo,
labels,
assignees
);
break;
// default
default:
break;
@@ -6937,8 +7087,13 @@ function testDuplicate(body) {
}
};
function getPreMonth (m) {
return m == 1 ? 12 : m -1;
};
module.exports = {
dealInput,
getPreMonth,
matchKeyword,
testDuplicate,
};

View File

@@ -22,28 +22,28 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: check-inactive
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'check-inactive'
token: ${{ secrets.GITHUB_TOKEN }}
inactive-day: 30
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ | v1 |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ | v1 |
| labels | Labels filtering | string | ✖ | v1.1 |
| issue-state | State filtering | string | ✖ | v1 |
| issue-assignee | Assignee filtering | string | ✖ | v1 |
| issue-creator | Creator filtering | string | ✖ | v1 |
| issue-mentioned | Mentioned filtering | string | ✖ | v1 |
| body-includes | Body filtering | string | ✖ | v1 |
| title-includes | Title filtering | string | ✖ | v1 |
| inactive-day | Inactive days filtering | number | ✖ | v1.4 |
| inactive-label | The label name adding | string | ✖ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ |
| labels | Labels filtering | string | ✖ |
| issue-state | State filtering | string | ✖ |
| issue-assignee | Assignee filtering | string | ✖ |
| issue-creator | Creator filtering | string | ✖ |
| issue-mentioned | Mentioned filtering | string | ✖ |
| body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
| inactive-label | The label name adding | string | ✖ |
- `labels`: When there are multiple, the query will have multiple at the same time. If not entered, all
- `issue-state`: The default is `all`. Optional value `open` `closed`, when these 2 items are not, both are `all`
@@ -73,7 +73,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: check-issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'check-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -82,14 +82,14 @@ jobs:
title-includes: 'x1,x2/y1,y2'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1.2 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1.2 |
| issue-number | The number of issue | number | ✔ | v1.2 |
| assignee-includes | Assignees contains check | string | ✖ | v1.2 |
| title-includes | Title contains check | string | ✖ | v1.2 |
| body-includes | Body contains check | string | ✖ | v1.2 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| assignee-includes | Assignees contains check | string | ✖ |
| title-includes | Title contains check | string | ✖ |
| body-includes | Body contains check | string | ✖ |
- `title-includes` `body-includes` supports the format `x1,x2` or `x1,x2/y1,y2`. Only supports two levels
- Return `check-result`
@@ -110,7 +110,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: close-issues
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'close-issues'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -118,19 +118,19 @@ jobs:
inactive-day: 7
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ | v1 |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ | v1 |
| labels | Labels filtering | string | ✖ | v1.1 |
| issue-assignee | Assignee filtering | string | ✖ | v1 |
| issue-creator | Creator filtering | string | ✖ | v1 |
| issue-mentioned | Mentioned filtering | string | ✖ | v1 |
| body-includes | Body filtering | string | ✖ | v1 |
| title-includes | Title filtering | string | ✖ | v1 |
| inactive-day | Inactive days filtering | number | ✖ | v1.4 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ |
| labels | Labels filtering | string | ✖ |
| issue-assignee | Assignee filtering | string | ✖ |
| issue-creator | Creator filtering | string | ✖ |
| issue-mentioned | Mentioned filtering | string | ✖ |
| body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
- `labels`: When there are multiple, the query will have multiple at the same time. If not entered, all
- `issue-assignee`: Multiplayer is not supported. If you do not enter or enter *, all will be searched. Entering `none` will query issues for which the specified person is not added
@@ -142,7 +142,7 @@ Find the current warehouse issue No. 1, the creator is k and the content contain
```yml
- name: Find comments
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'find-comments'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -151,14 +151,14 @@ Find the current warehouse issue No. 1, the creator is k and the content contain
body-includes: 'this'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| comment-auth | Comment creator, all will be queried if not filled | string | ✖ | v1 |
| body-includes | Comment content includes filtering, no verification if not filled | string | ✖ | v1 |
| direction | Return `comments` sort | string | ✖ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| comment-auth | Comment creator, all will be queried if not filled | string | ✖ |
| body-includes | Comment content includes filtering, no verification if not filled | string | ✖ |
| direction | Return `comments` sort | string | ✖ |
- Return `comments` in the following format:
@@ -188,7 +188,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: lock-issues
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'lock-issues'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -196,22 +196,58 @@ jobs:
inactive-day: 128
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ | v1 |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ | v1 |
| labels | Labels filtering | string | ✖ | v1.1 |
| issue-state | State filtering | string | ✖ | v1 |
| issue-assignee | Assignee filtering | string | ✖ | v1 |
| issue-creator | Creator filtering | string | ✖ | v1 |
| issue-mentioned | Mentioned filtering | string | ✖ | v1 |
| body-includes | Body filtering | string | ✖ | v1 |
| title-includes | Title filtering | string | ✖ | v1 |
| inactive-day | Inactive days filtering | number | ✖ | v1.4 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| body | When operating an issue, you can comment. Do not comment when not typing | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ |
| labels | Labels filtering | string | ✖ |
| issue-state | State filtering | string | ✖ |
| issue-assignee | Assignee filtering | string | ✖ |
| issue-creator | Creator filtering | string | ✖ |
| issue-mentioned | Mentioned filtering | string | ✖ |
| body-includes | Body filtering | string | ✖ |
| title-includes | Title filtering | string | ✖ |
| inactive-day | Inactive days filtering | number | ✖ |
- `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-assignee`: Multiplayer is not supported. If you do not enter or enter *, all will be searched. Entering `none` will query issues for which the specified person is not added
- `inactive-day`: When entering, it will filter the issue update time earlier than the current time minus the number of inactive days. If not entered, all
## `month-statistics`
At 1 o'clock on the 1st of each month, an issue is generated for the statistics of the previous month.
```
name: Issue Month Statistics
on:
schedule:
- cron: "0 1 1 * *"
jobs:
month-statistics:
runs-on: ubuntu-latest
steps:
- name: month-statistics
uses: actions-cool/issues-helper@v1.7
with:
actions: 'month-statistics'
token: ${{ secrets.GITHUB_TOKEN }}
count-lables: 'true'
```
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| labels | The labels for the new issue | string | ✖ |
| assignees | The assignees for the new issue | string | ✖ |
| count-lables | Whether the new issue count labels | string | ✖ |
| count-comments | Whether the new issue count comments | string | ✖ |
- The new issue title defaults to `[Current repo] Month Statistics: Year-Month`
- `count-lables`: You can set `'true'` to add labels statistics
- `count-comments`: You can set `'true'` to add comments statistics

View File

@@ -22,28 +22,28 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: check-inactive
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'check-inactive'
token: ${{ secrets.GITHUB_TOKEN }}
inactive-day: 30
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ | v1 |
| contents | 为该评论增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1 |
| labels | 标签筛选 | string | ✖ | v1.1 |
| issue-state | 状态筛选 | string | ✖ | v1 |
| issue-assignee | 指定人筛选 | string | ✖ | v1 |
| issue-creator | 创建人筛选 | string | ✖ | v1 |
| issue-mentioned | 提及人筛选 | string | ✖ | v1 |
| body-includes | 包含内容筛选 | string | ✖ | v1 |
| title-includes | 包含标题筛选 | string | ✖ | v1 |
| inactive-day | 非活跃天数筛选 | number | ✖ | v1.4 |
| inactive-label | 新增标签名称 | string | ✖ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ |
| contents | 为该评论增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
| labels | 标签筛选 | string | ✖ |
| issue-state | 状态筛选 | string | ✖ |
| issue-assignee | 指定人筛选 | string | ✖ |
| issue-creator | 创建人筛选 | string | ✖ |
| issue-mentioned | 提及人筛选 | string | ✖ |
| body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
| inactive-label | 新增标签名称 | string | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-state`:默认为 `all`。可选值 `open` `closed`,非这 2 项时,均为 `all`
@@ -69,7 +69,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: check-issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'check-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -78,14 +78,14 @@ jobs:
title-includes: 'x1,x2/y1,y2'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1.2 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1.2 |
| issue-number | 指定的 issue | number | ✔ | v1.2 |
| assignee-includes | 是否包含指定人 | string | ✖ | v1.2 |
| title-includes | 标题包含校验 | string | ✖ | v1.2 |
| body-includes | 内容包含校验 | string | ✖ | v1.2 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| assignee-includes | 是否包含指定人 | string | ✖ |
| title-includes | 标题包含校验 | string | ✖ |
| body-includes | 内容包含校验 | string | ✖ |
- `title-includes` `body-includes` 支持格式 `x1,x2` 或者 `x1,x2/y1,y2`。只支持两个层级
- 返回 `check-result`
@@ -106,7 +106,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: close-issues
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'close-issues'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -114,19 +114,19 @@ jobs:
inactive-day: 7
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ | v1 |
| contents | 为该评论增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1 |
| labels | 标签筛选 | string | ✖ | v1.1 |
| issue-assignee | 指定人筛选 | string | ✖ | v1 |
| issue-creator | 创建人筛选 | string | ✖ | v1 |
| issue-mentioned | 提及人筛选 | string | ✖ | v1 |
| body-includes | 包含内容筛选 | string | ✖ | v1 |
| title-includes | 包含标题筛选 | string | ✖ | v1 |
| inactive-day | 非活跃天数筛选 | number | ✖ | v1.4 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ |
| contents | 为该评论增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
| labels | 标签筛选 | string | ✖ |
| issue-assignee | 指定人筛选 | string | ✖ |
| issue-creator | 创建人筛选 | string | ✖ |
| issue-mentioned | 提及人筛选 | string | ✖ |
| body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
@@ -138,7 +138,7 @@ jobs:
```yml
- name: Find comments
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'find-comments'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -147,14 +147,14 @@ jobs:
body-includes: 'this'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| comment-auth | 评论创建者,不填时会查询所有 | string | ✖ | v1 |
| body-includes | 评论内容包含过滤,不填时无校验 | string | ✖ | v1 |
| direction | 返回 `comments` 排序 | string | ✖ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| comment-auth | 评论创建者,不填时会查询所有 | string | ✖ |
| body-includes | 评论内容包含过滤,不填时无校验 | string | ✖ |
| direction | 返回 `comments` 排序 | string | ✖ |
- 返回 `comments`,格式如下:
@@ -184,7 +184,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: lock-issues
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'lock-issues'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -192,22 +192,58 @@ jobs:
inactive-day: 128
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ | v1 |
| contents | 为该评论增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1 |
| labels | 标签筛选 | string | ✖ | v1.1 |
| issue-state | 状态筛选 | string | ✖ | v1 |
| issue-assignee | 指定人筛选 | string | ✖ | v1 |
| issue-creator | 创建人筛选 | string | ✖ | v1 |
| issue-mentioned | 提及人筛选 | string | ✖ | v1 |
| body-includes | 包含内容筛选 | string | ✖ | v1 |
| title-includes | 包含标题筛选 | string | ✖ | v1 |
| inactive-day | 非活跃天数筛选 | number | ✖ | v1.4 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| body | 操作 issue 时,可进行评论。不填时,不评论 | string | ✖ |
| contents | 为该评论增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
| labels | 标签筛选 | string | ✖ |
| issue-state | 状态筛选 | string | ✖ |
| issue-assignee | 指定人筛选 | string | ✖ |
| issue-creator | 创建人筛选 | string | ✖ |
| issue-mentioned | 提及人筛选 | string | ✖ |
| body-includes | 包含内容筛选 | string | ✖ |
| title-includes | 包含标题筛选 | string | ✖ |
| inactive-day | 非活跃天数筛选 | number | ✖ |
- `labels`:为多个时,会查询同时拥有多个。不填时,会查询所有
- `issue-state`:默认为 `all`。可选值 `open` `closed`,非这 2 项时,均为 `all`
- `issue-assignee`:不支持多人。不填或输入 * 时,查询所有。输入 `none` 会查询未添加指定人的 issues
- `inactive-day`:当输入时,会筛选 issue 更新时间早于当前时间减去非活跃天数。不填时,会查询所有
## `month-statistics`
每月 1 号 1 时,生成一个 issue 上月统计。
```
name: Issue Month Statistics
on:
schedule:
- cron: "0 1 1 * *"
jobs:
month-statistics:
runs-on: ubuntu-latest
steps:
- name: month-statistics
uses: actions-cool/issues-helper@v1.7
with:
actions: 'month-statistics'
token: ${{ secrets.GITHUB_TOKEN }}
count-lables: 'true'
```
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明)) | string | ✔ |
| labels | 为新增 issue 添加 labels | string | ✖ |
| assignees | 为新增 issue 添加 assignees | string | ✖ |
| count-lables | 新增 issue 是否统计 labels | string | ✖ |
| count-comments | 新增 issue 是否统计 comments | string | ✖ |
- 新增 `issue` 的标题默认为 `[当前仓库] Month Statistics: 年-月`
- `count-lables`:可设置 `'true'`,增加 labels 统计
- `count-comments`:可设置 `'true'`,增加 comments 统计

View File

@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Add assigness
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'add-assignees'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -30,18 +30,18 @@ jobs:
assignees: 'xxx' or 'xx1,xx2'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| assignees | Designated person. No operation when no input or empty character | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| assignees | Designated person. No operation when no input or empty character | string | ✖ |
- `actions` support multiple and separated by comma. Like: `add-assignees,add-labels`
- The `name` can be modified according to the actual situation
- [Reference to on](/en-US/guide/ref#-github-docs)
- `${{ github.event.issue.number }}` is the current issue. [More references](https://docs.github.com/en/free-pro-team@latest/developers/webhooks-and-events)
- `assignees` support multiple and separated by comma. Pay attention to multiple settings, you need to use the version above v1.1
- `assignees` support multiple and separated by comma
## `add-labels`
@@ -60,7 +60,7 @@ jobs:
if: contains(github.event.issue.body, 'xxx') == false
steps:
- name: Add labels
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -68,14 +68,14 @@ jobs:
labels: 'bug' or 'xx1,xx2'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| labels | New labels. When it is not filled in or is empty character, do not add | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| labels | New labels. When it is not filled in or is empty character, do not add | string | ✖ |
- `labels` support multiple and separated by comma. Pay attention to multiple settings, you need to use the version above v1.1
- `labels` support multiple and separated by comma
## `close-issue`
@@ -83,7 +83,7 @@ Close the specified issue.
```yml
- name: Close issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -91,11 +91,11 @@ Close the specified issue.
body: 'This is auto closed.'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
## `create-comment`
@@ -114,7 +114,7 @@ jobs:
if: github.event.label.name == 'xxx'
steps:
- name: Create comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -126,19 +126,19 @@ jobs:
contents: '+1' or '+1,heart'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| body | Add comment content | string | ✖ | v1 |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| body | Add comment content | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) | string | ✖ |
- `body` default is `Currently at ${owner}/${repo}. And this is default comment.`
- Where `${owner}/${repo}` means the current repo
- Return `comment-id`, which can be used for subsequent operations. [Usage reference](/en-US/guide/ref#-outputs-use)
- `${{ github.event.issue.user.login }}` indicates the creator of the issue
- `contents` support multiple and separated by comma. Pay attention to multiple settings, you need to use the version above v1.1
- `contents` support multiple and separated by comma
## `create-issue`
@@ -156,7 +156,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Create issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -167,15 +167,15 @@ jobs:
contents: '+1'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| title | The title of the new issue | string | ✖ | v1 |
| body | The body of the new issue | string | ✖ | v1 |
| labels | The labels for the new issue | string | ✖ | v1.1 |
| assignees | The assignees for the new issue | string | ✖ | v1.1 |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| title | The title of the new issue | string | ✖ |
| body | The body of the new issue | string | ✖ |
| labels | The labels for the new issue | string | ✖ |
| assignees | The assignees for the new issue | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) | string | ✖ |
- `title` default is `Default Title`
- Return `issue-number`. [Usage reference](/en-US/guide/ref#-outputs-use)
@@ -186,18 +186,18 @@ According to [`comment-id`](/en-US/guide/ref#-comment-id) delete the specified c
```yml
- name: Delete comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'delete-comment'
token: ${{ secrets.GITHUB_TOKEN }}
comment-id: xxx
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| comment-id | The comment ID | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| comment-id | The comment ID | number | ✔ |
## `lock-issue`
@@ -216,18 +216,18 @@ jobs:
if: github.event.label.name == 'invalid'
steps:
- name: Lock issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'lock-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
## `mark-duplicate`
@@ -245,21 +245,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: mark-duplicate
uses: actions-cool/issues-helper@v1.5
uses: actions-cool/issues-helper@v1.7
with:
actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }}
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1.5 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1.5 |
| duplicate-command | Simple commands can be set, such as: `/d` | string | ✖ | v1.6 |
| duplicate-labels | Add additional labels to this issue | string | ✖ | v1.5 |
| labels | Replace the labels of the issue | string | ✖ | v1.5 |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ | v1.5 |
| close-issue | Whether to close the issue at the same time | string | ✖ | v1.6 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| duplicate-command | Simple commands can be set, such as: `/d` | string | ✖ |
| duplicate-labels | Add additional labels to this issue | string | ✖ |
| labels | Replace the labels of the issue | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) for this comment | string | ✖ |
| close-issue | Whether to close the issue at the same time | string | ✖ |
- `duplicate-command`: When setting concise commands, while still supporting the original `Duplicate of`
- `close-issue`: Both `true` or `'true'` can take effect
@@ -276,18 +276,18 @@ Open the specified issue.
```yml
- name: Open issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'open-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: xxx
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
## `remove-assignees`
@@ -295,7 +295,7 @@ Remove the person designated by issue.
```yml
- name: Remove assignees
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'remove-assignees'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -303,12 +303,12 @@ Remove the person designated by issue.
assignees: 'xx'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| assignees | Designated person removed. When it is an empty character, do not remove | string | ✔ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| assignees | Designated person removed. When it is an empty character, do not remove | string | ✔ |
## `remove-labels`
@@ -316,7 +316,7 @@ Remove the specified labels.
```yml
- name: Remove labels
uses: actions-cool/issues-helper@v1.2
uses: actions-cool/issues-helper@v1.7
with:
actions: 'remove-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -324,12 +324,12 @@ Remove the specified labels.
labels: 'xx'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1.2 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1.2 |
| issue-number | The number of issue | number | ✔ | v1.2 |
| labels | The removed labels. When it is a blank character, do not remove | string | ✔ | v1.2 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| labels | The removed labels. When it is a blank character, do not remove | string | ✔ |
- `labels` supports multiple, such as `x1,x2,x3`, only the labels added by the issue will be removed
@@ -339,7 +339,7 @@ Replace the labels of issue.
```yml
- name: Set labels
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'set-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -347,12 +347,12 @@ Replace the labels of issue.
labels: 'xx'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| labels | labels set. When empty characters, will remove all | string | ✔ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| labels | labels set. When empty characters, will remove all | string | ✔ |
## `unlock-issue`
@@ -360,18 +360,18 @@ Unlock the specified issue.
```yml
- name: Unlock issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'unlock-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
## `update-comment`
@@ -391,7 +391,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Update comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -399,14 +399,14 @@ jobs:
contents: 'eyes'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| comment-id | The comment ID | number | ✔ | v1 |
| body | Update the content of comment | string | ✖ | v1 |
| update-mode | Update mode. Default `replace`, another `append` | string | ✖ | v1 |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| comment-id | The comment ID | number | ✔ |
| body | Update the content of comment | string | ✖ |
| update-mode | Update mode. Default `replace`, another `append` | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) | string | ✖ |
- When `body` is not entered, it will remain as it is
- When `update-mode` is `append`, additional operations will be performed. Anything other than `append` will be replaced. Only effective for `body`
@@ -417,7 +417,7 @@ Update the specified issue according to the `issue-number`.
```yml
- name: Update issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -431,18 +431,18 @@ Update the specified issue according to the `issue-number`.
contents: '+1'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1 |
| issue-number | The number of issue | number | ✔ | v1 |
| state | Modify the status of issue, optional value `open` `closed` | string | ✖ | v1 |
| title | Modify the title of the issue | string | ✖ | v1 |
| body | Modify the content of issue | string | ✖ | v1 |
| update-mode | Update mode. Default `replace`, another `append` | string | ✖ | v1 |
| labels | Replace the labels of issue | string | ✖ | v1.1 |
| assignees | Replace the assignees of issue | string | ✖ | v1.1 |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) | string | ✖ | v1.1 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| issue-number | The number of issue | number | ✔ |
| state | Modify the status of issue, optional value `open` `closed` | string | ✖ |
| title | Modify the title of the issue | string | ✖ |
| body | Modify the content of issue | string | ✖ |
| update-mode | Update mode. Default `replace`, another `append` | string | ✖ |
| labels | Replace the labels of issue | string | ✖ |
| assignees | Replace the assignees of issue | string | ✖ |
| contents | Add [reaction](/en-US/guide/ref#-reactions-type) | string | ✖ |
- `state` defaults to `open`
- When the option is not filled, it will keep the original
@@ -465,7 +465,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: welcome
uses: actions-cool/issues-helper@v1.3
uses: actions-cool/issues-helper@v1.7
with:
actions: 'welcome'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -475,13 +475,13 @@ jobs:
issue-contents: '+1, -1, eyes'
```
| Param | Desc | Type | Required | Version |
| -- | -- | -- | -- | -- |
| actions | Action type | string | ✔ | v1.3 |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ | v1.3 |
| body | Comment on the welcome content, no comment if you leave it blank | string | ✖ | v1.3 |
| labels | Add labels to this issue | string | ✖ | v1.3 |
| assignees | Add assignees to this issue | string | ✖ | v1.3 |
| issue-contents | Add [reaction](/en-US/guide/ref#-reactions-type) to this issue| string | ✖ | v1.3 |
| Param | Desc | Type | Required |
| -- | -- | -- | -- |
| actions | Action type | string | ✔ |
| token | [Token explain](/en-US/guide/ref#-token) | string | ✔ |
| body | Comment on the welcome content, no comment if you leave it blank | string | ✖ |
| labels | Add labels to this issue | string | ✖ |
| assignees | Add assignees to this issue | string | ✖ |
| issue-contents | Add [reaction](/en-US/guide/ref#-reactions-type) to this issue| string | ✖ |
- If these 4 options are not filled, no operation

View File

@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Add assigness
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'add-assignees'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -30,18 +30,18 @@ jobs:
assignees: 'xxx' or 'xx1,xx2'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| assignees | 指定人。当不填或者为空字符时,不操作 | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| assignees | 指定人。当不填或者为空字符时,不操作 | string | ✖ |
- `actions` 支持多个,需用逗号隔开。如:`add-assignees,add-labels`
- 其中的 `name` 可根据自行根据实际情况修改
- [on 参考](/guide/ref#-github-相关文档)
- `${{ github.event.issue.number }}` 表示当前 issue[更多参考](https://docs.github.com/en/free-pro-team@latest/developers/webhooks-and-events)
- `assignees` 支持多个,需用逗号隔开。注意设置多个需使用v1.1以上版本
- `assignees` 支持多个,需用逗号隔开
## `add-labels`
@@ -60,7 +60,7 @@ jobs:
if: contains(github.event.issue.body, 'xxx') == false
steps:
- name: Add labels
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -68,14 +68,14 @@ jobs:
labels: 'bug' or 'bug1,bug2'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| labels | 新增的 labels。当不填或者为空字符时不新增 | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| labels | 新增的 labels。当不填或者为空字符时不新增 | string | ✖ |
- `labels` 支持多个,需用逗号隔开。注意设置多个需使用v1.1以上版本
- `labels` 支持多个,需用逗号隔开
## `close-issue`
@@ -83,7 +83,7 @@ jobs:
```yml
- name: Close issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -91,11 +91,11 @@ jobs:
body: 'This is auto closed.'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
## `create-comment`
@@ -114,7 +114,7 @@ jobs:
if: github.event.label.name == 'xxx'
steps:
- name: Create comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -126,19 +126,19 @@ jobs:
contents: '+1' or '+1,heart'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| body | 新增评论的内容 | string | ✖ | v1 |
| contents | 为新增评论的增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| body | 新增评论的内容 | string | ✖ |
| contents | 为新增评论的增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
- `body` 默认为:`Currently at ${owner}/${repo}. And this is default comment.`
- 其中 `${owner}/${repo}` 表示当前仓库
- 返回 `comment-id`,可用于之后操作。[用法参考](/guide/ref#-outputs-使用)
- `${{ github.event.issue.user.login }}` 表示该 issue 的创建者
- `contents` 支持多个,需用逗号隔开。注意设置多个需使用v1.1以上版本
- `contents` 支持多个,需用逗号隔开
## `create-issue`
@@ -156,7 +156,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Create issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'create-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -167,15 +167,15 @@ jobs:
contents: '+1'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| title | 新增 issue 的标题 | string | ✖ | v1 |
| body | 新增 issue 的内容 | string | ✖ | v1 |
| labels | 为新增 issue 添加 labels | string | ✖ | v1.1 |
| assignees | 为新增 issue 添加 assignees | string | ✖ | v1.1 |
| contents | 为新增 issue 增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| title | 新增 issue 的标题 | string | ✖ |
| body | 新增 issue 的内容 | string | ✖ |
| labels | 为新增 issue 添加 labels | string | ✖ |
| assignees | 为新增 issue 添加 assignees | string | ✖ |
| contents | 为新增 issue 增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
- `title` 默认为:`Default Title`
- 返回 `issue-number`[用法参考](/guide/ref#-outputs-使用)
@@ -186,18 +186,18 @@ jobs:
```yml
- name: Delete comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'delete-comment'
token: ${{ secrets.GITHUB_TOKEN }}
comment-id: xxx
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| comment-id | 指定的 comment | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| comment-id | 指定的 comment | number | ✔ |
## `lock-issue`
@@ -216,18 +216,18 @@ jobs:
if: github.event.label.name == 'invalid'
steps:
- name: Lock issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'lock-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
## `mark-duplicate`
@@ -245,21 +245,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: mark-duplicate
uses: actions-cool/issues-helper@v1.5
uses: actions-cool/issues-helper@v1.7
with:
actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }}
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1.5 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1.5 |
| duplicate-command | 可设置简洁命令,如:`/d` | string | ✖ | v1.6 |
| duplicate-labels | 为该 issue 额外增加 labels | string | ✖ | v1.5 |
| labels | 替换该 issue 的 labels | string | ✖ | v1.5 |
| contents | 为该评论的增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1.5 |
| close-issue | 是否同时关闭该 issue | string | ✖ | v1.6 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| duplicate-command | 可设置简洁命令,如:`/d` | string | ✖ |
| duplicate-labels | 为该 issue 额外增加 labels | string | ✖ |
| labels | 替换该 issue 的 labels | string | ✖ |
| contents | 为该评论的增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
| close-issue | 是否同时关闭该 issue | string | ✖ |
- `duplicate-command`:当设置简洁命令时,同时仍支持原有 `Duplicate of`
- `close-issue``true``'true'` 均可生效
@@ -276,18 +276,18 @@ jobs:
```yml
- name: Open issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'open-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: xxx
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
## `remove-assignees`
@@ -295,7 +295,7 @@ jobs:
```yml
- name: Remove assignees
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'remove-assignees'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -303,12 +303,12 @@ jobs:
assignees: 'xx'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| assignees | 移除的指定人。当为空字符时,不进行移除 | string | ✔ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| assignees | 移除的指定人。当为空字符时,不进行移除 | string | ✔ |
## `remove-labels`
@@ -316,7 +316,7 @@ jobs:
```yml
- name: Remove labels
uses: actions-cool/issues-helper@v1.2
uses: actions-cool/issues-helper@v1.7
with:
actions: 'remove-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -324,12 +324,12 @@ jobs:
labels: 'xx'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1.2 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1.2 |
| issue-number | 指定的 issue | number | ✔ | v1.2 |
| labels | 移除的 labels。当为空字符时不进行移除 | string | ✔ | v1.2 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| labels | 移除的 labels。当为空字符时不进行移除 | string | ✔ |
- `labels` 支持多个,如 `x1,x2,x3`,只会移除 issue 已添加的 labels
@@ -339,7 +339,7 @@ jobs:
```yml
- name: Set labels
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'set-labels'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -347,12 +347,12 @@ jobs:
labels: 'xx'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| labels | labels 设置。当空字符时,会移除所有 | string | ✔ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| labels | labels 设置。当空字符时,会移除所有 | string | ✔ |
## `unlock-issue`
@@ -360,18 +360,18 @@ jobs:
```yml
- name: Unlock issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'unlock-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
## `update-comment`
@@ -391,7 +391,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Update comment
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -399,14 +399,14 @@ jobs:
contents: 'eyes'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| comment-id | 指定的 comment | number | ✔ | v1 |
| body | 更新 comment 的内容 | string | ✖ | v1 |
| update-mode | 更新模式。默认 `replace` 替换,`append` 附加 | string | ✖ | v1 |
| contents | 增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| comment-id | 指定的 comment | number | ✔ |
| body | 更新 comment 的内容 | string | ✖ |
| update-mode | 更新模式。默认 `replace` 替换,`append` 附加 | string | ✖ |
| contents | 增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
- `body` 不填时,会保持原有
- `update-mode``append` 时,会进行附加操作。非 `append` 都会进行替换。仅对 `body` 生效
@@ -417,7 +417,7 @@ jobs:
```yml
- name: Update issue
uses: actions-cool/issues-helper@v1
uses: actions-cool/issues-helper@v1.7
with:
actions: 'update-issue'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -431,18 +431,18 @@ jobs:
contents: '+1'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1 |
| issue-number | 指定的 issue | number | ✔ | v1 |
| state | 修改 issue 的状态,可选值 `open` `closed` | string | ✖ | v1 |
| title | 修改 issue 的标题 | string | ✖ | v1 |
| body | 修改 issue 的内容 | string | ✖ | v1 |
| update-mode | 更新模式。默认 `replace` 替换,`append` 附加 | string | ✖ | v1 |
| labels | 替换 issue 的 labels | string | ✖ | v1.1 |
| assignees | 替换 issue 的 assignees | string | ✖ | v1.1 |
| contents | 增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1.1 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| issue-number | 指定的 issue | number | ✔ |
| state | 修改 issue 的状态,可选值 `open` `closed` | string | ✖ |
| title | 修改 issue 的标题 | string | ✖ |
| body | 修改 issue 的内容 | string | ✖ |
| update-mode | 更新模式。默认 `replace` 替换,`append` 附加 | string | ✖ |
| labels | 替换 issue 的 labels | string | ✖ |
| assignees | 替换 issue 的 assignees | string | ✖ |
| contents | 增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
- `state` 默认为 `open`
- 当可选项不填时,会保持原有
@@ -464,7 +464,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: welcome
uses: actions-cool/issues-helper@v1.3
uses: actions-cool/issues-helper@v1.7
with:
actions: 'welcome'
token: ${{ secrets.GITHUB_TOKEN }}
@@ -474,13 +474,13 @@ jobs:
issue-contents: '+1, -1, eyes'
```
| 参数 | 描述 | 类型 | 必填 | 版本 |
| -- | -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ | v1.3 |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ | v1.3 |
| body | 评论欢迎的内容,不填则不评论 | string | ✖ | v1.3 |
| labels | 为该 issue 增加 labels | string | ✖ | v1.3 |
| assignees | 为该 issue 增加 assignees | string | ✖ | v1.3 |
| issue-contents | 为该 issue 增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ | v1.3 |
| 参数 | 描述 | 类型 | 必填 |
| -- | -- | -- | -- |
| actions | 操作类型 | string | ✔ |
| token | [token 说明](/guide/ref#-token-说明) | string | ✔ |
| body | 评论欢迎的内容,不填则不评论 | string | ✖ |
| labels | 为该 issue 增加 labels | string | ✖ |
| assignees | 为该 issue 增加 assignees | string | ✖ |
| issue-contents | 为该 issue 增加 [reaction](/guide/ref#-reactions-类型) | string | ✖ |
- 若这 4 个可选项都不填,则无操作

View File

@@ -9,7 +9,6 @@ toc: menu
- v1 represents the initial 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, release the advanced v2 version
- The parameters in the API must use the largest version and above
- 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)

View File

@@ -9,7 +9,6 @@ toc: menu
- v1 表示初始版本
- 对 v1 版本的修复和新增会发布到 v1.1 版本
- 当发布的 v1.x 运行一定时间稳定后,发布进阶 v2 版本
- API 中参数需使用其中最大及以上版本
- 版本选择
- 建议采用最新 releases 版本。可在 [releases](https://github.com/actions-cool/issues-helper/releases) 看到

View File

@@ -51,7 +51,7 @@ jobs:
## 💖 Who is using?
<code src="./users.tsx" inline />
<embed src="../README.md#L996-L1024"></embed>
## ⚡ Feedback

View File

@@ -51,7 +51,7 @@ jobs:
## 💖 谁在使用?
<code src="./users.tsx" inline />
<embed src="../README.md#L996-L1024"></embed>
## ⚡ 反馈

View File

@@ -1,71 +0,0 @@
/* eslint-disable react/jsx-no-target-blank */
import React from 'react';
const USERS = [
{
name: 'ant-design',
link: 'https://github.com/ant-design/ant-design',
logo: 'https://avatars1.githubusercontent.com/u/12101536?s=200&v=4',
},
{
name: 'ant-design-vue',
link: 'https://github.com/vueComponent/ant-design-vue',
logo: 'https://avatars2.githubusercontent.com/u/32120805?s=200&v=4',
},
{
name: 'dumi',
link: 'https://github.com/umijs/dumi',
logo: 'https://avatars2.githubusercontent.com/u/33895495?s=200&v=4',
},
{
name: 'umi',
link: 'https://github.com/umijs/umi',
logo: 'https://avatars2.githubusercontent.com/u/33895495?s=200&v=4',
},
{
name: 'vue-request',
link: 'https://github.com/AttoJS/vue-request',
logo: 'https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png',
}
];
export default () => {
return (
<ul style={{ display: 'flex', flexWrap: 'wrap', margin: 0, padding: 0, listStyle: 'none' }}>
{USERS.map((user, i) => (
<li
key={user.link}
style={{
width: 220,
marginRight: i === USERS.length - 1 ? 0 : 16,
marginBottom: 8,
border: '1px solid #eee',
textAlign: 'center',
fontSize: 20,
fontWeight: 600,
borderRadius: 2,
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
}}
>
<a
style={{ display: 'block', color: '#666', padding: '18px', textDecoration: 'none' }}
target="_blank"
href={user.link}
>
<img
width={(user.name && 40) || undefined}
height={(!user.name && 40) || undefined}
style={{ verticalAlign: '-0.32em' }}
src={user.logo}
alt={user.name}
/>
<div style={{ marginTop: 10 }}>{user.name}</div>
</a>
</li>
))}
</ul>
);
};

View File

@@ -1,6 +1,6 @@
{
"name": "issue-helper",
"version": "1.6.0",
"version": "1.7.0",
"private": true,
"description": "Some operations on issue.",
"main": "src/main.js",
@@ -10,7 +10,9 @@
"docs-dev:build": "UMI_ENV=dev dumi build",
"docs:deploy": "gh-pages -d docs-dist",
"deploy": "npm run docs:build && npm run docs:deploy",
"package": "ncc build src/main.js -o dist"
"package": "ncc build src/main.js -o dist",
"update": "node ./script/update-user.js",
"main": "node ./src/main.js"
},
"author": "xrkffgg",
"license": "MIT",
@@ -33,8 +35,9 @@
},
"devDependencies": {
"@vercel/ncc": "^0.25.1",
"common-tags": "^1.8.0",
"dotenv": "^8.2.0",
"dumi": "^1.1.0-rc.8",
"dumi": "^1.1.0",
"gh-pages": "^3.1.0",
"react": "^17.0.1"
}

111
script/update-user.js Normal file
View File

@@ -0,0 +1,111 @@
const { readFileSync, writeFileSync } = require('fs');
const { format } = require('prettier');
const { stripIndent } = require('common-tags');
// **************************************************************************
let users = [
{
url: 'https://github.com/ant-design/ant-design',
logo: 'https://avatars1.githubusercontent.com/u/12101536?s=200&v=4'
},
{
url: 'https://github.com/vueComponent/ant-design-vue',
logo: 'https://avatars1.githubusercontent.com/u/32120805?s=200&v=4'
},
{
url: 'https://github.com/umijs/dumi',
logo: 'https://avatars1.githubusercontent.com/u/33895495?s=200&v=4'
},
{
url: 'https://github.com/umijs/umi',
logo: 'https://avatars1.githubusercontent.com/u/33895495?s=200&v=4'
},
{
url: 'https://github.com/AttoJS/vue-request',
logo: 'https://raw.githubusercontent.com/AttoJS/art/master/vue-request-logo.png'
},
{
url: 'https://github.com/mui-org/material-ui',
logo: 'https://avatars2.githubusercontent.com/u/33663932?s=200&v=4'
},
];
users.sort((a, b) => getName(a).localeCompare(getName(b)));
// **************************************************************************
let table = '';
let row = users.length / 5;
let lastNo = users.length % 5;
if (lastNo != 0) row += 1;
for (let j = 1; j <= row; j++) {
let data = '';
data = stripIndent`
<tr>
<td align="center">${getImg(users[(j-1)*5])}</td>
<td align="center">${getImg(users[(j-1)*5+1])}</td>
<td align="center">${getImg(users[(j-1)*5+2])}</td>
<td align="center">${getImg(users[(j-1)*5+3])}</td>
<td align="center">${getImg(users[(j-1)*5+4])}</td>
</tr>
<tr>
<td width="160" align="center">${getName(users[(j-1)*5])}</td>
<td width="160" align="center">${getName(users[(j-1)*5+1])}</td>
<td width="160" align="center">${getName(users[(j-1)*5+2])}</td>
<td width="160" align="center">${getName(users[(j-1)*5+3])}</td>
<td width="160" align="center">${getName(users[(j-1)*5+4])}</td>
</tr>
`;
table += data
};
table = `<table>
${table}
</table>
`;
// **************************************************************************
const point = '<table>';
const last = `
## LICENSE
[MIT](https://github.com/actions-cool/issues-helper/blob/main/LICENSE)
`;
// **************************************************************************
const cn = readFileSync('./README.md', 'utf8');
const cnIn = cn.indexOf(point);
const cnBefore = cn.substring(0, cnIn);
const newcn = cnBefore + table + last;
writeFileSync('./README.md', newcn);
console.log(`🎉 Done cn`);
// **************************************************************************
const en = readFileSync('./README.en-US.md', 'utf8');
const enIn = en.indexOf(point);
const enBefore = en.substring(0, enIn);
const newen = enBefore + table + last;
writeFileSync('./README.en-US.md', newen);
console.log(`🎉 Done en`);
// **************************************************************************
function getImg (o) {
if (o) {
return `<a href="${o.url}"><img src="${o.logo}" width="46" /></a>`
}
return ``
};
function getName (o) {
if (o) {
return o.url.split('/').slice(-1)[0]
}
return ``
};
// **************************************************************************

View File

@@ -1,228 +0,0 @@
require('dotenv').config();
const core = require("@actions/core");
const { Octokit } = require('@octokit/rest');
var dayjs = require('dayjs');
var utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
var isSameOrBefore = require('dayjs/plugin/isSameOrBefore');
dayjs.extend(isSameOrBefore);
const {
doAddLabels,
doCloseIssue,
doCreateComment,
doLockIssue
} = require('./base.js');
const { dealInput, matchKeyword } = require('./util.js');
const token = core.getInput('token');
const octokit = new Octokit({ auth: `token ${token}` });
let direction = core.getInput("direction");
direction = direction === 'desc' ? 'desc' : 'asc';
const commentAuth = core.getInput("comment-auth");
const bodyIncludes = core.getInput('body-includes');
const titleIncludes = core.getInput('title-includes');
const assigneeIncludes = core.getInput('assignee-includes');
const issueCreator = core.getInput("issue-creator");
const issueAssignee = core.getInput('issue-assignee');
const issueMentioned = core.getInput('issue-mentioned');
let issueState = core.getInput("issue-state") || 'all';
if (issueState != 'open' && issueState != 'closed') {
issueState = 'all';
}
const inactiveDay = core.getInput("inactive-day");
const inactiveLabel = core.getInput("inactive-label") || 'inactive';
async function doCheckInactive (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
if (!JSON.stringify(issues[i].labels).includes(inactiveLabel)) {
await doAddLabels(owner, repo, issues[i].number, inactiveLabel);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
} else {
core.info(`Actions: [add-inactive] issue ${issues[i].number} has label!`);
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
/**
* 检查 issue 是否满足条件,满足返回 true
* 当前 issue 的指定人是否有一个满足 assigneeIncludes 里的某个
* 关键字匹配,是否包含前一个某个+后一个某个 '官网,网站/挂了,无法访问'
*/
async function doCheckIssue (owner, repo, issueNumber) {
var checkResult = true;
const issue = await octokit.issues.get({
owner,
repo,
issue_number: issueNumber
});
if (!!checkResult && assigneeIncludes) {
let assigneesCheck = dealInput(assigneeIncludes);
let checkAssignee = false;
issue.data.assignees.forEach(it => {
if (checkResult && !checkAssignee && assigneesCheck.includes(it.login)) {
checkResult = true;
checkAssignee = true;
}
})
!checkAssignee ? checkResult = false : null;
}
if (!!checkResult && titleIncludes) {
const titleArr = titleIncludes.split('/');
const keyword1 = dealInput(titleArr[0]);
const keyword2 = dealInput(titleArr[1]);
checkResult =
keyword2.length ?
matchKeyword(issue.data.title, keyword1) && matchKeyword(issue.data.title, keyword2) :
matchKeyword(issue.data.title, keyword1);
}
if (!!checkResult && bodyIncludes) {
const bodyArr = bodyIncludes.split('/');
const keyword1 = dealInput(bodyArr[0]);
const keyword2 = dealInput(bodyArr[1]);
checkResult =
keyword2.length ?
matchKeyword(issue.data.body, keyword1) && matchKeyword(issue.data.body, keyword2) :
matchKeyword(issue.data.body, keyword1);
}
core.info(`Actions: [check-issue][${!!checkResult}] success!`);
core.setOutput("check-result", !!checkResult);
};
async function doCloseIssues (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, 'open');
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
await doCloseIssue(owner, repo, issues[i].number);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
async function doFindComments (owner, repo, issueNumber) {
const res = await octokit.issues.listComments({
owner,
repo,
issue_number: issueNumber
});
core.info(`Actions: [find-comments][${issueNumber}] success!`);
let comments = [];
res.data.forEach(item => {
const a = commentAuth ? item.user.login === commentAuth : true;
const b = bodyIncludes ? item.body.includes(bodyIncludes) : true;
if (a && b) {
comments.push({
id: item.id,
auth: item.user.login,
body: item.body,
created: item.created_at,
updated: item.updated_at
})
if (direction === 'desc') {
comments.reverse();
}
}
})
core.setOutput("comments", comments);
};
async function doLockIssues (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
await doLockIssue(owner, repo, issues[i].number);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
async function doQueryIssues (owner, repo, labels, state, creator) {
let params = {
owner,
repo,
state,
};
issueCreator ? params.creator = issueCreator : null;
issueAssignee ? params.assignee = issueAssignee : null;
issueMentioned ? params.mentioned = issueMentioned : null;
if (labels) {
params.labels = labels;
}
if (creator) {
params.creator = creator;
}
const res = await octokit.issues.listForRepo(params);
let issues = [];
let issueNumbers = [];
if (res.data.length) {
res.data.forEach(iss => {
const a = bodyIncludes ? iss.body.includes(bodyIncludes) : true;
const b = titleIncludes ? iss.title.includes(titleIncludes) : true;
/**
* Note: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request.
* For this reason, "Issues" endpoints may return both issues and pull requests in the response.
* You can identify pull requests by the pull_request key.
*/
if (a && b && iss.pull_request === undefined) {
if (inactiveDay) {
let lastTime = dayjs.utc().subtract(Number(inactiveDay), 'day');
let updateTime = dayjs.utc(iss.updated_at);
if (updateTime.isSameOrBefore(lastTime)) {
issues.push(iss);
issueNumbers.push(iss.number);
}
} else {
issues.push(iss);
issueNumbers.push(iss.number);
}
}
})
core.info(`Actions: [query-issues]: [${JSON.stringify(issueNumbers)}]!`);
}
return issues;
};
module.exports = {
doCheckInactive,
doCheckIssue,
doCloseIssues,
doFindComments,
doLockIssues,
// tool
doQueryIssues,
};

View File

@@ -1,412 +0,0 @@
require('dotenv').config();
const core = require("@actions/core");
const github = require("@actions/github");
const { Octokit } = require('@octokit/rest');
const { doQueryIssues } = require('./advanced.js');
const ALLREACTIONS = [
"+1",
"-1",
"laugh",
"confused",
"heart",
"hooray",
"rocket",
"eyes",
];
const { dealInput, testDuplicate } = require('./util.js');
const token = core.getInput('token');
const octokit = new Octokit({ auth: `token ${token}` });
const contents = core.getInput("contents");
const issueContents = core.getInput("issue-contents");
const context = github.context;
async function doAddAssignees (owner, repo, issueNumber, assignees) {
await octokit.issues.addAssignees({
owner,
repo,
issue_number: issueNumber,
assignees: dealInput(assignees)
});
core.info(`Actions: [add-assignees][${assignees}] success!`);
};
async function doAddLabels (owner, repo, issueNumber, labels) {
await octokit.issues.addLabels({
owner,
repo,
issue_number: issueNumber,
labels: dealInput(labels)
});
core.info(`Actions: [add-labels][${labels}] success!`);
};
async function doCloseIssue (owner, repo, issueNumber) {
await octokit.issues.update({
owner,
repo,
issue_number: issueNumber,
state: 'closed'
});
core.info(`Actions: [close-issue][${issueNumber}] success!`);
};
async function doCreateComment (owner, repo, issueNumber, body) {
const { data } = await octokit.issues.createComment({
owner,
repo,
issue_number: issueNumber,
body
});
core.info(`Actions: [create-comment][${body}] success!`);
core.setOutput("comment-id", data.id);
if (contents) {
await doCreateCommentContent(owner, repo, data.id, dealInput(contents));
}
};
async function doCreateCommentContent(owner, repo, commentId, contents) {
if (contents.length) {
contents.forEach(async item => {
if (testContent(item)) {
await octokit.reactions.createForIssueComment({
owner,
repo,
comment_id: commentId,
content: item
});
core.info(`Actions: [create-reactions][${item}] success!`);
}
})
}
};
async function doCreateIssue (owner, repo, title, body, labels, assignees) {
let params = {
owner,
repo,
title,
body,
labels: dealInput(labels),
assignees: dealInput(assignees),
};
const { data } = await octokit.issues.create(params);
core.info(`Actions: [create-issue][${title}] success!`);
core.setOutput("issue-number", data.number);
if (contents) {
await doCreateIssueContent(owner, repo, data.number, dealInput(contents));
}
};
async function doCreateIssueContent(owner, repo, issueNumber, contents) {
if (contents.length) {
contents.forEach(async item => {
if (testContent(item)) {
await octokit.reactions.createForIssue({
owner,
repo,
issue_number: issueNumber,
content: item
});
core.info(`Actions: [create-reactions][${item}] success!`);
}
})
}
};
async function doDeleteComment (owner, repo, commentId) {
await octokit.issues.deleteComment({
owner,
repo,
comment_id: commentId
});
core.info(`Actions: [delete-comment][${commentId}] success!`);
};
async function doLockIssue (owner, repo, issueNumber) {
await octokit.issues.lock({
owner,
repo,
issue_number: issueNumber,
});
core.info(`Actions: [lock-issue][${issueNumber}] success!`);
};
async function doMarkDuplicate (owner, repo, labels) {
if (context.eventName != 'issue_comment') {
core.info(`This actions only support on 'issue_comment'!`);
return false;
}
if (context.payload.action != 'created') {
core.info(`This actions only support on 'issue_comment' created!`);
return false;
}
const duplicateCommand = core.getInput("duplicate-command");
const duplicateLabels = core.getInput("duplicate-labels");
const closeIssue = core.getInput("close-issue");
const commentId = context.payload.comment.id;
const commentBody = context.payload.comment.body;
const issueNumber = context.payload.issue.number;
const ifCommandInput = !!duplicateCommand;
if ((ifCommandInput && commentBody.startsWith(duplicateCommand) && commentBody.split(' ')[0] == duplicateCommand) || testDuplicate(commentBody)) {
if (ifCommandInput) {
const nextBody = commentBody.replace(duplicateCommand, 'Duplicate of');
await doUpdateComment(owner, repo, commentId, nextBody, 'replace', true);
} else if (contents) {
await doCreateCommentContent(owner, repo, commentId, dealInput(contents));
}
if (duplicateLabels) {
await doAddLabels(owner, repo, issueNumber, duplicateLabels);
}
if (labels) {
await doSetLabels(owner, repo, issueNumber, labels);
}
if (closeIssue == 'true') {
await doCloseIssue(owner, repo, issueNumber);
}
} else {
core.info(`This comment body should start whith 'duplicate-command'`);
}
};
async function doOpenIssue (owner, repo, issueNumber) {
await octokit.issues.update({
owner,
repo,
issue_number: issueNumber,
state: 'open'
});
core.info(`Actions: [open-issue][${issueNumber}] success!`);
};
async function doRemoveAssignees (owner, repo, issueNumber, assignees) {
await octokit.issues.removeAssignees({
owner,
repo,
issue_number: issueNumber,
assignees: dealInput(assignees),
});
core.info(`Actions: [remove-assignees][${assignees}] success!`);
};
async function doRemoveLabels (owner, repo, issueNumber, labels) {
const issue = await octokit.issues.get({
owner,
repo,
issue_number: issueNumber
});
const dealLabels = dealInput(labels);
let addLables = [];
if (dealLabels.length) {
issue.data.labels.forEach(item => {
!dealLabels.includes(item.name) ? addLables.push(item.name) : '';
})
await octokit.issues.setLabels({
owner,
repo,
issue_number: issueNumber,
labels: addLables
});
core.info(`Actions: [remove-labels][${labels}] success!`);
}
};
async function doSetLabels (owner, repo, issueNumber, labels) {
await octokit.issues.setLabels({
owner,
repo,
issue_number: issueNumber,
labels: dealInput(labels)
});
core.info(`Actions: [set-labels][${labels}] success!`);
};
async function doUnlockIssue (owner, repo, issueNumber) {
await octokit.issues.unlock({
owner,
repo,
issue_number: issueNumber,
});
core.info(`Actions: [unlock-issue][${issueNumber}] success!`);
};
async function doUpdateComment (
owner,
repo,
commentId,
body,
updateMode,
ifUpdateBody,
) {
const comment = await octokit.issues.getComment({
owner,
repo,
comment_id: commentId
})
const comment_body = comment.data.body;
let params = {
owner,
repo,
comment_id: commentId
};
if (core.getInput("body") || ifUpdateBody) {
if (updateMode === 'append') {
params.body = `${comment_body}\n${body}`;
} else {
params.body = body;
}
await octokit.issues.updateComment(params);
core.info(`Actions: [update-comment][${commentId}] success!`);
}
if (contents) {
await doCreateCommentContent(owner, repo, commentId, dealInput(contents));
}
};
async function doUpdateIssue (
owner,
repo,
issueNumber,
state,
title,
body,
updateMode,
assignees,
labels
) {
const issue = await octokit.issues.get({
owner,
repo,
issue_number: issueNumber
})
const issue_body = issue.data.body;
const issue_title = issue.data.title;
let issue_labels = [];
if (issue.data.labels.length > 0) {
issue.data.labels.forEach(it =>{
issue_labels.push(it.name);
});
}
let issue_assignees = [];
if (issue.data.assignees.length > 0) {
issue.data.assignees.forEach(it =>{
issue_assignees.push(it.login);
});
}
let params = {
owner,
repo,
issue_number: issueNumber,
state
};
params.title = core.getInput("title") ? title : issue_title;
let next_body;
if (core.getInput("body")) {
if (updateMode === 'append') {
next_body = `${issue_body}\n${body}`;
} else {
next_body = body;
}
} else {
next_body = issue_body;
}
params.body = next_body;
params.labels = labels ? dealInput(labels) : issue_labels;
params.assignees = assignees ? dealInput(assignees) : issue_assignees;
await octokit.issues.update(params);
core.info(`Actions: [update-issue][${issueNumber}] success!`);
if (contents) {
await doCreateIssueContent(owner, repo, issueNumber, contents);
}
};
async function doWelcome (owner, repo, assignees, labels, body) {
const context = github.context;
const isIssue = !!context.payload.issue;
if (!isIssue) {
core.setFailed("The event that triggered this action must be a issue. Error!");
} else {
const auth = context.payload.sender.login;
core.info(`Actions: [welcome: auth=][${auth}]`);
const issueNumber = context.issue.number;
const creator = 'zoo-js-bot';
const issues = await doQueryIssues(owner, repo, false, 'all', creator);
if (issues.length == 0 || (issues.length == 1 && issues[0].number == issueNumber)) {
if (core.getInput("body")) {
await doCreateComment(owner, repo, issueNumber, body);
} else {
core.info(`Actions: [welcome] no body!`);
}
if (assignees) {
await doAddAssignees(owner, repo, issueNumber, assignees);
}
if (labels) {
await doAddLabels(owner, repo, issueNumber, labels);
}
if (issueContents) {
await doCreateIssueContent(owner, repo, issueNumber, dealInput(issueContents));
}
} else {
core.info(`Actions: [welcome][${auth}] is not first time!`);
}
}
};
// tool
function testContent(con) {
if (ALLREACTIONS.includes(con)) {
return true;
} else {
core.setFailed("This actions not supported!");
return false;
}
};
// exports
module.exports = {
doAddAssignees,
doAddLabels,
doCloseIssue,
doCreateComment,
doCreateCommentContent,
doCreateIssue,
doCreateIssueContent,
doDeleteComment,
doMarkDuplicate,
doLockIssue,
doOpenIssue,
doRemoveAssignees,
doRemoveLabels,
doSetLabels,
doUnlockIssue,
doUpdateComment,
doUpdateIssue,
doWelcome,
};

787
src/do.js Normal file
View File

@@ -0,0 +1,787 @@
require('dotenv').config();
const core = require("@actions/core");
const github = require("@actions/github");
const { Octokit } = require('@octokit/rest');
var dayjs = require('dayjs');
var utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
var isSameOrBefore = require('dayjs/plugin/isSameOrBefore');
dayjs.extend(isSameOrBefore);
const ALLREACTIONS = [
"+1",
"-1",
"laugh",
"confused",
"heart",
"hooray",
"rocket",
"eyes",
];
const {
dealInput,
matchKeyword,
testDuplicate,
getPreMonth
} = require('./util.js');
const token = core.getInput('token');
const octokit = new Octokit({ auth: `token ${token}` });
const contents = core.getInput("contents");
const issueContents = core.getInput("issue-contents");
// advanced
let direction = core.getInput("direction");
direction = direction === 'desc' ? 'desc' : 'asc';
const commentAuth = core.getInput("comment-auth");
const bodyIncludes = core.getInput('body-includes');
const titleIncludes = core.getInput('title-includes');
const assigneeIncludes = core.getInput('assignee-includes');
const issueCreator = core.getInput("issue-creator");
const issueAssignee = core.getInput('issue-assignee');
const issueMentioned = core.getInput('issue-mentioned');
let issueState = core.getInput("issue-state") || 'open';
if (issueState != 'all' && issueState != 'closed') {
issueState = 'open';
}
const inactiveDay = core.getInput("inactive-day");
const inactiveLabel = core.getInput("inactive-label") || 'inactive';
const perPage = 100;
// context
const context = github.context;
// base
async function doAddAssignees (owner, repo, issueNumber, assignees) {
await octokit.issues.addAssignees({
owner,
repo,
issue_number: issueNumber,
assignees: dealInput(assignees)
});
core.info(`Actions: [add-assignees][${assignees}] success!`);
};
async function doAddLabels (owner, repo, issueNumber, labels) {
await octokit.issues.addLabels({
owner,
repo,
issue_number: issueNumber,
labels: dealInput(labels)
});
core.info(`Actions: [add-labels][${labels}] success!`);
};
async function doCloseIssue (owner, repo, issueNumber) {
await octokit.issues.update({
owner,
repo,
issue_number: issueNumber,
state: 'closed'
});
core.info(`Actions: [close-issue][${issueNumber}] success!`);
};
async function doCreateComment (owner, repo, issueNumber, body) {
const { data } = await octokit.issues.createComment({
owner,
repo,
issue_number: issueNumber,
body
});
core.info(`Actions: [create-comment][${body}] success!`);
core.setOutput("comment-id", data.id);
if (contents) {
await doCreateCommentContent(owner, repo, data.id, dealInput(contents));
}
};
async function doCreateCommentContent(owner, repo, commentId, contents) {
if (contents.length) {
contents.forEach(async item => {
if (testContent(item)) {
await octokit.reactions.createForIssueComment({
owner,
repo,
comment_id: commentId,
content: item
});
core.info(`Actions: [create-reactions][${item}] success!`);
}
})
}
};
async function doCreateIssue (owner, repo, title, body, labels, assignees) {
let params = {
owner,
repo,
title,
body,
labels: dealInput(labels),
assignees: dealInput(assignees),
};
const { data } = await octokit.issues.create(params);
core.info(`Actions: [create-issue][${title}] success!`);
core.setOutput("issue-number", data.number);
if (contents) {
await doCreateIssueContent(owner, repo, data.number, dealInput(contents));
}
};
async function doCreateIssueContent(owner, repo, issueNumber, contents) {
if (contents.length) {
contents.forEach(async item => {
if (testContent(item)) {
await octokit.reactions.createForIssue({
owner,
repo,
issue_number: issueNumber,
content: item
});
core.info(`Actions: [create-reactions][${item}] success!`);
}
})
}
};
async function doDeleteComment (owner, repo, commentId) {
await octokit.issues.deleteComment({
owner,
repo,
comment_id: commentId
});
core.info(`Actions: [delete-comment][${commentId}] success!`);
};
async function doLockIssue (owner, repo, issueNumber) {
await octokit.issues.lock({
owner,
repo,
issue_number: issueNumber,
});
core.info(`Actions: [lock-issue][${issueNumber}] success!`);
};
async function doMarkDuplicate (owner, repo, labels) {
if (context.eventName != 'issue_comment') {
core.info(`This actions only support on 'issue_comment'!`);
return false;
}
if (context.payload.action != 'created') {
core.info(`This actions only support on 'issue_comment' created!`);
return false;
}
const duplicateCommand = core.getInput("duplicate-command");
const duplicateLabels = core.getInput("duplicate-labels");
const closeIssue = core.getInput("close-issue");
const commentId = context.payload.comment.id;
const commentBody = context.payload.comment.body;
const issueNumber = context.payload.issue.number;
const ifCommandInput = !!duplicateCommand;
if ((ifCommandInput && commentBody.startsWith(duplicateCommand) && commentBody.split(' ')[0] == duplicateCommand) || testDuplicate(commentBody)) {
if (ifCommandInput) {
const nextBody = commentBody.replace(duplicateCommand, 'Duplicate of');
await doUpdateComment(owner, repo, commentId, nextBody, 'replace', true);
} else if (contents) {
await doCreateCommentContent(owner, repo, commentId, dealInput(contents));
}
if (duplicateLabels) {
await doAddLabels(owner, repo, issueNumber, duplicateLabels);
}
if (labels) {
await doSetLabels(owner, repo, issueNumber, labels);
}
if (closeIssue == 'true') {
await doCloseIssue(owner, repo, issueNumber);
}
} else {
core.info(`This comment body should start whith 'duplicate-command'`);
}
};
async function doOpenIssue (owner, repo, issueNumber) {
await octokit.issues.update({
owner,
repo,
issue_number: issueNumber,
state: 'open'
});
core.info(`Actions: [open-issue][${issueNumber}] success!`);
};
async function doRemoveAssignees (owner, repo, issueNumber, assignees) {
await octokit.issues.removeAssignees({
owner,
repo,
issue_number: issueNumber,
assignees: dealInput(assignees),
});
core.info(`Actions: [remove-assignees][${assignees}] success!`);
};
async function doRemoveLabels (owner, repo, issueNumber, labels) {
const issue = await octokit.issues.get({
owner,
repo,
issue_number: issueNumber
});
const dealLabels = dealInput(labels);
let addLables = [];
if (dealLabels.length) {
issue.data.labels.forEach(item => {
!dealLabels.includes(item.name) ? addLables.push(item.name) : '';
})
await octokit.issues.setLabels({
owner,
repo,
issue_number: issueNumber,
labels: addLables
});
core.info(`Actions: [remove-labels][${labels}] success!`);
}
};
async function doSetLabels (owner, repo, issueNumber, labels) {
await octokit.issues.setLabels({
owner,
repo,
issue_number: issueNumber,
labels: dealInput(labels)
});
core.info(`Actions: [set-labels][${labels}] success!`);
};
async function doUnlockIssue (owner, repo, issueNumber) {
await octokit.issues.unlock({
owner,
repo,
issue_number: issueNumber,
});
core.info(`Actions: [unlock-issue][${issueNumber}] success!`);
};
async function doUpdateComment (
owner,
repo,
commentId,
body,
updateMode,
ifUpdateBody,
) {
const comment = await octokit.issues.getComment({
owner,
repo,
comment_id: commentId
})
const comment_body = comment.data.body;
let params = {
owner,
repo,
comment_id: commentId
};
if (core.getInput("body") || ifUpdateBody) {
if (updateMode === 'append') {
params.body = `${comment_body}\n${body}`;
} else {
params.body = body;
}
await octokit.issues.updateComment(params);
core.info(`Actions: [update-comment][${commentId}] success!`);
}
if (contents) {
await doCreateCommentContent(owner, repo, commentId, dealInput(contents));
}
};
async function doUpdateIssue (
owner,
repo,
issueNumber,
state,
title,
body,
updateMode,
assignees,
labels
) {
const issue = await octokit.issues.get({
owner,
repo,
issue_number: issueNumber
})
const issue_body = issue.data.body;
const issue_title = issue.data.title;
let issue_labels = [];
if (issue.data.labels.length > 0) {
issue.data.labels.forEach(it =>{
issue_labels.push(it.name);
});
}
let issue_assignees = [];
if (issue.data.assignees.length > 0) {
issue.data.assignees.forEach(it =>{
issue_assignees.push(it.login);
});
}
let params = {
owner,
repo,
issue_number: issueNumber,
state
};
params.title = core.getInput("title") ? title : issue_title;
let next_body;
if (core.getInput("body")) {
if (updateMode === 'append') {
next_body = `${issue_body}\n${body}`;
} else {
next_body = body;
}
} else {
next_body = issue_body;
}
params.body = next_body;
params.labels = labels ? dealInput(labels) : issue_labels;
params.assignees = assignees ? dealInput(assignees) : issue_assignees;
await octokit.issues.update(params);
core.info(`Actions: [update-issue][${issueNumber}] success!`);
if (contents) {
await doCreateIssueContent(owner, repo, issueNumber, contents);
}
};
async function doWelcome (owner, repo, assignees, labels, body) {
const context = github.context;
const isIssue = !!context.payload.issue;
if (!isIssue) {
core.setFailed("The event that triggered this action must be a issue. Error!");
} else {
const auth = context.payload.sender.login;
core.info(`Actions: [welcome: auth=][${auth}]`);
const issueNumber = context.issue.number;
const issues = await doQueryIssues(owner, repo, false, 'all', auth);
if (issues.length == 0 || (issues.length == 1 && issues[0].number == issueNumber)) {
if (core.getInput("body")) {
await doCreateComment(owner, repo, issueNumber, body);
} else {
core.info(`Actions: [welcome] no body!`);
}
if (assignees) {
await doAddAssignees(owner, repo, issueNumber, assignees);
}
if (labels) {
await doAddLabels(owner, repo, issueNumber, labels);
}
if (issueContents) {
await doCreateIssueContent(owner, repo, issueNumber, dealInput(issueContents));
}
} else {
core.info(`Actions: [welcome][${auth}] is not first time!`);
}
}
};
// advanced
async function doCheckInactive (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
if (!JSON.stringify(issues[i].labels).includes(inactiveLabel)) {
await doAddLabels(owner, repo, issues[i].number, inactiveLabel);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
} else {
core.info(`Actions: [add-inactive] issue ${issues[i].number} has label!`);
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
/**
* 检查 issue 是否满足条件,满足返回 true
* 当前 issue 的指定人是否有一个满足 assigneeIncludes 里的某个
* 关键字匹配,是否包含前一个某个+后一个某个 '官网,网站/挂了,无法访问'
*/
async function doCheckIssue (owner, repo, issueNumber) {
var checkResult = true;
const issue = await octokit.issues.get({
owner,
repo,
issue_number: issueNumber
});
if (!!checkResult && assigneeIncludes) {
let assigneesCheck = dealInput(assigneeIncludes);
let checkAssignee = false;
issue.data.assignees.forEach(it => {
if (checkResult && !checkAssignee && assigneesCheck.includes(it.login)) {
checkResult = true;
checkAssignee = true;
}
})
!checkAssignee ? checkResult = false : null;
}
if (!!checkResult && titleIncludes) {
const titleArr = titleIncludes.split('/');
const keyword1 = dealInput(titleArr[0]);
const keyword2 = dealInput(titleArr[1]);
checkResult =
keyword2.length ?
matchKeyword(issue.data.title, keyword1) && matchKeyword(issue.data.title, keyword2) :
matchKeyword(issue.data.title, keyword1);
}
if (!!checkResult && bodyIncludes) {
const bodyArr = bodyIncludes.split('/');
const keyword1 = dealInput(bodyArr[0]);
const keyword2 = dealInput(bodyArr[1]);
checkResult =
keyword2.length ?
matchKeyword(issue.data.body, keyword1) && matchKeyword(issue.data.body, keyword2) :
matchKeyword(issue.data.body, keyword1);
}
core.info(`Actions: [check-issue][${!!checkResult}] success!`);
core.setOutput("check-result", !!checkResult);
};
async function doCloseIssues (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, 'open');
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
await doCloseIssue(owner, repo, issues[i].number);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
async function doFindComments (owner, repo, issueNumber) {
const res = await octokit.issues.listComments({
owner,
repo,
issue_number: issueNumber
});
core.info(`Actions: [find-comments][${issueNumber}] success!`);
let comments = [];
res.data.forEach(item => {
const a = commentAuth ? item.user.login === commentAuth : true;
const b = bodyIncludes ? item.body.includes(bodyIncludes) : true;
if (a && b) {
comments.push({
id: item.id,
auth: item.user.login,
body: item.body,
created: item.created_at,
updated: item.updated_at
})
if (direction === 'desc') {
comments.reverse();
}
}
})
core.setOutput("comments", comments);
};
async function doLockIssues (owner, repo, labels) {
const issues = await doQueryIssues(owner, repo, labels, issueState);
if (issues.length) {
for (let i = 0; i < issues.length; i++) {
await doLockIssue(owner, repo, issues[i].number);
if (core.getInput("body")) {
await doCreateComment(owner, repo, issues[i].number, core.getInput("body"));
}
}
} else {
core.info(`Actions: [query-issues] empty!`);
}
};
async function doMonthStatistics (owner, repo, labels, assignees) {
const countLables = core.getInput("count-lables");
const countComments = core.getInput("count-comments");
const thisMonth = dayjs.utc().month() + 1;
const year = thisMonth == 1 ? dayjs.utc().year() - 1 : dayjs.utc().year();
const month = getPreMonth(thisMonth);
const showMonth = month < 10 ? `0${month}` : month;
let issues = await getIssuesInMonth(
owner,
repo,
thisMonth
);
if (issues.length == 0) {
core.info(`Actions: [query-issues-${month}] empty!`);
return false;
}
issues = issues.filter(i => {
return getCreatedMontn(i.created_at) == month
});
let total = issues.length;
let totalIssues = [...issues];
let openTotal = 0;
let openIssuesNumber = [];
let closeTotal = 0;
let closeIssuesNumber = [];
let labelsTotals = [];
const title = `[${owner}/${repo}] Month Statistics: ${year}-${showMonth}`;
for (let i = 0; i < issues.length; i++) {
if (issues[i].state == 'closed') {
closeTotal += 1;
closeIssuesNumber.push(issues[i].number);
} else if (issues[i].state == 'open') {
openTotal += 1;
openIssuesNumber.push(issues[i].number);
}
if (countLables && issues[i].labels) {
issues[i].labels.forEach(l => {
if (l.name in labelsTotals) {
labelsTotals[l.name] += 1;
} else {
labelsTotals[l.name] = 1;
}
})
}
}
let now = dayjs().utc().format('YYYY-MM-DD HH:mm:ss');
let body = `
- Created time: ${now}
- Time base: UTC +0
`;
let totalShow = `
### Count
| Total | Open | Closed |
| -- | -- | -- |
| ${total} | ${openTotal} | ${closeTotal} |
`;
body += totalShow;
if (countLables == 'true') {
let labelsArr = [];
for (var lab in labelsTotals) {
labelsArr.push({
labelName: lab,
number: labelsTotals[lab]
})
}
labelsArr.sort((a, b) => b.number - a.number);
let labelsTitle = `
### Labels statistics
<table>
<tr>
<th>Name</th>
<th>Number</th>
</tr>`
let labelsBody = '';
labelsArr.forEach(it => {
labelsBody += `<tr><td>${it.labelName}</td><td>${it.number}</td></tr>`
})
body = body + labelsTitle + labelsBody + `</table>
`;
}
if (countComments == 'true') {
totalIssues.sort((a, b) => b.comments - a.comments);
const maxComments = totalIssues.slice(0, 3);
let commentTitle = `
### Most comments
<table>
<tr>
<th>#</th>
<th>Issue</th>
<th>Title</th>
<th>Number</th>
<th>State</th>
</tr>
`
let commentBody = '';
maxComments.forEach((it,ind) => {
commentBody += `<tr>
<td>${ind + 1}</td>
<td>${it.number}</td>
<td>${it.title}</td>
<td>${it.comments}</td>
<td>${it.state}</td></tr>`
})
body = body + commentTitle + commentBody + '</table>';
}
await doCreateIssue(owner, repo, title, body, labels, assignees);
};
// Tool
async function doQueryIssues (owner, repo, labels, state, creator) {
let params = {
owner,
repo,
state,
};
issueCreator ? params.creator = issueCreator : null;
issueAssignee ? params.assignee = issueAssignee : null;
issueMentioned ? params.mentioned = issueMentioned : null;
if (labels) {
params.labels = labels;
}
if (creator) {
params.creator = creator;
}
const res = await getIssues(params);
let issues = [];
let issueNumbers = [];
if (res.length) {
res.forEach(iss => {
const a = bodyIncludes ? iss.body.includes(bodyIncludes) : true;
const b = titleIncludes ? iss.title.includes(titleIncludes) : true;
/**
* Note: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request.
* For this reason, "Issues" endpoints may return both issues and pull requests in the response.
* You can identify pull requests by the pull_request key.
*/
if (a && b && iss.pull_request === undefined) {
if (inactiveDay) {
let lastTime = dayjs.utc().subtract(Number(inactiveDay), 'day');
let updateTime = dayjs.utc(iss.updated_at);
if (updateTime.isSameOrBefore(lastTime)) {
issues.push(iss);
issueNumbers.push(iss.number);
}
} else {
issues.push(iss);
issueNumbers.push(iss.number);
}
}
})
core.info(`Actions: [query-issues]: [${JSON.stringify(issueNumbers)}]!`);
}
return issues;
};
async function getIssues (params, page = 1) {
let { data: issues } = await octokit.issues.listForRepo({
...params,
per_page: perPage,
page
});
if (issues.length >= perPage) {
issues = issues.concat(await getIssues(params, page + 1));
}
return issues;
};
async function getIssuesInMonth (owner, repo, thisMonth, page = 1) {
const month = getPreMonth(thisMonth);
let { data: issues } = await octokit.issues.listForRepo({
owner,
repo,
state: 'all',
per_page: perPage,
page
});
issues = issues.filter(i => {
return i.pull_request === undefined
});
if (issues.length && getCreatedMontn(issues[issues.length - 1].created_at) >= month) {
issues = issues.concat(await getIssuesInMonth(owner, repo, thisMonth, page + 1));
}
return issues;
};
// tool
function testContent(con) {
if (ALLREACTIONS.includes(con)) {
return true;
} else {
core.setFailed("This actions not supported!");
return false;
}
};
function getCreatedMontn (d) {
return dayjs(d).utc().month() + 1;
};
// exports
module.exports = {
// base
doAddAssignees,
doAddLabels,
doCloseIssue,
doCreateComment,
doCreateCommentContent,
doCreateIssue,
doCreateIssueContent,
doDeleteComment,
doMarkDuplicate,
doLockIssue,
doOpenIssue,
doRemoveAssignees,
doRemoveLabels,
doSetLabels,
doUnlockIssue,
doUpdateComment,
doUpdateIssue,
doWelcome,
// advanced
doCheckInactive,
doCheckIssue,
doCloseIssues,
doFindComments,
doLockIssues,
doMonthStatistics,
};

View File

@@ -2,6 +2,7 @@ const core = require("@actions/core");
const github = require("@actions/github");
const {
// base
doAddAssignees,
doAddLabels,
doCloseIssue,
@@ -20,15 +21,15 @@ const {
doUpdateComment,
doUpdateIssue,
doWelcome,
} = require('./base.js');
const {
// advanced
doCheckInactive,
doCheckIssue,
doCloseIssues,
doFindComments,
doLockIssues,
} = require('./advanced.js');
doMonthStatistics,
} = require('./do.js');
const ALLACTIONS = [
// base
@@ -55,6 +56,7 @@ const ALLACTIONS = [
'close-issues',
'find-comments',
'lock-issues',
'month-statistics',
];
async function main() {
@@ -207,6 +209,14 @@ async function main() {
labels
);
break;
case 'month-statistics':
await doMonthStatistics(
owner,
repo,
labels,
assignees
);
break;
// default
default:
break;

View File

@@ -28,8 +28,13 @@ function testDuplicate(body) {
}
};
function getPreMonth (m) {
return m == 1 ? 12 : m -1;
};
module.exports = {
dealInput,
getPreMonth,
matchKeyword,
testDuplicate,
};

View File

@@ -1,16 +0,0 @@
{
"compilerOptions": {
"target": "esnext",
"moduleResolution": "node",
"baseUrl": "./",
"jsx": "preserve",
"declaration": true,
"skipLibCheck": true,
"esModuleInterop": true,
"paths": {
"@/*": ["src/*"],
"@@/*": ["src/.umi/*"],
"rc-dialog": ["src/index.ts"]
}
}
}