Skip to content

WIP: Only regenerate Go and Ruby libraries at release

Nick Thomas requested to merge (removed):update-process into master

Getting changes merged to gitaly-proto contains an unfortunate synchronization point: since we include the automatically-generated Go and Ruby library changes in each MR, and since they don't stack neatly on top of one another, every time one MR is merged to gitaly-proto master, every other MR has to be rebased against master and make generate re-run. This results in painful back-and-forth between a maintainer and several submitters.

As an alternative, we could stop including the automatically-generated files in each MR, and instead only regenerate them each gitaly-proto release. The cost of this to the maintainer is free, since the process is automated, but the cost to submitters is greatly reduced as MRs now cleanly stack (barring genuine merge conflicts in the .proto files, of course).

We create a new gitaly-proto release for almost every MR anyway, so we'll still be regenerating the client libraries very often.

If someone wants to develop a new RPC and its implementation in parallel, they have to remember to run make generate and commit the results for it to work, as they do today. A new cost arises in that they must remember to remove the autogenerated file changes before their gitaly-proto MR can be merged, but this doesn't seem like a large drawback to me.

cc @zj @jacobvosmaer-gitlab @ahmadsherif @andrewn for further discussion. This MR is a first pass at actually implementing the change, to try to get something concrete down.

Slack thread at https://gitlab.slack.com/archives/C3ER3TQBT/p1543322161909200

Merge request reports