doc/development/cicd/keyword_reviews.md
Use this checklist when reviewing merge requests that add or modify CI/CD YAML keywords, to ensure complete specification, documentation, and testing.
When a keyword accepts file or directory paths:
*, **, ?When adding an existing keyword name as a subkeyword (for example, adding
include: as a subkeyword within another keyword):
How does the keyword behave in combination with CI composability options:
!reference tag – a custom extension, a very frequent source of unexpected behavior
!reference tag work when used in or under the keyword?!reference tag?include:local: mean when being used in a file that is included via include:project: – which of the two projects is considered the local one?)extends – deep-merges hashes but replaces arrays, which can surprise keywords that take a list
extends?!reference tag behavior documented and tested?include: behavior documented and tested?extends: merge behavior documented and tested?!reference tag and include: usage?Any usage dimension without a limit will eventually (and often unintentionally) be exploited at scale, causing performance problems that are difficult to address without breaking changes. Every keyword must have relevant limits in place before going into the product.
Changes that impact CI YAML parsing should be behind a feature flag. The flag has to be default-enabled for a full milestone before being removed. This is to ensure that Self-Managed and Dedicated users can always revert to the original behavior in case of unexpected side effects.
rules:existsGitLab issue #411344:
VAR1: $VAR2 did not expand in rules:exists. This was not clearly documented,
users perceived it as a bug when it might not even initially have been planned
to be supported.
Lesson: Be intentional about scope, and consider that user expectations will always default to the maximum.
GitLab issue #549736:
Using files instead of file is silently ignored if it is not the only include,
allowing invalid YAML to execute with unexpected results.
Lesson: Consider common keyword combinations and real-world usage in tests. Even an explicit test for this that only checks a single include would not catch this.
GitLab issue #572701:
Wildcard patterns in cache:key:files stopped working and fell back to the
default key instead, causing incorrect cache reuse.
Lesson: When changing existing keywords, verify that all possible usage patterns are covered by specs, and close any gaps before making changes.
#g_pipeline-authoring Slack channel@gitlab-org/maintainers/cicd-verify in your MR