mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			528 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			528 lines
		
	
	
		
			12 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 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]*"
 | ||
|     string_cleanup_1:
 | ||
|       id: firstError
 | ||
|       value: "{{{logResult}}}"
 | ||
|       remove:
 | ||
|         - "\\s2\\)\\s[\\s\\S]*"
 | ||
|     string_cleanup_2:
 | ||
|       id: remainingErrors
 | ||
|       value: "{{{logResult}}}"
 | ||
|       remove:
 | ||
|         - "^[\\s\\S]+?(?=\\s2\\)\\s)"
 | ||
|   actions:
 | ||
|     comment:
 | ||
|       identifier: "ci-result"
 | ||
|       message: |-
 | ||
|         @{{commit.author.login}} Please review the following output log for errors:
 | ||
|         ```text
 | ||
|         {{{firstError}}}
 | ||
|         ```
 | ||
|         <details>
 | ||
|           <summary>Show remaining errors</summary>
 | ||
| 
 | ||
|         ```text
 | ||
|         {{{remainingErrors}}}
 | ||
|         ```
 | ||
|         </details>
 | ||
| 
 | ||
|         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 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 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.*        
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| # 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.        
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| # Check issues every week
 | ||
| - filters:
 | ||
|     open: true
 | ||
|   actions:
 | ||
|     schedule: 1d
 |