GitLab Workhorse

GitLab Workhorse is a smart reverse proxy for GitLab. It handles “large” HTTP requests such as file downloads, file uploads, Git push/pull and Git archive downloads.

Workhorse itself is not a feature, but there are several features in GitLab that would not work efficiently without Workhorse.

The canonical source for Workhorse is gitlab-org/gitlab/workhorse. Prior to epic #4826, it was gitlab-org/gitlab-workhorse, but that repository is no longer used for development.

Install Workhorse

To install GitLab Workhorse you need Go 1.18 or newer and GNU Make.

To install into /usr/local/bin run make install.

make install

To install into /foo/bin set the PREFIX variable.

make install PREFIX=/foo

On some operating systems, such as FreeBSD, you may have to use gmake instead of make.

NOTE: Some features depends on build tags, make sure to check Workhorse configuration to enable them.

Run time dependencies

Workhorse uses ExifTool for removing EXIF data (which may contain sensitive information) from uploaded images. If you installed GitLab:

  • Using the Omnibus package, you’re all set. NOTE that if you are using CentOS Minimal, you may need to install perl package: yum install perl
  • From source, make sure exiftool is installed:

    # Debian/Ubuntu
    sudo apt-get install libimage-exiftool-perl
    
    # RHEL/CentOS
    sudo yum install perl-Image-ExifTool
    

Testing your code

Run the tests with:

make clean test

Each feature in GitLab Workhorse should have an integration test that verifies that the feature ‘kicks in’ on the right requests and leaves other requests unaffected. It is better to also have package-level tests for specific behavior but the high-level integration tests should have the first priority during development.

It is OK if a feature is only covered by integration tests.