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)
- Integrating Jenkins and Phabricator with Harbormaster (see 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.
See also: T89714: Integrate Jenkins with Phabricator with Harbormaster