---
sidebar_position: 80
description: How to configure a Gitlab retriever.
---
import { integrations } from "@site/data/integrations";
import {Mandatory, NotMandatory} from "@site/src/components/checks/checks";
export const retrieverName = 'GitLab';
export const info = integrations.retrievers.find((r) => r.name === retrieverName)

# GitLab

## Overview
{info.longDescription ?? info.description}

:::tip
GitLab has rate limits, be sure to correctly set your `PollingInterval` to avoid reaching the limit.
:::

## Configure the relay proxy

To configure your relay proxy to use the {retrieverName} retriever, you need to add the following
configuration to your relay proxy configuration file:

```yaml title="goff-proxy.yaml"
# ...
retrievers:
  - kind: gitlab
    repositorySlug: thomaspoignant/go-feature-flag
    path: config/flag/my-flags.yaml
# ...
```

| Field name       |    Mandatory     | Type   | Default              | Description                                                                                                                                                                                              |
|------------------|:----------------:|--------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `kind`           |  <Mandatory />   | string | **none**             | **Value should be `gitlab`**.<br/>_This field is mandatory and describes which retriever you are using._                                                                                                 |
| `repositorySlug` |  <Mandatory />   | string | **none**             | The repository slug of the GitLab repository where your file is located _(ex: `thomaspoignant/go-feature-flag`)_.                                                                                        |
| `path`           |  <Mandatory />   | string | **none**             | Path to the file inside the repository _(ex: `config/flag/my-flags.yaml`)_.                                                                                                                              |
| `baseUrl`        | <NotMandatory /> | string | `https://gitlab.com` | The base URL of your GitLab instance.                                                                                                                                                                    |
| `branch`         | <NotMandatory /> | string | `main`               | The branch we should check in the repository.                                                                                                                                                            |
| `token`          | <NotMandatory /> | string | **none**             | GitLab personal access token used to access a private repository ([Create a personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token)). |
| `timeout`        | <NotMandatory /> | string | `10000`              | Timeout in millisecond used when calling GitLab.                                                                                                                                                         |

## Configure the GO Module
To configure your GO module to use the {retrieverName} retriever, you need to add the following
configuration to your `ffclient.Config{}` object:

```go title="example.go"
err := ffclient.Init(ffclient.Config{
    PollingInterval: 3 * time.Second,
    Retriever: &gitlabretriever.Retriever{
        RepositorySlug: "thomaspoignant/go-feature-flag",
        Branch: "main",
        FilePath: "testdata/flag-config.goff.yaml",
        GitlabToken: "XXXX",
        Timeout: 2 * time.Second,
		    BaseURL: "https://gitlab.com",
    },
})
defer ffclient.Close()
```

| Field                |    Mandatory     | Description                                                                |
|----------------------|:----------------:|----------------------------------------------------------------------------|
| **`BaseURL`**        | <NotMandatory /> | The domain name of your Gitlab instance <br/>Default: `https://gitlab.com` |
| **`RepositorySlug`** |  <Mandatory />   | Your Gitlab slug `org/repo-name`.                                          |
| **`FilePath`**       |  <Mandatory />   | The path of your file.                                                     |
| **`Branch`**         | <NotMandatory /> | The branch where your file is.<br/>Default: `main`                         |
| **`GitlabToken`**    | <NotMandatory /> | GitLab token is used to access a private repository                        |
| **`Timeout`**        | <NotMandatory /> | Timeout for the HTTP call <br/>Default: 10 seconds                         |
