Index: gitlab-ci-multi-runner-13.3.1+dfsg/main.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/main.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/main.go
@@ -16,9 +16,6 @@ import (
 	_ "gitlab.com/gitlab-org/gitlab-runner/commands"
 	_ "gitlab.com/gitlab-org/gitlab-runner/commands/helpers"
 	_ "gitlab.com/gitlab-org/gitlab-runner/executors/custom"
-	_ "gitlab.com/gitlab-org/gitlab-runner/executors/docker"
-	_ "gitlab.com/gitlab-org/gitlab-runner/executors/docker/machine"
-	_ "gitlab.com/gitlab-org/gitlab-runner/executors/kubernetes"
 	_ "gitlab.com/gitlab-org/gitlab-runner/executors/parallels"
 	_ "gitlab.com/gitlab-org/gitlab-runner/executors/shell"
 	_ "gitlab.com/gitlab-org/gitlab-runner/executors/ssh"
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/home_dir.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/helpers/home_dir.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/helpers/home_dir.go
@@ -3,7 +3,7 @@ package helpers
 import (
 	"os"
 
-	"github.com/docker/docker/pkg/homedir"
+	"gitlab.com/gitlab-org/gitlab-runner/helpers/docker/homedir"
 )
 
 func GetCurrentWorkingDirectory() string {
Index: gitlab-ci-multi-runner-13.3.1+dfsg/commands/exec.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/commands/exec.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/commands/exec.go
@@ -14,7 +14,6 @@ import (
 
 	// Force to load all executors, executes init() on them
 	_ "gitlab.com/gitlab-org/gitlab-runner/executors/custom"
-	_ "gitlab.com/gitlab-org/gitlab-runner/executors/docker"
 	_ "gitlab.com/gitlab-org/gitlab-runner/executors/parallels"
 	_ "gitlab.com/gitlab-org/gitlab-runner/executors/shell"
 	_ "gitlab.com/gitlab-org/gitlab-runner/executors/ssh"
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/cli/fix_home.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/helpers/cli/fix_home.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/helpers/cli/fix_home.go
@@ -4,7 +4,7 @@ import (
 	"fmt"
 	"os"
 
-	"github.com/docker/docker/pkg/homedir"
+	"gitlab.com/gitlab-org/gitlab-runner/helpers/docker/homedir"
 	"github.com/urfave/cli"
 )
 
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/docker/client.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/helpers/docker/client.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package docker
-
-import (
-	"context"
-	"io"
-
-	"github.com/docker/docker/api/types"
-	"github.com/docker/docker/api/types/container"
-	"github.com/docker/docker/api/types/network"
-	"github.com/docker/docker/api/types/volume"
-)
-
-type Client interface {
-	ImageInspectWithRaw(ctx context.Context, imageID string) (types.ImageInspect, []byte, error)
-
-	ImagePullBlocking(ctx context.Context, ref string, options types.ImagePullOptions) error
-	ImageImportBlocking(
-		ctx context.Context,
-		source types.ImageImportSource,
-		ref string,
-		options types.ImageImportOptions,
-	) error
-
-	ContainerList(ctx context.Context, options types.ContainerListOptions) ([]types.Container, error)
-	ContainerCreate(
-		ctx context.Context,
-		config *container.Config,
-		hostConfig *container.HostConfig,
-		networkingConfig *network.NetworkingConfig,
-		containerName string) (container.ContainerCreateCreatedBody, error)
-	ContainerStart(ctx context.Context, containerID string, options types.ContainerStartOptions) error
-	ContainerKill(ctx context.Context, containerID, signal string) error
-	ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error)
-	ContainerAttach(
-		ctx context.Context,
-		container string,
-		options types.ContainerAttachOptions,
-	) (types.HijackedResponse, error)
-	ContainerRemove(ctx context.Context, containerID string, options types.ContainerRemoveOptions) error
-	ContainerWait(
-		ctx context.Context,
-		containerID string,
-		condition container.WaitCondition,
-	) (<-chan container.ContainerWaitOKBody, <-chan error)
-	ContainerLogs(ctx context.Context, container string, options types.ContainerLogsOptions) (io.ReadCloser, error)
-	ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error)
-	ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error)
-
-	NetworkCreate(
-		ctx context.Context,
-		networkName string,
-		options types.NetworkCreate,
-	) (types.NetworkCreateResponse, error)
-	NetworkRemove(ctx context.Context, networkID string) error
-	NetworkDisconnect(ctx context.Context, networkID, containerID string, force bool) error
-	NetworkList(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error)
-	NetworkInspect(ctx context.Context, networkID string) (types.NetworkResource, error)
-
-	VolumeCreate(ctx context.Context, options volume.VolumeCreateBody) (types.Volume, error)
-	VolumeRemove(ctx context.Context, volumeID string, force bool) error
-
-	Info(ctx context.Context) (types.Info, error)
-
-	Close() error
-}
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/docker/official_docker_client.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/helpers/docker/official_docker_client.go
+++ /dev/null
@@ -1,358 +0,0 @@
-package docker
-
-import (
-	"context"
-	"errors"
-	"fmt"
-	"io"
-	"io/ioutil"
-	"net/http"
-	"path/filepath"
-	"runtime"
-	"time"
-
-	"github.com/docker/docker/api/types"
-	"github.com/docker/docker/api/types/container"
-	"github.com/docker/docker/api/types/network"
-	"github.com/docker/docker/api/types/volume"
-	"github.com/docker/docker/client"
-	"github.com/docker/go-connections/tlsconfig"
-	"github.com/sirupsen/logrus"
-)
-
-// The default API version used to create a new docker client.
-const DefaultAPIVersion = "1.25"
-
-// ErrRedirectNotAllowed is returned when we get a 3xx request from the Docker
-// client to prevent any redirections to malicious docker clients.
-var ErrRedirectNotAllowed = errors.New("redirects disallowed")
-
-// IsErrNotFound checks whether a returned error is due to an image or container
-// not being found. Proxies the docker implementation.
-func IsErrNotFound(err error) bool {
-	unwrapped := errors.Unwrap(err)
-	if unwrapped != nil {
-		err = unwrapped
-	}
-	return client.IsErrNotFound(err)
-}
-
-// type officialDockerClient wraps a "github.com/docker/docker/client".Client,
-// giving it the methods it needs to satisfy the docker.Client interface
-type officialDockerClient struct {
-	client *client.Client
-
-	// Close() means "close idle connections held by engine-api's transport"
-	Transport *http.Transport
-}
-
-func newOfficialDockerClient(c Credentials, apiVersion string) (*officialDockerClient, error) {
-	transport, err := newHTTPTransport(c)
-	if err != nil {
-		logrus.Errorln("Error creating TLS Docker client:", err)
-		return nil, err
-	}
-	httpClient := &http.Client{
-		Transport: transport,
-		CheckRedirect: func(_ *http.Request, _ []*http.Request) error {
-			return ErrRedirectNotAllowed
-		},
-	}
-
-	dockerClient, err := client.NewClient(c.Host, apiVersion, httpClient, nil)
-	if err != nil {
-		transport.CloseIdleConnections()
-		logrus.Errorln("Error creating Docker client:", err)
-		return nil, err
-	}
-
-	return &officialDockerClient{
-		client:    dockerClient,
-		Transport: transport,
-	}, nil
-}
-
-func wrapError(method string, err error, started time.Time) error {
-	if err == nil {
-		return nil
-	}
-
-	seconds := int(time.Since(started).Seconds())
-
-	if _, file, line, ok := runtime.Caller(2); ok {
-		return fmt.Errorf("%w (%s:%d:%ds)", err, filepath.Base(file), line, seconds)
-	}
-
-	return fmt.Errorf("%w (%s:%ds)", err, method, seconds)
-}
-
-func (c *officialDockerClient) ImageInspectWithRaw(
-	ctx context.Context,
-	imageID string,
-) (types.ImageInspect, []byte, error) {
-	started := time.Now()
-	image, data, err := c.client.ImageInspectWithRaw(ctx, imageID)
-	return image, data, wrapError("ImageInspectWithRaw", err, started)
-}
-
-func (c *officialDockerClient) ContainerList(
-	ctx context.Context,
-	options types.ContainerListOptions,
-) ([]types.Container, error) {
-	started := time.Now()
-	containers, err := c.client.ContainerList(ctx, options)
-	return containers, wrapError("ContainerList", err, started)
-}
-
-func (c *officialDockerClient) ContainerCreate(
-	ctx context.Context,
-	config *container.Config,
-	hostConfig *container.HostConfig,
-	networkingConfig *network.NetworkingConfig,
-	containerName string,
-) (container.ContainerCreateCreatedBody, error) {
-	started := time.Now()
-	container, err := c.client.ContainerCreate(ctx, config, hostConfig, networkingConfig, nil, containerName)
-	return container, wrapError("ContainerCreate", err, started)
-}
-
-func (c *officialDockerClient) ContainerStart(
-	ctx context.Context,
-	containerID string,
-	options types.ContainerStartOptions,
-) error {
-	started := time.Now()
-	err := c.client.ContainerStart(ctx, containerID, options)
-	return wrapError("ContainerCreate", err, started)
-}
-
-func (c *officialDockerClient) ContainerKill(ctx context.Context, containerID string, signal string) error {
-	started := time.Now()
-	err := c.client.ContainerKill(ctx, containerID, signal)
-	return wrapError("ContainerKill", err, started)
-}
-
-func (c *officialDockerClient) ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error) {
-	started := time.Now()
-	data, err := c.client.ContainerInspect(ctx, containerID)
-	return data, wrapError("ContainerInspect", err, started)
-}
-
-func (c *officialDockerClient) ContainerAttach(
-	ctx context.Context,
-	container string,
-	options types.ContainerAttachOptions,
-) (types.HijackedResponse, error) {
-	started := time.Now()
-	response, err := c.client.ContainerAttach(ctx, container, options)
-	return response, wrapError("ContainerAttach", err, started)
-}
-
-func (c *officialDockerClient) ContainerRemove(
-	ctx context.Context,
-	containerID string,
-	options types.ContainerRemoveOptions,
-) error {
-	started := time.Now()
-	err := c.client.ContainerRemove(ctx, containerID, options)
-	return wrapError("ContainerRemove", err, started)
-}
-
-func (c *officialDockerClient) ContainerWait(
-	ctx context.Context,
-	containerID string,
-	condition container.WaitCondition,
-) (<-chan container.ContainerWaitOKBody, <-chan error) {
-	return c.client.ContainerWait(ctx, containerID, condition)
-}
-
-func (c *officialDockerClient) ContainerLogs(
-	ctx context.Context,
-	container string,
-	options types.ContainerLogsOptions,
-) (io.ReadCloser, error) {
-	started := time.Now()
-	rc, err := c.client.ContainerLogs(ctx, container, options)
-	return rc, wrapError("ContainerLogs", err, started)
-}
-
-func (c *officialDockerClient) ContainerExecCreate(
-	ctx context.Context,
-	container string,
-	config types.ExecConfig,
-) (types.IDResponse, error) {
-	started := time.Now()
-	resp, err := c.client.ContainerExecCreate(ctx, container, config)
-	return resp, wrapError("ContainerExecCreate", err, started)
-}
-
-func (c *officialDockerClient) ContainerExecAttach(
-	ctx context.Context,
-	execID string,
-	config types.ExecStartCheck,
-) (types.HijackedResponse, error) {
-	started := time.Now()
-	resp, err := c.client.ContainerExecAttach(ctx, execID, config)
-	return resp, wrapError("ContainerExecAttach", err, started)
-}
-
-func (c *officialDockerClient) NetworkCreate(
-	ctx context.Context,
-	networkName string,
-	options types.NetworkCreate,
-) (types.NetworkCreateResponse, error) {
-	started := time.Now()
-	response, err := c.client.NetworkCreate(ctx, networkName, options)
-	return response, wrapError("NetworkCreate", err, started)
-}
-
-func (c *officialDockerClient) NetworkRemove(ctx context.Context, networkID string) error {
-	started := time.Now()
-	err := c.client.NetworkRemove(ctx, networkID)
-	return wrapError("NetworkRemove", err, started)
-}
-
-func (c *officialDockerClient) NetworkDisconnect(ctx context.Context, networkID, containerID string, force bool) error {
-	started := time.Now()
-	err := c.client.NetworkDisconnect(ctx, networkID, containerID, force)
-	return wrapError("NetworkDisconnect", err, started)
-}
-
-func (c *officialDockerClient) NetworkList(
-	ctx context.Context,
-	options types.NetworkListOptions,
-) ([]types.NetworkResource, error) {
-	started := time.Now()
-	networks, err := c.client.NetworkList(ctx, options)
-	return networks, wrapError("NetworkList", err, started)
-}
-
-func (c *officialDockerClient) NetworkInspect(ctx context.Context, networkID string) (types.NetworkResource, error) {
-	started := time.Now()
-	resource, err := c.client.NetworkInspect(ctx, networkID, types.NetworkInspectOptions{})
-	return resource, wrapError("NetworkInspect", err, started)
-}
-
-func (c *officialDockerClient) VolumeCreate(
-	ctx context.Context,
-	options volume.VolumeCreateBody,
-) (types.Volume, error) {
-	started := time.Now()
-	v, err := c.client.VolumeCreate(ctx, options)
-	return v, wrapError("VolumeCreate", err, started)
-}
-
-func (c *officialDockerClient) VolumeRemove(ctx context.Context, volumeID string, force bool) error {
-	started := time.Now()
-	err := c.client.VolumeRemove(ctx, volumeID, force)
-	return wrapError("VolumeRemove", err, started)
-}
-
-func (c *officialDockerClient) Info(ctx context.Context) (types.Info, error) {
-	started := time.Now()
-	info, err := c.client.Info(ctx)
-	return info, wrapError("Info", err, started)
-}
-
-func (c *officialDockerClient) ImageImportBlocking(
-	ctx context.Context,
-	source types.ImageImportSource,
-	ref string,
-	options types.ImageImportOptions,
-) error {
-	started := time.Now()
-	readCloser, err := c.client.ImageImport(ctx, source, ref, options)
-	if err != nil {
-		return wrapError("ImageImport", err, started)
-	}
-	defer func() { _ = readCloser.Close() }()
-
-	// TODO: respect the context here
-	if _, err := io.Copy(ioutil.Discard, readCloser); err != nil {
-		return wrapError("io.Copy: Failed to import image", err, started)
-	}
-
-	return nil
-}
-
-func (c *officialDockerClient) ImagePullBlocking(
-	ctx context.Context,
-	ref string,
-	options types.ImagePullOptions,
-) error {
-	started := time.Now()
-	readCloser, err := c.client.ImagePull(ctx, ref, options)
-	if err != nil {
-		return wrapError("ImagePull", err, started)
-	}
-	defer func() { _ = readCloser.Close() }()
-
-	// TODO: respect the context here
-	if _, err := io.Copy(ioutil.Discard, readCloser); err != nil {
-		return wrapError("io.Copy: Failed to pull image", err, started)
-	}
-
-	return nil
-}
-
-func (c *officialDockerClient) Close() error {
-	c.Transport.CloseIdleConnections()
-	return nil
-}
-
-// New attempts to create a new Docker client of the specified version. If the
-// specified version is empty, it will use the default version.
-//
-// If no host is given in the Credentials, it will attempt to look up
-// details from the environment. If that fails, it will use the default
-// connection details for your platform.
-func New(c Credentials, apiVersion string) (Client, error) {
-	if c.Host == "" {
-		c = credentialsFromEnv()
-	}
-
-	// Use the default if nothing is specified by caller *or* environment
-	if c.Host == "" {
-		c.Host = client.DefaultDockerHost
-	}
-
-	if apiVersion == "" {
-		apiVersion = DefaultAPIVersion
-	}
-
-	return newOfficialDockerClient(c, apiVersion)
-}
-
-func newHTTPTransport(c Credentials) (*http.Transport, error) {
-	url, err := client.ParseHostURL(c.Host)
-	if err != nil {
-		return nil, err
-	}
-
-	tr := &http.Transport{}
-
-	if err := configureTransport(tr, url.Scheme, url.Host); err != nil {
-		return nil, err
-	}
-
-	// FIXME: is a TLS connection with InsecureSkipVerify == true ever wanted?
-	if c.TLSVerify {
-		options := tlsconfig.Options{}
-
-		if c.CertPath != "" {
-			options.CAFile = filepath.Join(c.CertPath, "ca.pem")
-			options.CertFile = filepath.Join(c.CertPath, "cert.pem")
-			options.KeyFile = filepath.Join(c.CertPath, "key.pem")
-		}
-
-		tlsConfig, err := tlsconfig.Client(options)
-		if err != nil {
-			tr.CloseIdleConnections()
-			return nil, err
-		}
-
-		tr.TLSClientConfig = tlsConfig
-	}
-
-	return tr, nil
-}
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/docker/mock_Client.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/helpers/docker/mock_Client.go
+++ /dev/null
@@ -1,463 +0,0 @@
-// Code generated by mockery v1.1.0. DO NOT EDIT.
-
-package docker
-
-import (
-	context "context"
-
-	container "github.com/docker/docker/api/types/container"
-
-	io "io"
-
-	mock "github.com/stretchr/testify/mock"
-
-	network "github.com/docker/docker/api/types/network"
-
-	types "github.com/docker/docker/api/types"
-
-	volume "github.com/docker/docker/api/types/volume"
-)
-
-// MockClient is an autogenerated mock type for the Client type
-type MockClient struct {
-	mock.Mock
-}
-
-// Close provides a mock function with given fields:
-func (_m *MockClient) Close() error {
-	ret := _m.Called()
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func() error); ok {
-		r0 = rf()
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
-
-// ContainerAttach provides a mock function with given fields: ctx, _a1, options
-func (_m *MockClient) ContainerAttach(ctx context.Context, _a1 string, options types.ContainerAttachOptions) (types.HijackedResponse, error) {
-	ret := _m.Called(ctx, _a1, options)
-
-	var r0 types.HijackedResponse
-	if rf, ok := ret.Get(0).(func(context.Context, string, types.ContainerAttachOptions) types.HijackedResponse); ok {
-		r0 = rf(ctx, _a1, options)
-	} else {
-		r0 = ret.Get(0).(types.HijackedResponse)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, string, types.ContainerAttachOptions) error); ok {
-		r1 = rf(ctx, _a1, options)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// ContainerCreate provides a mock function with given fields: ctx, config, hostConfig, networkingConfig, containerName
-func (_m *MockClient) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, containerName string) (container.ContainerCreateCreatedBody, error) {
-	ret := _m.Called(ctx, config, hostConfig, networkingConfig, containerName)
-
-	var r0 container.ContainerCreateCreatedBody
-	if rf, ok := ret.Get(0).(func(context.Context, *container.Config, *container.HostConfig, *network.NetworkingConfig, string) container.ContainerCreateCreatedBody); ok {
-		r0 = rf(ctx, config, hostConfig, networkingConfig, containerName)
-	} else {
-		r0 = ret.Get(0).(container.ContainerCreateCreatedBody)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, *container.Config, *container.HostConfig, *network.NetworkingConfig, string) error); ok {
-		r1 = rf(ctx, config, hostConfig, networkingConfig, containerName)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// ContainerExecAttach provides a mock function with given fields: ctx, execID, config
-func (_m *MockClient) ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error) {
-	ret := _m.Called(ctx, execID, config)
-
-	var r0 types.HijackedResponse
-	if rf, ok := ret.Get(0).(func(context.Context, string, types.ExecStartCheck) types.HijackedResponse); ok {
-		r0 = rf(ctx, execID, config)
-	} else {
-		r0 = ret.Get(0).(types.HijackedResponse)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, string, types.ExecStartCheck) error); ok {
-		r1 = rf(ctx, execID, config)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// ContainerExecCreate provides a mock function with given fields: ctx, _a1, config
-func (_m *MockClient) ContainerExecCreate(ctx context.Context, _a1 string, config types.ExecConfig) (types.IDResponse, error) {
-	ret := _m.Called(ctx, _a1, config)
-
-	var r0 types.IDResponse
-	if rf, ok := ret.Get(0).(func(context.Context, string, types.ExecConfig) types.IDResponse); ok {
-		r0 = rf(ctx, _a1, config)
-	} else {
-		r0 = ret.Get(0).(types.IDResponse)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, string, types.ExecConfig) error); ok {
-		r1 = rf(ctx, _a1, config)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// ContainerInspect provides a mock function with given fields: ctx, containerID
-func (_m *MockClient) ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error) {
-	ret := _m.Called(ctx, containerID)
-
-	var r0 types.ContainerJSON
-	if rf, ok := ret.Get(0).(func(context.Context, string) types.ContainerJSON); ok {
-		r0 = rf(ctx, containerID)
-	} else {
-		r0 = ret.Get(0).(types.ContainerJSON)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, string) error); ok {
-		r1 = rf(ctx, containerID)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// ContainerKill provides a mock function with given fields: ctx, containerID, signal
-func (_m *MockClient) ContainerKill(ctx context.Context, containerID string, signal string) error {
-	ret := _m.Called(ctx, containerID, signal)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok {
-		r0 = rf(ctx, containerID, signal)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
-
-// ContainerList provides a mock function with given fields: ctx, options
-func (_m *MockClient) ContainerList(ctx context.Context, options types.ContainerListOptions) ([]types.Container, error) {
-	ret := _m.Called(ctx, options)
-
-	var r0 []types.Container
-	if rf, ok := ret.Get(0).(func(context.Context, types.ContainerListOptions) []types.Container); ok {
-		r0 = rf(ctx, options)
-	} else {
-		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]types.Container)
-		}
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, types.ContainerListOptions) error); ok {
-		r1 = rf(ctx, options)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// ContainerLogs provides a mock function with given fields: ctx, _a1, options
-func (_m *MockClient) ContainerLogs(ctx context.Context, _a1 string, options types.ContainerLogsOptions) (io.ReadCloser, error) {
-	ret := _m.Called(ctx, _a1, options)
-
-	var r0 io.ReadCloser
-	if rf, ok := ret.Get(0).(func(context.Context, string, types.ContainerLogsOptions) io.ReadCloser); ok {
-		r0 = rf(ctx, _a1, options)
-	} else {
-		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(io.ReadCloser)
-		}
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, string, types.ContainerLogsOptions) error); ok {
-		r1 = rf(ctx, _a1, options)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// ContainerRemove provides a mock function with given fields: ctx, containerID, options
-func (_m *MockClient) ContainerRemove(ctx context.Context, containerID string, options types.ContainerRemoveOptions) error {
-	ret := _m.Called(ctx, containerID, options)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string, types.ContainerRemoveOptions) error); ok {
-		r0 = rf(ctx, containerID, options)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
-
-// ContainerStart provides a mock function with given fields: ctx, containerID, options
-func (_m *MockClient) ContainerStart(ctx context.Context, containerID string, options types.ContainerStartOptions) error {
-	ret := _m.Called(ctx, containerID, options)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string, types.ContainerStartOptions) error); ok {
-		r0 = rf(ctx, containerID, options)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
-
-// ContainerWait provides a mock function with given fields: ctx, containerID, condition
-func (_m *MockClient) ContainerWait(ctx context.Context, containerID string, condition container.WaitCondition) (<-chan container.ContainerWaitOKBody, <-chan error) {
-	ret := _m.Called(ctx, containerID, condition)
-
-	var r0 <-chan container.ContainerWaitOKBody
-	if rf, ok := ret.Get(0).(func(context.Context, string, container.WaitCondition) <-chan container.ContainerWaitOKBody); ok {
-		r0 = rf(ctx, containerID, condition)
-	} else {
-		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(<-chan container.ContainerWaitOKBody)
-		}
-	}
-
-	var r1 <-chan error
-	if rf, ok := ret.Get(1).(func(context.Context, string, container.WaitCondition) <-chan error); ok {
-		r1 = rf(ctx, containerID, condition)
-	} else {
-		if ret.Get(1) != nil {
-			r1 = ret.Get(1).(<-chan error)
-		}
-	}
-
-	return r0, r1
-}
-
-// ImageImportBlocking provides a mock function with given fields: ctx, source, ref, options
-func (_m *MockClient) ImageImportBlocking(ctx context.Context, source types.ImageImportSource, ref string, options types.ImageImportOptions) error {
-	ret := _m.Called(ctx, source, ref, options)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, types.ImageImportSource, string, types.ImageImportOptions) error); ok {
-		r0 = rf(ctx, source, ref, options)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
-
-// ImageInspectWithRaw provides a mock function with given fields: ctx, imageID
-func (_m *MockClient) ImageInspectWithRaw(ctx context.Context, imageID string) (types.ImageInspect, []byte, error) {
-	ret := _m.Called(ctx, imageID)
-
-	var r0 types.ImageInspect
-	if rf, ok := ret.Get(0).(func(context.Context, string) types.ImageInspect); ok {
-		r0 = rf(ctx, imageID)
-	} else {
-		r0 = ret.Get(0).(types.ImageInspect)
-	}
-
-	var r1 []byte
-	if rf, ok := ret.Get(1).(func(context.Context, string) []byte); ok {
-		r1 = rf(ctx, imageID)
-	} else {
-		if ret.Get(1) != nil {
-			r1 = ret.Get(1).([]byte)
-		}
-	}
-
-	var r2 error
-	if rf, ok := ret.Get(2).(func(context.Context, string) error); ok {
-		r2 = rf(ctx, imageID)
-	} else {
-		r2 = ret.Error(2)
-	}
-
-	return r0, r1, r2
-}
-
-// ImagePullBlocking provides a mock function with given fields: ctx, ref, options
-func (_m *MockClient) ImagePullBlocking(ctx context.Context, ref string, options types.ImagePullOptions) error {
-	ret := _m.Called(ctx, ref, options)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string, types.ImagePullOptions) error); ok {
-		r0 = rf(ctx, ref, options)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
-
-// Info provides a mock function with given fields: ctx
-func (_m *MockClient) Info(ctx context.Context) (types.Info, error) {
-	ret := _m.Called(ctx)
-
-	var r0 types.Info
-	if rf, ok := ret.Get(0).(func(context.Context) types.Info); ok {
-		r0 = rf(ctx)
-	} else {
-		r0 = ret.Get(0).(types.Info)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context) error); ok {
-		r1 = rf(ctx)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// NetworkCreate provides a mock function with given fields: ctx, networkName, options
-func (_m *MockClient) NetworkCreate(ctx context.Context, networkName string, options types.NetworkCreate) (types.NetworkCreateResponse, error) {
-	ret := _m.Called(ctx, networkName, options)
-
-	var r0 types.NetworkCreateResponse
-	if rf, ok := ret.Get(0).(func(context.Context, string, types.NetworkCreate) types.NetworkCreateResponse); ok {
-		r0 = rf(ctx, networkName, options)
-	} else {
-		r0 = ret.Get(0).(types.NetworkCreateResponse)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, string, types.NetworkCreate) error); ok {
-		r1 = rf(ctx, networkName, options)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// NetworkDisconnect provides a mock function with given fields: ctx, networkID, containerID, force
-func (_m *MockClient) NetworkDisconnect(ctx context.Context, networkID string, containerID string, force bool) error {
-	ret := _m.Called(ctx, networkID, containerID, force)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string, string, bool) error); ok {
-		r0 = rf(ctx, networkID, containerID, force)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
-
-// NetworkInspect provides a mock function with given fields: ctx, networkID
-func (_m *MockClient) NetworkInspect(ctx context.Context, networkID string) (types.NetworkResource, error) {
-	ret := _m.Called(ctx, networkID)
-
-	var r0 types.NetworkResource
-	if rf, ok := ret.Get(0).(func(context.Context, string) types.NetworkResource); ok {
-		r0 = rf(ctx, networkID)
-	} else {
-		r0 = ret.Get(0).(types.NetworkResource)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, string) error); ok {
-		r1 = rf(ctx, networkID)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// NetworkList provides a mock function with given fields: ctx, options
-func (_m *MockClient) NetworkList(ctx context.Context, options types.NetworkListOptions) ([]types.NetworkResource, error) {
-	ret := _m.Called(ctx, options)
-
-	var r0 []types.NetworkResource
-	if rf, ok := ret.Get(0).(func(context.Context, types.NetworkListOptions) []types.NetworkResource); ok {
-		r0 = rf(ctx, options)
-	} else {
-		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]types.NetworkResource)
-		}
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, types.NetworkListOptions) error); ok {
-		r1 = rf(ctx, options)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// NetworkRemove provides a mock function with given fields: ctx, networkID
-func (_m *MockClient) NetworkRemove(ctx context.Context, networkID string) error {
-	ret := _m.Called(ctx, networkID)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string) error); ok {
-		r0 = rf(ctx, networkID)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
-
-// VolumeCreate provides a mock function with given fields: ctx, options
-func (_m *MockClient) VolumeCreate(ctx context.Context, options volume.VolumeCreateBody) (types.Volume, error) {
-	ret := _m.Called(ctx, options)
-
-	var r0 types.Volume
-	if rf, ok := ret.Get(0).(func(context.Context, volume.VolumeCreateBody) types.Volume); ok {
-		r0 = rf(ctx, options)
-	} else {
-		r0 = ret.Get(0).(types.Volume)
-	}
-
-	var r1 error
-	if rf, ok := ret.Get(1).(func(context.Context, volume.VolumeCreateBody) error); ok {
-		r1 = rf(ctx, options)
-	} else {
-		r1 = ret.Error(1)
-	}
-
-	return r0, r1
-}
-
-// VolumeRemove provides a mock function with given fields: ctx, volumeID, force
-func (_m *MockClient) VolumeRemove(ctx context.Context, volumeID string, force bool) error {
-	ret := _m.Called(ctx, volumeID, force)
-
-	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, string, bool) error); ok {
-		r0 = rf(ctx, volumeID, force)
-	} else {
-		r0 = ret.Error(0)
-	}
-
-	return r0
-}
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/archives/zip_extra_unix.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/helpers/archives/zip_extra_unix.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/helpers/archives/zip_extra_unix.go
@@ -1,4 +1,4 @@
-// +build linux darwin freebsd openbsd
+// +build linux darwin freebsd hurd openbsd
 
 package archives
 
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/process/group_unix.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/helpers/process/group_unix.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/helpers/process/group_unix.go
@@ -1,4 +1,4 @@
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd hurd linux netbsd openbsd
 
 package process
 
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/process/killer_unix.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/helpers/process/killer_unix.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/helpers/process/killer_unix.go
@@ -1,4 +1,4 @@
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd hurd linux netbsd openbsd
 
 package process
 
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/docker/homedir/homedir.go
===================================================================
--- /dev/null
+++ gitlab-ci-multi-runner-13.3.1+dfsg/helpers/docker/homedir/homedir.go
@@ -0,0 +1,39 @@
+//go:build !windows
+// +build !windows
+
+package homedir // import "gitlab.com/gitlab-org/gitlab-runner/helpers/docker/homedir"
+
+import (
+	"os"
+	"os/user"
+)
+
+// Key returns the env var name for the user's home dir based on
+// the platform being run on
+func Key() string {
+	return "HOME"
+}
+
+// Get returns the home directory of the current user with the help of
+// environment variables depending on the target operating system.
+// Returned path should be used with "path/filepath" to form new paths.
+//
+// If linking statically with cgo enabled against glibc, ensure the
+// osusergo build tag is used.
+//
+// If needing to do nss lookups, do not disable cgo or set osusergo.
+func Get() string {
+	home := os.Getenv(Key())
+	if home == "" {
+		if u, err := user.Current(); err == nil {
+			return u.HomeDir
+		}
+	}
+	return home
+}
+
+// GetShortcutString returns the string that is shortcut to user's home directory
+// in the native shell of the platform running on.
+func GetShortcutString() string {
+	return "~"
+}
Index: gitlab-ci-multi-runner-13.3.1+dfsg/log/configuration.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/log/configuration.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/log/configuration.go
@@ -138,7 +138,7 @@ func (l *Config) enableGoroutinesDump()
 
 	l.goroutinesDumpStopCh = make(chan bool)
 
-	watchForGoroutinesDump(l.logger, l.goroutinesDumpStopCh)
+	// watchForGoroutinesDump(l.logger, l.goroutinesDumpStopCh)
 }
 
 func (l *Config) disableGoroutinesDump() {
Index: gitlab-ci-multi-runner-13.3.1+dfsg/helpers/process_group_hurd.go
===================================================================
--- /dev/null
+++ gitlab-ci-multi-runner-13.3.1+dfsg/helpers/process_group_hurd.go
@@ -0,0 +1,38 @@
+// +build hurd
+
+package helpers
+
+import (
+	"os/exec"
+)
+
+/*
+#include <signal.h>
+*/
+import "C"
+
+// TODO: Remove in 14.0 https://gitlab.com/gitlab-org/gitlab-runner/issues/6413
+func SetProcessGroup(cmd *exec.Cmd) {
+	// Create process group
+	//cmd.SysProcAttr = &syscall.SysProcAttr{
+	//	Setpgid: true,
+	//}
+}
+
+// TODO: Remove in 14.0 https://gitlab.com/gitlab-org/gitlab-runner/issues/6413
+func KillProcessGroup(cmd *exec.Cmd) {
+	if cmd == nil {
+		return
+	}
+
+	process := cmd.Process
+	if process != nil {
+		if process.Pid > 0 {
+			_ = C.kill(C.int(-process.Pid), C.SIGKILL)
+		} else {
+			// doing normal kill
+			_ = process.Kill()
+		}
+	}
+}
+
Index: gitlab-ci-multi-runner-13.3.1+dfsg/commands/config_unix.go
===================================================================
--- gitlab-ci-multi-runner-13.3.1+dfsg.orig/commands/config_unix.go
+++ gitlab-ci-multi-runner-13.3.1+dfsg/commands/config_unix.go
@@ -1,4 +1,4 @@
-// +build linux darwin freebsd openbsd
+// +build linux darwin freebsd hurd openbsd
 
 package commands
 
