Is it possible to create a “shared” downstream job which will run only once for N upstreams?
Case: we have N modules each living in a separate repo deployed into the same k8s environment. I want to force (allow_failure: false) integration tests to pass on every MR except those matching some hotfix rule (e.g. MR name matching regex). K8s namespace has the same name as the branch, and if the developer is working on multiple modules within the scope of a single ticket, all branches will have the same name.
Problem: If I’ll just add the downstream job to run integration tests on every MR, the developer will be forced to run it on every module s/he is working on. Instead, these jobs should be merged into a single downstream job with some rule like “do not create new jobs if the old one didn’t start yet” (the job is on the manual trigger). Per-branch grouping can be resolved by passing variables or creating a separate branch in the integration test project.
Basically, i want to get this:
A MR pipeline → T manual
B MR pipeline → T manual → Run → Result reflected for both A and B MR pipelines
So far the only way i see is to make an additional “smart repeater” which will be called by both A and B and which will determine if it should send the request to T or just replay the last response based on some “grouping condition”.
A MR pipeline → Repeater → T manual
B MR pipeline → Repeater → Doesn’t call T, just returns the previous response it sent for A
Though im not sure it will work properly.