[GHC] #15937: CI strategy for Gitlab

GHC ghc-devs at haskell.org
Thu Nov 22 19:46:07 UTC 2018


#15937: CI strategy for Gitlab
-------------------------------------+-------------------------------------
           Reporter:  alpmestan      |             Owner:  bgamari
               Type:  task           |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Continuous     |           Version:
  Integration                        |
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 I have been working on the configuration of the staging gitlab instance
 recently. We managed to hook it up with both Circle CI and Appveyor, for
 the `ghc/ghc` (''username/repo'') project on our instance. It all works.

 Things get tricky when it comes to running CI jobs for forks, though.
 Indeed, our Circle CI script relies on some CI env vars being defined in
 the CI settings of the project. Those are "secrets" (e.g circle ci API
 token) that we do not want to make public and encourage everyone to use,
 which means that CI simply won't work for forks, out of the box, with
 things as they stand. Ben and I have discussed this a bit and we see 3
 different ways to go about this.

 1) Forget about the fork-based workflow. We might consider having a
 reference repo where things get merged and a "sandbox" repo where people
 could push their branches and get some CI running. They could then create
 MRs against the "real" repo to get patches merged. This one way or another
 requires adding new contributors manually to the "sandbox repo". It is
 quite likely that they could also get "our secrets" by simply tweaking
 `.gitlab-ci.yml` to print the right env vars, in their branch.

 2) We go for a "full gitlab CI" solution, which might require less work
 than it initially seems as it could use the same docker images and run
 roughly the same commands as Circle CI. That requires computational
 resources though, and makes the transition less smooth. We can certainly
 consider doing some ''additional'' CI with this, if we make the move
 definitive and end up refining our CI needs, but we definitely don't want
 to get rid of Circle CI/Appveyor now anyway.

 3) We implement a "mediator" service that would have all our secrets and
 would get hit by gitlab CI jobs to launch builds and report the results &
 artifacts. It could therefore behave the same regardless of the
 user/repo/branch that triggers it without exposing anything. This could be
 put together somewhat quickly but requires enough work that we may not be
 able to set that up in time for the initial move. It is however the best
 solution from the user experience (ghc contributor) point of view. People
 with developer access to the main repo could push there, or in their
 forks. Others would only push to their forks and create MRs. CI would work
 the same in all those cases.

 In my opinion, going with 1) initially and then 3) as soon as possible is
 the best plan in the long term. It would make for a great contributor
 experience while requiring very little maintenance. This could also very
 easily live side by side with some "real" gitlab CI, that doesn't offload
 the work to an external service.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15937>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list