Greetings!
Does the Horde build system have a mechanism for a dependency build chain? For example:
Say I have job Z. Before job Z can start, it needs jobs A and B to run and complete. Jobs A and B can run in parallel, and once complete, job Z would then start, possibly at a changelist higher than jobs A and B if those jobs submitted things that job Z needs to sync.
So ideally job Z would trigger on a schedule, then it would check which job dependencies it has, trigger those jobs (A and B), and then wait for both of them to complete before starting.
I see that TemplateRefConfig has chainedJobs, but this seems like it would only work for chaining things more serially and wouldn’t cover the scenario I mentioned above, since then job A and job B (running parallel) would both have Job Z for their chainedJobs, but that would lead to Job Z running as soon as one of them completes, rather than both, and likely even running twice.
BuildGraph kind of has this dependency chain concept with the Requires tag, ensuring anther Node runs and completes before that node runs. Though the issues here seem to be:
- Not sure if you can have one Node run at a higher CL than the others
- Using BuildGraph loses the modularity we have with the Horde templates, as a new BuildGraph would need to be created for every combination of a chained dependency we may want.
The next feature I came across that seemed promising is ScheduleConfig’s ScheduleGateConfig. At first glance it seemed like this would do what I wanted (though is currently limited to only 1 templateID). It seemed like it would wait for the job specified in the ScheduleGateConfig to complete, and if successful, would then run the scheduled job. However upon digging deeper, it seems like it doesn’t trigger/wait for the gate job, but rather just searches for the last successful CL of the gate job, and then runs the scheduled job on that matching CL?
As of now it seems like my best approach might be to write custom functionality similar to ScheduleGateConfig that will meet the criteria I listed above in my sample scenario, but before going down that path I wanted to double check here to see if there was a feature I might’ve missed that already handles what we need. Thanks for your time!