PrProcessor » History » Version 4
Lukas Zapletal, 04/15/2016 07:55 AM
Added inactive workflow
1 | 1 | Dominic Cleal | h1. PR Processor |
---|---|---|---|
2 | |||
3 | prprocessor is a web service hosted on the project's OpenShift account, which receives GitHub webhooks/notifications and helps sync PRs to Redmine and Jenkins. |
||
4 | |||
5 | It's a simple Sinatra app, and the source is available here: https://github.com/theforeman/prprocessor. |
||
6 | |||
7 | h2. OpenShift |
||
8 | |||
9 | It runs on OpenShift using a group account, to which a few developers have push access to. When merging into the GitHub repository, please keep this in sync with OpenShift's repo by pushing to both. |
||
10 | |||
11 | h2. GitHub integration |
||
12 | |||
13 | It receives requests from GitHub when pull requests are opened or synchronized (updated). These contain lots of info about the PR, including the author, branches etc. A repository admin needs to add the webhook to send these events - more information on the "Jenkins":http://projects.theforeman.org/projects/foreman/wiki/Jenkins#PR-scanner-repo-hooks wiki page. |
||
14 | |||
15 | 2 | Dominic Cleal | It sets labels and performs checks on the PR to ensure it meets our usual standards. |
16 | 1 | Dominic Cleal | |
17 | 2 | Dominic Cleal | h3. Labels |
18 | |||
19 | When a PR is first opened, it sets: |
||
20 | |||
21 | * _Not yet reviewed_ |
||
22 | * _Needs testing_ |
||
23 | |||
24 | When a PR is updated, it: |
||
25 | |||
26 | * Removes any _Waiting on contributor_ label |
||
27 | 3 | Dominic Cleal | * Sets _Needs testing_ |
28 | 2 | Dominic Cleal | * If the _Not yet reviewed_ label is missing, it sets _Needs re-review_ |
29 | |||
30 | This encourages the workflow for reviewers to remove the _Not yet reviewed_ label when they've made the first review. When the PR is updated, it gets _Needs re-review_ so they can attend to it sooner, before starting on new PRs. |
||
31 | |||
32 | 4 | Lukas Zapletal | When a PR is not updated for six months with _Waiting on contributor_ label, it: |
33 | |||
34 | * Adds a comment |
||
35 | * Sets _Inactive_ label |
||
36 | * Closes the PR |
||
37 | |||
38 | Every week, maximum of five inactive pull requests are closed. |
||
39 | |||
40 | 1 | Dominic Cleal | h3. Commit message styles |
41 | |||
42 | For repositories in the "redmine_issue_required_repos.yaml":https://github.com/theforeman/prprocessor/blob/master/config/redmine_issue_required_repos.yaml list, it enforces that: |
||
43 | |||
44 | # Commit messages match the style in [[Reviewing_patches-commit_message_format]] |
||
45 | # A Redmine ticket is referenced in the commit message |
||
46 | |||
47 | 2 | Dominic Cleal | If it fails this check, it will add the _Waiting on contributor_ label and leave a comment. |
48 | |||
49 | 1 | Dominic Cleal | h3. PR is mergeable |
50 | |||
51 | It checks whether the PR is mergeable against the branch it's proposed for. This will only pick up this error when the PR is updated because the service is event-driven, so it won't notify authors when a PR goes out of sync due to master/develop being changed, and the PR is not updated. |
||
52 | 2 | Dominic Cleal | |
53 | If it fails this check, it will replace any waiting review labels with the _Waiting on contributor_ label and leave a comment. |
||
54 | 1 | Dominic Cleal | |
55 | h2. Redmine integration |
||
56 | |||
57 | When it receives an event, the corresponding Redmine ticket is updated to link it to the pull request. The script updates these fields: |
||
58 | |||
59 | # _Status_ is changed to _Ready for Testing_ |
||
60 | # _Assigned To_ is changed to the PR author - update "users.yaml":https://github.com/theforeman/prprocessor/blob/master/config/users.yaml for new or unknown developers |
||
61 | # _Target version_ (usually sprints) is set to the latest available version |
||
62 | # _Pull request_ is set to the URL of the PR |
||
63 | |||
64 | h2. Jenkins integration |
||
65 | |||
66 | A "PR scanner" job runs regularly on Jenkins and is responsible for all checking, testing and updating of pull requests. Since it uses a lot of API queries, it only runs every 30 minutes. More about this job is on the "Jenkins wiki page":http://projects.theforeman.org/projects/foreman/wiki/Jenkins#PR-scanner. |
||
67 | |||
68 | To get faster PR testing, when a PR hook is received by the prprocessor, it triggers an immediate run/build of the Jenkins scanner job against the relevant PR. No further action is taken by the prprocessor. |