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}}
Show remaining errors ```text {{{remainingErrors}}} ```
{{/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}}
Show remaining errors ```text {{{remainingErrors}}} ```
{{/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:* * [ ] 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\\] " 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: |- *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