Our code review process must be connected to our continuous integration process. In theory, there are different ways to approach this:
* Creating a binding between Phabricator and Zuul (see below)
* [[ http://www.guywarner.com/2014/05/integrating-jenkins-and-phabricator.html | Integrating Jenkins and Phabricator with Harbormaster ]] (see [[ https://secure.phabricator.com/T1049 | Harbormaster's development status upstream ]])
* ... more?
We must choose our preferred option, and implement it.
**The Zuul option**
Zuul is a python daemon which act as a gateway between events in Gerrit and Jenkins. Zuul establish a ssh connection with Gerrit, executing the command 'gerrit stream-events'.
Whenever an event occurs in Gerrit (a vote, a comment, git ref updated, change abandoned, new patchset, etc.) it emits a json formatted event over the ssh channel which is then consumed by Zuul.
Zuul is modular enough that we can add support for Phabricator to it. We will probably need a system to push events much like Gerrit stream-events, or we can hack something in Zuul to poll events from time to time.
We could instead overhaul the continuous integration system to have Phabricator trigger Jenkins jobs directly. But since I want to eventually phase out Jenkins entirely, I think we should keep Zuul around.