I’d also like to request this feature.
In our usecase, we have a rather complicated buildkite pipeline setup for the Julia Language project where jobs which are logically grouped together don’t always share a similar “pipeline lineage”.
As an example, in our CI pipeline we will take a single version of Julia, build it on N platforms, test it in M scenarios (each platform will have at least one test scenario, but some may have more than one, such as alternative debug modes on linux x86_64), and then finally we’ll have N upload jobs to send the artifacts up to S3 if they pass all their tests.
All of these pipelines are being dynamically templated/generated, and so the “lineage” of the pipeline is complex. For instance, it’s not so simple for us to have the “packaging” steps be emitted by the same step that emits the “uploading” steps, so if we wanted to have groups such as “Linux”, “macOS”, “Windows”, “FreeBSD”, etc…, it would force us to split up our “meta” YAML files into many more files than we otherwise would prefer. (E.g. create sub-trees for each “group”, rather than having a single templating “package launch” job that launches all of the packaging jobs, and a single templating “tester launch” job that launches all of the testing jobs, etc…).
Additionally, we wanted to use group steps to provide some flexibility in depends_on
, but the lineage constraint makes that difficult as well. To give a concrete example:
We build one x86_64-linux-gnu
tarball, then send this off to two testers (one multithreaded, one singlethreaded, to test both code paths). We also spawn an upload job that pushes any build that passes all of its tests up to S3. Because all of these jobs are templated across many different OS’s and architectures, it would be very nice if the upload job could use something like depends_on: "test_group_x86_64-linux-gnu"
. However, because the testers are being templated, this means that we would need to have the testers be templated from a job that is dedicated to launching only the x86_64-linux-gnu
testers (So that the launching job belongs to the same group).
In my usecases, I can’t imagine ever not wanting groups with the same name to be merged.