Draft: Introduce AND vs OR tag logic
What does this MR do?
This MR is the first of a series which will allow greater flexibility in the selection of a runner for a specific CI job by introducing the concept of "OR" tags. This will manifest in the CI as an array of tags
example1:
tags:
- tag1
- tag3
- [tag2, tag4]
- [tag6, tag5]
This job would require a runner with tag1 AND tag3 AND (tag2 OR tag4) AND (tag5 or tag6)
. A runner with tag1 tag3 tag4 tag5
would match as would tag1 tag2 tag3 tag4 tag5 tag6
This MR introduces the feature flag and the backend code to recognize that an array is passed and to properly expand the values found within it. These arrays are stored in the database as ||
separated strings. It also has the code to split all tags over that separator value. Future work for this will remove the YAML requirement that tags only be string values, properly display the OR tags in the job web page, and ensure that the runners are properly selected.
Solves #20443
Screenshots (strongly suggested)
Does this MR meet the acceptance criteria?
Conformity
-
📋 Does this MR need a changelog?-
I have included a changelog entry. -
I have not included a changelog entry because _____.
-
-
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers -
Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
-
Label as security and @ mention @gitlab-com/gl-security/appsec
-
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team