webpack/open-bot.yaml

650 lines
18 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, well 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 and next label to pull request to other branch
- filters:
pull_request:
base_ref: "^master$"
actions:
label:
remove: "PR: non-master"
- filters:
pull_request:
base_ref: "^next$"
actions:
label:
add: "PR: next"
remove: "PR: non-master"
- filters:
pull_request:
base_ref: "^(?!master$)(?!next$)"
actions:
label:
add: "PR: non-master"
remove: "PR: next"
# 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: 26w # half a year
actions:
comment:
identifer: inactive-warning
message: |-
**This issue had no activity for at least half a year.**
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: 26w # half a year
actions:
label:
remove:
- inactive
- filters:
open: true
label: inactive
last_action_age:
minimum: 15d
includeBotActions: true
actions:
close: true
comment:
identifer: 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 need to be documented (issue in webpack/webpack.js.org will be filed 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.
# Check open issues and pull requests every day
- filters:
open: true
actions:
schedule: 1d