693 lines
20 KiB
YAML
693 lines
20 KiB
YAML
bot: "webpack-bot"
|
||
rules:
|
||
# Add ci-ok, ci-not-ok labels depending on travis status
|
||
# comment to point the user to the results
|
||
# comment in case of success
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
mergeable: true
|
||
status_1:
|
||
context: "continuous-integration/travis-ci/pr"
|
||
status_2:
|
||
context: "continuous-integration/appveyor/pr"
|
||
ensure_1:
|
||
value: "{{status_1.state}}"
|
||
equals: "success"
|
||
ensure_2:
|
||
value: "{{status_2.state}}"
|
||
equals: "success"
|
||
actions:
|
||
label:
|
||
add: "PR: CI-ok"
|
||
remove: "PR: CI-not-ok"
|
||
comment:
|
||
identifier: "ci-result"
|
||
message: |-
|
||
Thank you for your pull request! The most important CI builds succeeded, we’ll review the pull request soon.
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
mergeable: true
|
||
status_1:
|
||
context: "continuous-integration/travis-ci/pr"
|
||
status_2:
|
||
context: "continuous-integration/appveyor/pr"
|
||
any:
|
||
ensure_1:
|
||
value: "{{status_1.state}}"
|
||
equals: "failure"
|
||
ensure_2:
|
||
value: "{{status_2.state}}"
|
||
equals: "failure"
|
||
not:
|
||
any:
|
||
ensure_3:
|
||
value: "{{status_1.state}}"
|
||
equals: "pending"
|
||
ensure_4:
|
||
value: "{{status_2.state}}"
|
||
equals: "pending"
|
||
actions:
|
||
label:
|
||
add: "PR: CI-not-ok"
|
||
remove: "PR: CI-ok"
|
||
set:
|
||
id: report_ci
|
||
value: yep
|
||
|
||
# Report specific error message if jest for basic tests fails
|
||
- filters:
|
||
ensure:
|
||
value: "{{report_ci}}"
|
||
equals: yep
|
||
commit: true
|
||
status:
|
||
context: "continuous-integration/travis-ci/pr"
|
||
travis_job:
|
||
state: "failed"
|
||
allow_failure: false
|
||
config:
|
||
env: JOB_PART=basic
|
||
fetch: travis_job.log
|
||
string_cleanup:
|
||
id: logResult
|
||
value: "{{{fetch}}}"
|
||
remove:
|
||
- ".\\[2K.\\[1G|.\\[999D.\\[K"
|
||
- "^[\\s\\S]+?\\$ yarn travis:\\$JOB_PART.*\n"
|
||
- "\\$ node --max-old-space-size=4096.*\n"
|
||
- ".+rimraf coverage"
|
||
- "yarn run.+\n"
|
||
- "\\(node:\\d+\\) (\\[DEP0005\\]|DeprecationWarning).+\n"
|
||
- "\\$ yarn (cover|test):.+\n"
|
||
- "Ran all test suites.\n[\\s\\S]*"
|
||
- "error Command failed with exit code \\d+.\n"
|
||
- "info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.\n"
|
||
- "Force exiting Jest\n\nHave you considered.+"
|
||
- "=============================== Coverage summary ===============================[\\s\\S]+?================================================================================"
|
||
- " *PASS *test/.*\n"
|
||
- "^\\s+\n|\\s+$"
|
||
string_cleanup_1:
|
||
id: firstError
|
||
value: "{{{logResult}}}"
|
||
remove:
|
||
- "\n\n( ●| FAIL)[\\s\\S]*"
|
||
- "Test Suites:[\\s\\S]*"
|
||
- "\\s+$"
|
||
string_cleanup_2:
|
||
id: remainingErrors
|
||
value: "{{{logResult}}}"
|
||
remove:
|
||
- "^[\\s\\S]+?(?=\n\n( ●| FAIL)|$)"
|
||
- "^\n+"
|
||
- "Test Suites:[\\s\\S]*"
|
||
- "\\s+$"
|
||
string_cleanup_3:
|
||
id: summary
|
||
value: "{{{logResult}}}"
|
||
remove:
|
||
- "^[\\s\\S]+?(?=Test Suites:)"
|
||
- "\\s+$"
|
||
actions:
|
||
comment:
|
||
identifier: "ci-result"
|
||
message: |-
|
||
The basic integration tests failed.
|
||
|
||
@{{commit.author.login}} Please review the following output log for errors:
|
||
|
||
```text
|
||
{{{firstError}}}
|
||
```
|
||
{{#if remainingErrors}}
|
||
<details>
|
||
<summary>Show remaining errors</summary>
|
||
|
||
```text
|
||
{{{remainingErrors}}}
|
||
```
|
||
</details>
|
||
{{/if}}
|
||
|
||
```text
|
||
{{{summary}}}
|
||
```
|
||
|
||
See [complete report here]({{status.target_url}}).
|
||
set:
|
||
id: report_ci
|
||
value: nope
|
||
|
||
# Report specific error message if jest for integration tests fails
|
||
- filters:
|
||
ensure:
|
||
value: "{{report_ci}}"
|
||
equals: yep
|
||
commit: true
|
||
status:
|
||
context: "continuous-integration/travis-ci/pr"
|
||
travis_job:
|
||
state: "failed"
|
||
allow_failure: false
|
||
config:
|
||
env: JOB_PART=integration
|
||
fetch: travis_job.log
|
||
string_cleanup:
|
||
id: logResult
|
||
value: "{{{fetch}}}"
|
||
remove:
|
||
- ".\\[2K.\\[1G|.\\[999D.\\[K"
|
||
- "^[\\s\\S]+?\\$ yarn travis:\\$JOB_PART.*\n"
|
||
- "\\$ node --max-old-space-size=4096.*\n"
|
||
- ".+rimraf coverage"
|
||
- "yarn run.+\n"
|
||
- "\\(node:\\d+\\) (\\[DEP0005\\]|DeprecationWarning).+\n"
|
||
- "\\$ yarn (cover|test):.+\n"
|
||
- "The command \"yarn travis:\\$JOB_PART\" exited[\\s\\S]*"
|
||
- "Ran all test suites.+\n"
|
||
- "error Command failed with exit code \\d+.\n"
|
||
- "info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.\n"
|
||
- "Force exiting Jest\n\nHave you considered.+"
|
||
- "=============================== Coverage summary ===============================[\\s\\S]+?================================================================================"
|
||
- " *PASS *test/.*\n"
|
||
- "^\\s+\n|\\s+$"
|
||
string_cleanup_1:
|
||
id: firstError
|
||
value: "{{{logResult}}}"
|
||
remove:
|
||
- "\n\n( ●| FAIL)[\\s\\S]*"
|
||
- "Test Suites:[\\s\\S]*"
|
||
- "\\s+$"
|
||
string_cleanup_2:
|
||
id: remainingErrors
|
||
value: "{{{logResult}}}"
|
||
remove:
|
||
- "^[\\s\\S]+?(?=\n\n( ●| FAIL)|$)"
|
||
- "^\n+"
|
||
- "Test Suites:[\\s\\S]*"
|
||
- "\\s+$"
|
||
string_cleanup_3:
|
||
id: summary
|
||
value: "{{{logResult}}}"
|
||
remove:
|
||
- "^[\\s\\S]+?(?=Test Suites:)"
|
||
- "\\s+$"
|
||
actions:
|
||
comment:
|
||
identifier: "ci-result"
|
||
message: |-
|
||
The basic integration tests succeeded, but the full suite failed.
|
||
|
||
@{{commit.author.login}} Please review the following output log for errors:
|
||
|
||
```text
|
||
{{{firstError}}}
|
||
```
|
||
{{#if remainingErrors}}
|
||
<details>
|
||
<summary>Show remaining errors</summary>
|
||
|
||
```text
|
||
{{{remainingErrors}}}
|
||
```
|
||
</details>
|
||
{{/if}}
|
||
|
||
```text
|
||
{{{summary}}}
|
||
```
|
||
|
||
See [complete report here]({{status.target_url}}).
|
||
set:
|
||
id: report_ci
|
||
value: nope
|
||
|
||
# Report specific error message if jest for unit tests or liniting fails
|
||
- filters:
|
||
ensure:
|
||
value: "{{report_ci}}"
|
||
equals: yep
|
||
commit: true
|
||
status:
|
||
context: "continuous-integration/travis-ci/pr"
|
||
travis_job:
|
||
state: "failed"
|
||
allow_failure: false
|
||
config:
|
||
env: JOB_PART=lint-unit
|
||
fetch: travis_job.log
|
||
string_cleanup:
|
||
id: logResult
|
||
value: "{{{fetch}}}"
|
||
remove:
|
||
- ".\\[2K.\\[1G|.\\[999D.\\[K"
|
||
- "^[\\s\\S]+?\\$ yarn travis:\\$JOB_PART.*\n"
|
||
- "\\$ node --max-old-space-size=4096.*\n"
|
||
- ".+rimraf coverage"
|
||
- "yarn run.+\n"
|
||
- "\\(node:\\d+\\) (\\[DEP0005\\]|DeprecationWarning).+\n"
|
||
- "\\$ yarn (unit|lint).+\n"
|
||
- "The command \"yarn travis:\\$JOB_PART\" exited[\\s\\S]*"
|
||
- "Ran all test suites.+\n"
|
||
- "error Command failed with exit code \\d+.\n"
|
||
- "info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.\n"
|
||
- "Force exiting Jest\n\nHave you considered.+"
|
||
- "=============================== Coverage summary ===============================[\\s\\S]+?================================================================================"
|
||
- " *PASS *test/.*\n"
|
||
- "^\\s+\n|\\s+$"
|
||
actions:
|
||
comment:
|
||
identifier: "ci-result"
|
||
message: |-
|
||
The integration tests look fine, but there are code style issues or unit test failures in the Pull Request.
|
||
|
||
@{{commit.author.login}} Please review the following output log for errors:
|
||
|
||
``` text
|
||
{{{logResult}}}
|
||
```
|
||
|
||
If the unit tests are outdated, you can choose to delete them and add integration tests instead. That would be great.
|
||
|
||
See [complete report here]({{status.target_url}}).
|
||
set:
|
||
id: report_ci
|
||
value: nope
|
||
|
||
# Report a general error message
|
||
- filters:
|
||
ensure:
|
||
value: "{{report_ci}}"
|
||
equals: yep
|
||
commit: true
|
||
status_1:
|
||
context: "continuous-integration/travis-ci/pr"
|
||
status_2:
|
||
context: "continuous-integration/appveyor/pr"
|
||
actions:
|
||
comment:
|
||
identifier: "ci-result"
|
||
message: |-
|
||
@{{commit.author.login}} The most important CI builds failed. This way your PR can't be merged.
|
||
|
||
Please take a look at the CI results from [travis]({{status_1.target_url}}) ({{status_1.state}}) and [appveyor]({{status_2.target_url}}) ({{status_2.state}}) and fix these issues.
|
||
|
||
# Add tests-needed label depending on codecov status
|
||
# comment to point the user writing test cases
|
||
# comment in case of success
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
mergeable: true
|
||
status:
|
||
context: "codecov/patch/integration"
|
||
ensure:
|
||
value: "{{status.state}}"
|
||
equals: "success"
|
||
label: "PR: tests-needed"
|
||
actions:
|
||
label:
|
||
remove: "PR: tests-needed"
|
||
comment:
|
||
identifier: "tests-result"
|
||
message: |-
|
||
The minimum test ratio has been reached. Thanks!
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
mergeable: true
|
||
status:
|
||
context: "codecov/patch/integration"
|
||
ensure:
|
||
value: "{{status.state}}"
|
||
equals: "failure"
|
||
actions:
|
||
label:
|
||
add: "PR: tests-needed"
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
mergeable: true
|
||
status:
|
||
context: "codecov/patch/integration"
|
||
ensure:
|
||
value: "{{status.state}}"
|
||
equals: "failure"
|
||
age:
|
||
value: "{{status.created_at}}"
|
||
minimum: 1h
|
||
permission: "read|none"
|
||
actions:
|
||
comment:
|
||
identifier: "tests-result"
|
||
message: |-
|
||
It looks like this Pull Request doesn't include [enough test cases]({{status.target_url}}) (based on Code Coverage analysis of the PR diff).
|
||
|
||
A PR need to be covered by tests if you add a new feature (we want to make sure that your feature is working) or if you fix a bug (we want to make sure that we don't run into a regression in future).
|
||
|
||
@{{issue.user.login}} Please check if this is appliable to your PR and if you can add more test cases.
|
||
|
||
Read the [test readme](https://github.com/webpack/webpack/blob/master/test/README.md) for details how to write test cases.
|
||
|
||
# add conflict label to pull requests with conflict
|
||
# on conflict all result labels are removed
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
mergeable: false
|
||
actions:
|
||
label:
|
||
add: "PR: conflict"
|
||
remove:
|
||
- "PR: tests-needed"
|
||
- "PR: CI-ok"
|
||
- "PR: CI-not-ok"
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
mergeable: true
|
||
actions:
|
||
label:
|
||
remove: "PR: conflict"
|
||
|
||
# add unreviewed, reviewed, review-outdated labels
|
||
# comment to ping reviewer
|
||
# comment on new PR
|
||
- filters:
|
||
open: true
|
||
in_order:
|
||
commit: true
|
||
review:
|
||
state: APPROVED|CHANGES_REQUESTED
|
||
ensure:
|
||
value: "{{review.state}}"
|
||
equals: APPROVED
|
||
permission:
|
||
user: "{{review.user.login}}"
|
||
actions:
|
||
label:
|
||
add: "PR: reviewed-approved"
|
||
remove:
|
||
- "PR: review-outdated"
|
||
- "PR: unreviewed"
|
||
- "PR: reviewed"
|
||
- filters:
|
||
open: true
|
||
in_order:
|
||
commit: true
|
||
review:
|
||
state: APPROVED|CHANGES_REQUESTED
|
||
permission:
|
||
user: "{{review.user.login}}"
|
||
ensure:
|
||
value: "{{review.state}}"
|
||
equals: CHANGES_REQUESTED
|
||
actions:
|
||
label:
|
||
add: "PR: reviewed-changes-requested"
|
||
remove:
|
||
- "PR: review-outdated"
|
||
- "PR: unreviewed"
|
||
- "PR: reviewed"
|
||
- filters:
|
||
open: true
|
||
in_order:
|
||
review:
|
||
state: APPROVED|CHANGES_REQUESTED
|
||
commit: true
|
||
permission:
|
||
user: "{{review.user.login}}"
|
||
not:
|
||
label: "review-outdated"
|
||
ensure:
|
||
value: "{{commit.author.login}}"
|
||
notEquals: "{{review.user.login}}"
|
||
actions:
|
||
label:
|
||
add: "PR: review-outdated"
|
||
remove:
|
||
- "PR: reviewed-approved"
|
||
- "PR: reviewed-changes-requested"
|
||
- "PR: unreviewed"
|
||
- "PR: reviewed"
|
||
comment:
|
||
identifier: "review-outdated"
|
||
message: |-
|
||
@{{commit.author.login}} Thanks for your update.
|
||
|
||
I labeled the Pull Request so reviewers will review it again.
|
||
|
||
@{{review.user.login}} Please review the new changes.
|
||
- filters:
|
||
open: true
|
||
commit: true
|
||
not:
|
||
review:
|
||
state: APPROVED|CHANGES_REQUESTED
|
||
actions:
|
||
label: "PR: unreviewed"
|
||
|
||
# add non-master, webpack-4 and next label to pull request to other branch
|
||
- filters:
|
||
pull_request:
|
||
base_ref: "^master$"
|
||
actions:
|
||
label:
|
||
remove:
|
||
- "PR: next"
|
||
- "PR: webpack-4"
|
||
- "PR: non-master"
|
||
- filters:
|
||
pull_request:
|
||
base_ref: "^next$"
|
||
actions:
|
||
label:
|
||
add: "PR: next"
|
||
remove:
|
||
- "PR: webpack-4"
|
||
- "PR: non-master"
|
||
- filters:
|
||
pull_request:
|
||
base_ref: "^webpack-4$"
|
||
actions:
|
||
label:
|
||
add: "PR: webpack-4"
|
||
remove:
|
||
- "PR: next"
|
||
- "PR: non-master"
|
||
- filters:
|
||
pull_request:
|
||
base_ref: "^(?!master$)(?!webpack-4$)(?!next$)"
|
||
actions:
|
||
label:
|
||
add: "PR: non-master"
|
||
remove:
|
||
- "PR: next"
|
||
- "PR: webpack-4"
|
||
|
||
# add non-master label to pull request to other branch
|
||
- filters:
|
||
open: true
|
||
age:
|
||
minimum: 1d
|
||
maximum: 1w
|
||
pull_request:
|
||
head_ref: "^master$"
|
||
permission: "read|none"
|
||
actions:
|
||
comment:
|
||
identifier: "head-master"
|
||
edit: true
|
||
message: |-
|
||
Hi @{{pull_request.user.login}}.
|
||
|
||
Just a little hint from a friendly bot about the best practice when submitting pull requests:
|
||
|
||
> Don't submit pull request from your own `master` branch. It's recommended to create a feature branch for the PR.
|
||
|
||
*You don't have to change it for this PR, just make sure to follow this hint the next time you submit a PR.*
|
||
|
||
# skip CLA for dependabot
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
author: "^dependabot(-preview)?\\[bot\\]$"
|
||
status:
|
||
context: "licence/cla"
|
||
state: "pending"
|
||
actions:
|
||
status:
|
||
context: "licence/cla"
|
||
description: "Contributor License Agreement is not needed for this user."
|
||
state: "success"
|
||
|
||
# merge dependabot PRs automatically
|
||
- filters:
|
||
open: true
|
||
pull_request:
|
||
author: "^dependabot(-preview)?\\[bot\\]$"
|
||
mergeable_state: clean
|
||
merged: false
|
||
label: "PR: CI-ok"
|
||
actions:
|
||
merge: true
|
||
|
||
# add "Send a PR" label when somebody with write permission say it
|
||
- filters:
|
||
open: true
|
||
comment: "[Ss]end a [Pp][Rr]"
|
||
permission:
|
||
user: "{{comment.actor.login}}"
|
||
actions:
|
||
label: "Send a PR"
|
||
|
||
# Move issue task
|
||
- filters:
|
||
open: true
|
||
comment: "\\s*@webpack-bot\\s+move\\s+(?:to\\s+)?([a-z0-9_\\-\\.]+/[a-z0-9_\\-\\.]+)\\s*([\\s\\S]*)$"
|
||
not:
|
||
comment_1:
|
||
matching: "moved\\-by\\-bot"
|
||
author: "."
|
||
permission:
|
||
user: "{{comment.actor.login}}"
|
||
actions:
|
||
new_issue:
|
||
target: "{{{comment_match.[1]}}}"
|
||
body: |-
|
||
{{{issue.body}}}
|
||
|
||
---
|
||
|
||
This issue was moved from {{owner}}/{{repo}}#{{issue.number}} by @{{comment.actor.login}}. Original issue was by @{{issue.user.login}}.
|
||
|
||
{{{comment_match.[2]}}}
|
||
comment:
|
||
identifier: moved-by-bot
|
||
message: |-
|
||
I've moved it to {{comment_match.[1]}}.
|
||
close: true
|
||
|
||
# mark inactive issues with inactive label
|
||
# close them when no activity after warning
|
||
- filters:
|
||
issue: true
|
||
open: true
|
||
not:
|
||
label: inactive
|
||
ensure:
|
||
value: "{{issue.reactions.[+1]}}"
|
||
range: "< 10"
|
||
last_action_age: 13w # three months
|
||
actions:
|
||
comment:
|
||
identifier: inactive-warning
|
||
message: |-
|
||
**This issue had no activity for at least three months.**
|
||
|
||
It's subject to automatic issue closing if there is no activity in the next 15 days.
|
||
label: inactive
|
||
- filters:
|
||
open: true
|
||
label: inactive
|
||
last_action_age:
|
||
maximum: 13w # three months
|
||
actions:
|
||
label:
|
||
remove:
|
||
- inactive
|
||
- filters:
|
||
open: true
|
||
label: inactive
|
||
last_action_age:
|
||
minimum: 15d
|
||
includeBotActions: true
|
||
actions:
|
||
close: true
|
||
comment:
|
||
identifier: inactive-close
|
||
message: |-
|
||
Issue was closed because of inactivity.
|
||
|
||
If you think this is still a valid issue, please file a new issue with additional information.
|
||
|
||
# Add action actions box to each pull request
|
||
- filters:
|
||
pull_request: true
|
||
open: true
|
||
not:
|
||
comment:
|
||
matching: admin-actions
|
||
author: webpack-bot
|
||
actions:
|
||
comment:
|
||
identifier: admin-actions
|
||
message: |-
|
||
*For maintainers only:*
|
||
|
||
* [ ] <!-- document --> This needs to be documented (issue in webpack/webpack.js.org will be filed when merged)
|
||
* [ ] <!-- webpack-4-backport --> This needs to be backported to webpack 4 (issue will be created when merged)
|
||
|
||
# When a pull request need to be documented, create an issue in webpack/webpack.js.org when merged
|
||
- filters:
|
||
pull_request:
|
||
merged: true
|
||
comment:
|
||
author: webpack-bot
|
||
matching: "\\* \\[x\\] <!-- document -->"
|
||
not:
|
||
comment_1:
|
||
author: webpack-bot
|
||
matching: admin-action-document-executed
|
||
actions:
|
||
new_issue:
|
||
target: webpack/webpack.js.org
|
||
title: "Document webpack change: {{{pull_request.title}}}"
|
||
body: |-
|
||
<!-- documentation request from webpack/webpack -->
|
||
|
||
*A pull request by @{{pull_request.user.login}} was merged and maintainers requested a documentation change.*
|
||
|
||
See pull request: {{{pull_request.html_url}}}
|
||
|
||
---
|
||
|
||
{{{pull_request.body}}}
|
||
comment:
|
||
identifier: admin-action-document-executed
|
||
message: |-
|
||
I've created an issue to document this in webpack/webpack.js.org.
|
||
|
||
# When a pull request need to be backported, create an issue in webpack/webpack when merged
|
||
- filters:
|
||
pull_request:
|
||
merged: true
|
||
comment:
|
||
author: webpack-bot
|
||
matching: "\\* \\[x\\] <!-- webpack-4-backport -->"
|
||
not:
|
||
comment_1:
|
||
author: webpack-bot
|
||
matching: admin-action-webpack-4-backport-executed
|
||
actions:
|
||
new_issue:
|
||
target: webpack/webpack
|
||
title: "Backport to webpack 4: {{{pull_request.title}}}"
|
||
body: |-
|
||
{{{pull_request.html_url}}} needs to be backported to webpack 4.
|
||
|
||
Send a PR.
|
||
|
||
cc @{{pull_request.user.login}}
|
||
comment:
|
||
identifier: admin-action-webpack-4-backport-executed
|
||
message: |-
|
||
I've created an issue to backport this.
|
||
|
||
# Check open issues and pull requests every day
|
||
- filters:
|
||
open: true
|
||
actions:
|
||
schedule: 1d
|