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 mocha 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: - "^[\\s\\S]+?\\d+\\s+pending\n+" - "npm ERR!.*\n" - "\n*=============================================================================\n[\\s\\S]*" actions: comment: identifier: "ci-result" message: |- @{{commit.author.login}} Please review the following output log for errors: ``` text {{{logResult}}} ``` See [complete report here]({{status.target_url}}). set: id: report_ci value: nope # Report specific error message if mocha for unit 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=unit fetch: travis_job.log string_cleanup: id: logResult value: "{{{fetch}}}" remove: - "^[\\s\\S]+?\\d+\\s+pending\n+" - "npm ERR!.*\n" - "\n*=============================================================================\n[\\s\\S]*" actions: comment: identifier: "ci-result" message: |- @{{commit.author.login}} Please review the following output log for errors: ``` text {{{logResult}}} ``` Instead of updating these (outdated?) unit tests, 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 specific error message if linting fails - filters: ensure: value: "{{report_ci}}" equals: yep commit: true status: context: "continuous-integration/travis-ci/pr" travis_job: state: "failed" config: env: JOB_PART=lint fetch: travis_job.log string_cleanup: id: logResult value: "{{{fetch}}}" remove: - "^[\\s\\S]+?npm run travis:\\$JOB_PART\n*" - "npm ERR!.*\n" - "\n*The command \"npm run travis:\\$JOB_PART\" exited [\\s\\S]*" actions: comment: identifier: "ci-result" message: |- @{{commit.author.login}} The tests look fine, but there are code style issue in your Pull Request. Please review the following: ``` text {{{logResult}}} ``` 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 codedov 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 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 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 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 small label to small pull requests - filters: open: true pull_request: additions: "<= 10" deletions: "<= 10" changed_files: "<= 2" actions: label: "PR: small" # 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.* # 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}}. Orginal 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. # Check issues every week - filters: open: true actions: schedule: 1d