My application has several libraries each with their own git repository. The repos provide material to individual pipelines that build the libraries.
The build pipelines then feed to a revision packager pipeline that bundles the libraries into a revision package which then feeds into a deployment pipeline.
REPO-A -> BUILD-A
REPO-B -> BUILD-B
REPO-C -> BUILD-C
BUILD-A, BUILD-B, BUILD-C -> PACKAGE -> DEPLOY
Let's say BUILD-A and BUILD-B take 20 seconds to complete, but BUILD-C pipeline takes a few minutes to complete.
What I'm seeing is that when commits come in on multiple repos somewhat simultaneously, this results in multiple runs of the PACKAGE -> DEPLOY pipelines. I'm trying to set up a gate that waits for all running builds to complete before continuing with PACKAGE.
I understand why that's the default behavior if you view each path through the graph as a unique run. The documentation also indicates that Fan-In only works if the SCM material for the entry pipelines is the exact same. So it seems I'm observing the documented behavior.
Is there a way to achieve what I'm trying to do where I can Fan-In from different SCM material? I'm thinking like a way to override the "Fan-In Key" where it could use an arbitrary key to drive the Fan-In behavior instead of the repo URL.
If not, is there an obvious way I'm not seeing to break up my graph such that I can wait for all BUILD-* to complete with some kind of quiet period gate before continuing with PACKAGE -> DEPLOY? For example, once any of the BUILD-* pipelines have run, wait 45 seconds and if nothing else starts, then run PACKAGE -> DEPLOY.
Maybe the PACKAGE pipeline has to be manual trigger and ignores the BUILD-* pipelines for scheduling, then the "gate" is really just a script or something that uses the API to determine whether or not it's time to run?
Looking for any ideas I'm not seeing...
Thanks