From b5485bf54fa80c59d212450e8daf13edcb548425 Mon Sep 17 00:00:00 2001 From: Emanuele Stoppa Date: Mon, 18 Dec 2017 20:46:20 +0000 Subject: [PATCH 1/6] Added open-bot.yml configuration file for open bot, plus two npm scripts --- open-bot.yml | 351 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- 2 files changed, 354 insertions(+), 1 deletion(-) create mode 100644 open-bot.yml diff --git a/open-bot.yml b/open-bot.yml new file mode 100644 index 00000000000..a32f20e4406 --- /dev/null +++ b/open-bot.yml @@ -0,0 +1,351 @@ +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" + ensure_1: + value: "{{status_1.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" + any: + ensure_1: + value: "{{status_1.state}}" + equals: "failure" + not: + any: + ensure_3: + value: "{{status_1.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 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]+?npm run travis:\\$JOB_PART\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" + 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 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 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 \ No newline at end of file diff --git a/package.json b/package.json index 8ba7c7757e4..0042651fe1e 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,9 @@ "precommit": "lint-staged", "prepublish": "flow-remove-types lib/ -d dist/ && npm run format:dist", "pretest": "npm run lint", - "test": "jest --coverage" + "test": "jest --coverage", + "travis:unit": "npm run test", + "travis:lint": "npm run lint" }, "lint-staged": { "{lib,bin,__mocks__}/**/!(__testfixtures__)/**.js": [ From c4659a09e0d4bdc40a4bba1b2ec3b7bc58e2bdf3 Mon Sep 17 00:00:00 2001 From: Emanuele Stoppa Date: Mon, 18 Dec 2017 20:52:24 +0000 Subject: [PATCH 2/6] Added open-bot.yml configuration file for open bot, plus two npm scripts --- open-bot.yml | 351 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- 2 files changed, 354 insertions(+), 1 deletion(-) create mode 100644 open-bot.yml diff --git a/open-bot.yml b/open-bot.yml new file mode 100644 index 00000000000..8e075415d3e --- /dev/null +++ b/open-bot.yml @@ -0,0 +1,351 @@ +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" + ensure_1: + value: "{{status_1.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" + any: + ensure_1: + value: "{{status_1.state}}" + equals: "failure" + not: + any: + ensure_3: + value: "{{status_1.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 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]+?npm run travis:\\$JOB_PART\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" + 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 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 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 \ No newline at end of file diff --git a/package.json b/package.json index 8ba7c7757e4..0042651fe1e 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,9 @@ "precommit": "lint-staged", "prepublish": "flow-remove-types lib/ -d dist/ && npm run format:dist", "pretest": "npm run lint", - "test": "jest --coverage" + "test": "jest --coverage", + "travis:unit": "npm run test", + "travis:lint": "npm run lint" }, "lint-staged": { "{lib,bin,__mocks__}/**/!(__testfixtures__)/**.js": [ From 89264ec5eec526b3e6afe85cbeab5a999a389ea9 Mon Sep 17 00:00:00 2001 From: Emanuele Date: Tue, 19 Dec 2017 12:28:31 +0000 Subject: [PATCH 3/6] Updated open-bot configuration --- open-bot.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/open-bot.yml b/open-bot.yml index a32f20e4406..f89fbe0a084 100644 --- a/open-bot.yml +++ b/open-bot.yml @@ -31,11 +31,6 @@ rules: ensure_1: value: "{{status_1.state}}" equals: "failure" - not: - any: - ensure_3: - value: "{{status_1.state}}" - equals: "pending" actions: label: add: "PR: CI-not-ok" @@ -77,8 +72,6 @@ rules: {{{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 @@ -138,7 +131,7 @@ rules: 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. + Please take a look at the CI results from [travis]({{status_1.target_url}}) ({{status_1.state}}) and fix these issues. # add conflict label to pull requests with conflict @@ -348,4 +341,4 @@ rules: - filters: open: true actions: - schedule: 1d \ No newline at end of file + schedule: 1d From 3398a6e5cf039b5e2f2bac95b3201e3d84cb4281 Mon Sep 17 00:00:00 2001 From: Emanuele Date: Tue, 19 Dec 2017 12:29:48 +0000 Subject: [PATCH 4/6] Added new dist command Added new dist command to generate a clean distribution folder --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0042651fe1e..9c915598847 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,9 @@ "prepublish": "flow-remove-types lib/ -d dist/ && npm run format:dist", "pretest": "npm run lint", "test": "jest --coverage", - "travis:unit": "npm run test", - "travis:lint": "npm run lint" + "dist": "flow-remove-types lib/ -d dist/ && npm run format:dist", + "travis:integration": "npm run dist && npm run test", + "travis:lint": "npm run dist && npm run lint" }, "lint-staged": { "{lib,bin,__mocks__}/**/!(__testfixtures__)/**.js": [ From 7360eae631dd345b51d2caec796db916f3d0b08c Mon Sep 17 00:00:00 2001 From: Emanuele Date: Tue, 19 Dec 2017 12:30:40 +0000 Subject: [PATCH 5/6] Update travis configuration, runnable from the bot --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4e493cc75ec..fe9dc51025d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,4 @@ before_script: - sh -e /etc/init.d/xvfb start - bash <(curl -s https://codecov.io/bash) -script: - - npm run prepublish - - npm run lint - - npm run test +script: npm run travis:$JOB_PART From c2cccee513382daaf81a5ebc4c10ed8dfd93085a Mon Sep 17 00:00:00 2001 From: Emanuele Date: Tue, 19 Dec 2017 12:32:42 +0000 Subject: [PATCH 6/6] Updated job from 'unit' to 'integration' --- open-bot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/open-bot.yml b/open-bot.yml index f89fbe0a084..be123729cf7 100644 --- a/open-bot.yml +++ b/open-bot.yml @@ -53,7 +53,7 @@ rules: state: "failed" allow_failure: false config: - env: JOB_PART=unit + env: JOB_PART=integration fetch: travis_job.log string_cleanup: id: logResult