Skip to content

spec: Convert Gitaly setup to use bundled Git binaries

Patrick Steinhardt requested to merge pks-gitaly-with-bundled-git into master

What does this MR do and why?

Up to now, Gitaly has been using an external Git distribution to serve all Git requests. This has somewhat changed with the introduction of the make git target, which moved responsibility of providing a compatible Git distribution into Gitaly. While this was a step into the right direction, it still didn't give Gitaly full control over which Git binaries exist and where these are located. This is proving to be problematic in some contexts: we cannot switch between multiple Git versions via feature flags, rollouts of new Git versions will overwrite the old installation while Gitaly may still be running, and in general we have no specific knowledge about which Git version we're currently running with except for the version string.

To fix this, Gitaly has introduced a new distribution mode: instead of pointing Gitaly's configuration at a specific Git distribution, Gitaly can now run with in "bundled" mode. Like this, Gitaly only requires two binaries gitaly-git and gitaly-git-remote-http which are installed into the typicaly binary directory where all the other Gitaly-specific binaries are installed into. Gitaly will then bootstrap a full Git execution environment from these two binaries which is sufficient to serve all Git requests in Gitaly.

With this in place, Gitaly has much tighter control over which Git version is installed into what place. As a result, we can eventually build on top of this and easily install multiple Git versions, use feature flags and avoid issues like overwrites of the Git distribution while an old Gitaly version is still running.

While the old configuration of pointing Gitaly at a specific Git installation will not go away, the recommended default will at some point become to always use the bundled Git mode. As a first test balloon, this commit switches over the Gitaly setup helper for our Ruby specs to use this bundled Git mode.

How to set up and validate locally

All tests interacting with Gitaly will automatically use the new bundled Git mode.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Merge request reports

Loading