Summary
=======
Harbormaster now exists in usable form, and there's some interest in hooking it up to more external build systems.
Writing lots of integrations for third-party software is broadly something the upstream is not well equipped for. We have a small team and it is hard for us to test integrations and keep them up to date. Integrations tend to have a higher maintenance cost than other types of features because we need to keep them working as APIs change. Problems with integrations can also be difficult for us to reproduce and impossible to build a reproduction case for. So our general attitude here is cautious, and we are not rushing to integrate with everything we can.
Build Systems We Know About
====================
| System | User Interest | Support Complexity | Upstream | Other Support |
|------|------|------|-----|----|
| Harbormaster + Drydock | A Bit | Very High | {icon check, color=green} Builtin | |
| Jenkins | Relatively High (T6518) | Moderate | | {icon check color=green} [[ https://github.com/uber/phabricator-jenkins-plugin | Uber Plugin ]]
| CircleCI | Some (T7869) | Moderate | {icon check, color=green} Builtin | |
| TeamCity | Some | Moderate | | {icon check color=orange} In Progress |
| Travis | Some (T5508) | Unknown | | |
| Hudson | None? | Unknown | | |
| Codeship | None? | Unknown | | |
| Changes | None? | Unknown | | {icon check color=orange} Builtin? |
**Harbormaster + Drydock**
Ref: T9123
Status: In Development
This is native builds, where Phabricator hosts the entire build itself. The upstream is interested in this so it's definitely getting built. There is some community interest in various parts of it, even if that doesn't fully extend to driving builds in all cases. We expect this to cover more use cases over time and for a greater amount of logic to gradually live in Harbormaster.
**Jenkins**
Ref: T6518
Status: Recommend Community Extension
Jenkins appears to be the most popular build platform among Phabricator users by a wide margin. Support is moderately complex but Uber has [[ https://github.com/uber/phabricator-jenkins-plugin | a plugin ]] for it (maintained by @sectioneight) that seems pretty good. At least some other installs are using this successfully in a production environment.
I don't currently expect to develop dedicated upstream support for Jenkins, since it doesn't look like there's much we can really do on our side, nor like there's much we'd do differently than the existing plugin does. And we don't have expertise with Jenkins, so I suspect any effort we made here would be very similar, just way worse. I'd expect we'll just point users at this plugin more formally and maybe write a build step which provides a nice facade for it on the Phabricator side (or contribute such a facade to the plugin, since this can also live in third-party code).
**CircleCI**
Ref: T7869
Status: Evaluate After v2
We've seen some interest in CircleCI, including from Phacility customers. It's hosted and has webhooks, so upstream support makes more sense than it does for Jenkins. It will require some evaluation to determine if the hooks are pretty reasonable to send to the right places or if CircleCI has different model of builds than we do.
I currently plan to evaluate CircleCI support after we ship Harbormaster v2 (T9123).
**Travis**
Ref: One mention in T5508
Status: Evaluate After v2 / Wait for Interest
Travis is similar to CircleCI (hosted builds + webhooks) and likely faces many of the same forces. It may also make sense to support in the upstream.
We have seen only tangential interest in Travis support. Since I don't like building one-offs I'd probably build it anyway if we build CircleCI support and it doesn't make the problem way harder/different, but I don't currently believe there's significant interest in Travis from Phabricator users. I believe Travis may be more popular with smaller, primarily open source projects.
**TeamCity**
Ref: None
Status: v1 Completed
TeamCity, the CI created by JetBrains, is heavily used by .NET developers as well as, by some accounts, the second most used CI to Jenkins. A Harbormaster extension (build step) has been created as well as a plugin for TeamCity that accepts requests from Harbormaster with diff information, applies that diff, reports back to Harbormaster on test information and a build pass/fail. It's not currently in any public repo yet, hoping to have it public by v2 as it's still being vetted.
**Hudson**
Ref: None
Status: Does anyone use this?
Hudson was forked into Jenkins a while ago when Oracle created some drama. I believe literally no one uses Hudson anymore. However, it still seems to be maintained. I suspect any users that do exist are Very Enterprisey.
**Codeship**
Ref: None
Status: Wait for interest
I think someone said they use this thing once but I can't find any hits on this install. I've seen some ads for it? But no material interest that I'm aware of.
**Changes**
Ref: None
Status: Has Native Support?
This is a build system from Dropbox which comes with native support for Phabricator, at least to some degree. We haven't seen other installs adopting it or requests for upstream support from Dropbox. It also has some level of native support. So basically wait for developments here.