> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omni.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Azure DevOps

> Connect an Azure DevOps repository to an Omni model

export const provider_0 = "Azure DevOps"

export const permission1_0 = "Add service hooks to projects"

export const permission2_0 = "Add SSH public keys to your user profile"

<Note>
  Multiple Omni models can share the same git repository. If you're connecting a model to a repository that's already connected to another model, you only need to complete the Omni-side setup—the repository's deploy key and webhooks are already configured.
</Note>

## Requirements

To follow the steps in this guide, you'll need:

* [**Omni Connection Admin permissions**](/administration/users/permissions) for the model you want to connect to git
* **An existing {provider_0} repository**
* **Permissions in {provider_0} that allow you to:**
  * {permission1_0}
  * {permission2_0}

Refer to [Azure DevOps documentation](https://learn.microsoft.com/en-us/azure/devops/organizations/security/permissions?view=azure-devops) for information about user permissions.

## Setup

<Steps>
  <Step title="Retrieve the repository's SSH URL">
    1. In your browser, navigate to the Azure DevOps repository you want to connect to Omni.
    2. Click the **Clone** button near the top right corner of the page.
    3. Click the **SSH** option to display the repository's SSH URL.

    Keep this page open - you'll need it in the next step.
  </Step>

  <Step title="Connect the repository to Omni">
    1. In Omni, click **Develop**.
    2. Click the model you want to connect to git.
    3. In the model IDE, click **Model > Git settings**.
    4. You'll be prompted to enter connection details for the repository:
       * **Authentication Method** - Select **SSH (Deploy Key)** from the dropdown.
       * **SSH URL** - Copy and paste the repository's SSH URL from Step 1.
       * **Base Branch** - Enter the name of the default branch for the repository. Omni will default to `main` unless a different name is specified.
       * **Git follower** - Select this option if the repository should be treated as a [follower](/integrations/git/follower-mode).
    5. Click **Configure Git**.

    The page will update to display additional git settings, including information for deploy keys and webhooks.
  </Step>

  <Step title="Add an SSH public key">
    1. Browse to the Azure DevOps web portal (ex: `https://dev.azure.com/<your-org-name>/`).
    2. Click the **User settings** icon next to your avatar in the top right corner of the page.
    3. Click **SSH public keys**.
    4. On the page that displays, click **+ New Key**.
    5. In the **Add New SSH Key** panel that displays, fill in the following:
       * **Name** - Enter a descriptive name, such as *Omni Snowflake Model*
       * **Public Key Data** - Copy and paste the **Public key** from the Omni **Git settings** page
    6. Click **Add**.
  </Step>

  <Step title="Add repository webhooks">
    You'll create **three** webhook subscriptions for the Azure DevOps repository:

    1. Pull request created
    2. Pull request updated with **Change** filter = **Source branch updated**
    3. Pull request updated with **Change** filter = **Status updated**

    <Steps>
      <Step title="Create the webhook subscription">
        1) Navigate to the Azure DevOps project that contains the repository you want to connect to Omni.
        2) Click **Project settings**.
        3) Click **Service hooks**, located in the **General** section of the left navigation.
        4) On the **Service Hooks** page, click the **+ icon** or **Create subscription**.
        5) On the **Service** screen, click **Web Hooks** and then **Next**.
      </Step>

      <Step title="Configure the Trigger">
        1. On the **Trigger** screen, select one of the following for the **Trigger on this type of event** field:
           1. **Pull request created**
           2. **Pull request updated** — After selecting this trigger, set the **Change** filter to **Source branch updated**
           3. **Pull request updated** — After selecting this trigger, set the **Change** filter to **Status updated**
        2. Select the **Repository** you want to connect to Omni.
        3. If the **Target branch** field displays, select the **main** branch.
        4. When finished, click **Next**.
      </Step>

      <Step title="Configure the Action">
        On the **Action** screen, fill in the fields as follows:

        * **URL** - Copy and paste the **Webhook URL** from the Omni **Git settings** page
        * **Basic auth username** - `omni`
        * **Basic auth password** - Copy and paste the **Webhook secret** from the Omni **Git settings** page
        * **HTTP headers** - The value of this field depends on the subscription you're configuring:
          1. **Pull request created** — `x-azuredevops-omni-event:created`
          2. **Pull request updated** (Change = Source branch updated) — `x-azuredevops-omni-event:update-push`
          3. **Pull request updated** (Change = Status updated) — `x-azuredevops-omni-event:update-status`

        When finished, click **Finish** to create the webhook.
      </Step>

      <Step title="Repeat steps 1-3">
        Repeat these steps for each of the three webhook subscription types.
      </Step>
    </Steps>
  </Step>

  <Step title="Test the connection">
    To verify the setup, navigate back to the **Git settings** page in Omni. Click the **Test git connection** button near the top of the page to test the connection.
  </Step>
</Steps>

## What's next?

After the setup is complete, you can configure the integration's behavior by changing its settings. Refer to the [git integration settings reference](/integrations/git/settings) for more information.
