I've done something like this with CircleCI and Github labels. The Continuation orb[1] allows you to dynamically generate your CI yml rather than using a static workflow. A Python script is executed which uses information about the PR (author, timestamp, labels applied to the PR, etc) and a CI template yml to add, remove, or skip jobs from the workflow. Some use cases are:<p><pre><code> - Replacing a job with a newer job for testing purposes, as described in the article.
- Opting out of jobs, like "skip-deploy" or "skip-unit" labels, to speed up CI in some cases when these jobs aren't needed.
- Making some optional jobs required depending on the files that have been modified in the PR. You can get a list of modified files in a PR using the Github API. We use this for example if a new feature necessitates a new CI job but you want this job to be optional for branches that don't have this feature code yet.
</code></pre>
The additional complexity can make this a non-starter for some teams. In our case these use cases are more convenient for us than confusing for the eng team.<p>1: <a href="https://circleci.com/developer/orbs/orb/circleci/continuation" rel="nofollow">https://circleci.com/developer/orbs/orb/circleci/continuatio...</a>