Project

General

Profile

PrProcessor » History » Version 2

Dominic Cleal, 10/29/2015 11:36 AM
PR labels

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
* If the _Not yet reviewed_ label is missing, it sets _Needs re-review_
28
29
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.
30
31 1 Dominic Cleal
h3. Commit message styles
32
33
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:
34
35
# Commit messages match the style in [[Reviewing_patches-commit_message_format]]
36
# A Redmine ticket is referenced in the commit message
37
38 2 Dominic Cleal
If it fails this check, it will add the _Waiting on contributor_ label and leave a comment.
39
40 1 Dominic Cleal
h3. PR is mergeable
41
42
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.
43 2 Dominic Cleal
44
If it fails this check, it will replace any waiting review labels with the _Waiting on contributor_ label and leave a comment.
45 1 Dominic Cleal
46
h2. Redmine integration
47
48
When it receives an event, the corresponding Redmine ticket is updated to link it to the pull request.  The script updates these fields:
49
50
# _Status_ is changed to _Ready for Testing_
51
# _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
52
# _Target version_ (usually sprints) is set to the latest available version
53
# _Pull request_ is set to the URL of the PR
54
55
h2. Jenkins integration
56
57
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.
58
59
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.