Mono/Multi-Repo support

Noting that there are a number of earlier threads asking related questions, but none asking directly.

For a repository with multiple discrete projects, or a repository with a single project but a discrete series of roles, it does not feel like Gitlab really understands this. I’m aware of parent-child architecture, it’s a bad way to solve for this.

Let’s start with one extreme, let’s imagine a mono-repos scenario like Facebook’s, there is little to no commonality between the majority of projects. Trying to construct parent-child relationships or use yml-artifact construction to manage that … yeah, nah.

At the opposite extreme would be a game development company with proprietary engine/tooling/systems/platform in some combination.

Their repos are likely to be partitioned, to some degree, but the tooling - for instance - will have a very different outline when viewed from a client developer perspective as opposed to a production pipelining perspective. Different OSes, different build/testing strategies, different deployment, etc, etc.

Is there a non-legacy reason why “single yaml file in the root directory” is gitlab’s only option? Are there any plans to provide support for having discrete pipeline files directly supported by gitlab?

  • having a “.gitlab-ci.yml” at some sub-directory other than root should automatically narrow the scope of when the pipeline is triggered,
    • a way to specify additional paths to trigger this yml,
  • allow “.gitlab-ci.yml” to be a folder to split into multiple yaml files, or allow “.gitlab-ci/”,
  • stop descending the filesystem on finding a “.gitlab-ci.yml” unless it has markup indicating it’s not final, so
/Internal
| .gitlab-ci.yml  <-- processed
     "image: ubuntu"
| Projects
| | OverEager
| | | .gitlab-ci.yml  <-- ignored unless /Internal/.gitlab-ci.yml is flagged for passthru
/External
| .gitlab-ci.yml <-- processed
    "image: posix"
    "passthru: true"
| MacOS/
| | MacApp/
| | | .gitlab-ci.yml  <-- processed, because passthru
| Linux/
...
| Windows/
| | WinApp/
| | | .gitlab-ci.yml <-- processed because passthru
   "image: windows" 
| | | src/
| | | | .gitlab-ci.yml  <-- not processed, because WinApp/yml didn't flag passthru

Hi @kfsone

everything you mentioned can be achieved by include and rules. I agree it won’t be truly dynamic, but it will work.

1 Like