Support variables in rules:changes
Problem to solve
I have some CI jobs which run the same steps on different files and try to DRY my CI by using extends. However, GitLab does not currently evaluate variables in rules:changes, which makes this difficult. I can work around it by replacing extends with the explicit properties, but it makes my CI file unnecessarily verbose.
When setting an environment variable as a path and using that variable in rules:changes, the variable is ignored.
Example
- Create a env variable named
HELM_DIRand set it tohelmin the UI. - Create a project that contains
helm/test.txt - Add the below
gitlab-ci.ymlscript to the project:
test0:
script:
- echo "This is test0 and will complete"
- echo $CI_COMMIT_BRANCH
- echo $CI_PROJECT_DIR
test1:
script:
- echo $CI_COMMIT_BRANCH
- echo $CI_PROJECT_DIR
- echo $HELM_DIR
- echo "This is working"
- ls
rules:
- if: $CI_COMMIT_BRANCH
changes:
- $HELM_DIR/**/*
when: on_success
- Make a change to the
helm/test.txtfile or any file in that folder.
The below works when explicitly setting the file path:
test0:
script:
- echo "This is test0 and will complete"
- echo $CI_COMMIT_BRANCH
- echo $CI_PROJECT_DIR
test1:
script:
- echo $CI_COMMIT_BRANCH
- echo $CI_PROJECT_DIR
- echo "This is working"
- ls
rules:
- if: $CI_COMMIT_BRANCH
changes:
- helm/**/*
when: on_success
Intended users
Further details
Benefit would be cleaner-looking CI that is easier to maintain.
Proposal
Support variable use in the rules:changes clause
Note that $ is a valid character in a path, so we need to enforce a rule that if $SOMETHING variable exists then we will replace it, otherwise we should leave $SOMETHING unchanged.
Permissions and Security
No impact
Documentation
Testing
What does success look like, and how can we measure that?
Support variable use in the rules:changes clause
What is the type of buyer?
Any tier where rules:changes is available (i.e. free/core and above)