# Using tye with Multiple Repositories *This document is a conceptual overview of how Tye can be used in multirepo scenarios* There are many times where an application will consist of multiple repositories. Tye supports this through referencing other tye.yaml or repositories. ## Reference to another tye.yaml Let's assume we have an app that has a frontend and inventory service. The frontend depends on the inventory service running to keep track of orders.The inventory service uses redis to cache some orders as well. If we had a single repository, the app would look like the following ```yaml name: multirepo-app services: - name: frontend project: ./frontend/frontend.csproj - name: inventory project: ./inventory/inventory.csproj - name: redis container: redis bindings: - port: 6793 ``` Now, let's say that the inventory service was not in the same repository and now in a separate repository, side by side with the frontend repository. You can modify the tye.yaml files in the following way. ```yaml # frontend's tye.yaml name: multirepo-app services: - name: frontend project: ./frontend/frontend.csproj - name: inventory include: ../inventoryRepo/tye.yaml ``` ```yaml # inventory's tye.yaml name: multirepo-app services: - name: inventory include: inventory/inventory.csproj - name: redis container: redis bindings: - port: 6793 ``` Now, when you execute `tye run` or `tye deploy` in the frontend repo, it will run/deploy the frontend, as well as the inventory service and redis as there is a reference to the tye.yaml. What is different is that when executing `tye run` or `tye deploy` in the inventory repo, only the inventory and redis services will be ran/deployed. Another thing to note is that the frontend will not have service discovery information injected for redis, as the frontend doesn't directly depend on redis. If the frontend did depend on redis, they could either add a reference to the redis service in the inventory's tye.yaml, or add a reference to redis directly in their own tye.yaml. When evaluating service dependencies, if duplicate services are encountered, the first/closest wins in a breath first ordering. ## Reference to git repository Tye can use dependencies which are referenced via a git repository as well. In the above example, instead of the inventory service being present, let's change the reference to be a repository. ```yaml # frontend's tye.yaml name: multirepo-app services: - name: frontend project: ./frontend/frontend.csproj - name: inventory repository: https://github.com/MyOrg/InventoryRepo ``` The repository cloned will follow the same conventions for figuring out how to run/deploy; either using a tye.yaml, sln, then csproj/fsproj if present. These are all based on the root of the clone repository. The string for `repository` is what should be passed to the call to `git clone`. So form example, if you'd like to specify a branch to clone, you can specify `--branch`. ```yaml repository: https://github.com/MyOrg/InventoryRepo --branch release/1.0 ``` Dependencies will be cloned to the .tye/deps folder inside of the repo.