Complex dependency management

Lets say I have two different pipelines for a project.

I have job A which simply runs some tests.
Then I have job B, C and D. These are independent of A. B prepares some cache and C and D use that cache to do something.

It seems that it’s not possible to do something like this because by default jobs in stage2 start only when all jobs in stage1 finish.

The correct way to setup these jobs would be to have jobs A in test stage, jobs B in prepare cache stage and C and D in static-analysis stage.

However the way it currently works stages are all related and there’s no way to set some sort of independence. Is there a way to workaround these constraints?

What exactly are you asking? It’s kinda hard to follow with these abstract names like A, B, C, D.

It seems you have already read the docs on how stages work, so you already know that they run in sequence. This should not be an issue for anyone, it’s a standard feature.

Are you asking how to cache artifacts between stages? That is well documented: https://docs.gitlab.com/ee/ci/caching/ However there seems to be some issues: https://gitlab.com/gitlab-org/gitlab-runner/issues/336

No, he’s asking how to make the B-C & B-D pipelines not wait for A.

I think it needs two pipelines (but I have no idea if that’s possible). One pipeline contains only A, the second pipeline has a stage containing B, and a dependent stage containing C & D