Migrate gitlab-shell git push support to Golang
Follow up from #74 (closed)
When someone runs git push git@gitlab.com:foo/bar.git
, gitlab-shell checks permissions against the internal API, then spawns a separate (golang!) binary to service the git push via gitaly if the user is authorized.
The implementation for this is currently in Ruby; we'd like to add a parallel Golang implementation that we can switch to using feature flags. Once the implementation has been enabled for a release without problems, we can remove the Ruby implementation.
To an extent, this issue relies on the work in #158 (closed), but the two can be worked on in parallel.
As part of this issue, we should avoid spawning the separate golang binary, in favour of talking to gitaly in the same process as the one doing the internal API checks. The less process management we have to do, the better.
Note that in the Geo case, a git push
to the secondary might be (from the end user's point of view) transparently proxied to the Geo primary. This involves some cooperation from gitlab-shell, using "custom actions", but I'm not 100% on what they look like in gitlab-shell at present.