Add support for variable substitution
Description
the runner currently uses golangs os.Expand
to resolve job variable content. this is implemented
as basic key lookup which yields an empty string for missed lookups. the POSIX shell specification
defined several processing features which can be applied to the variable lookup result. right now
this can be used by performing the desired operations as part of the job itself
"linux/arm/v7":
before_script:
# derive variables from existing ones
- export DIST="${CI_JOB_NAME////_}.tar.gz" # linux_arm_v7.tar.gz
- export SEED=${CI_COMMIT_SHA:: 16} # first 16 characters
for simple workflows the above solution works, althoug only in bash/posix shell environments. for workflows involving includes, YAML anchors, extends, or child pipelines, this might not work, especially if they are very generic.
variables:
PLATFORM: "${CI_JOB_NAME}" # this is resolved by the runner, not the executor shell
# DIST: "${PLATFORM////_}.tar.gz" # this does not work
linux/amd64:
before_script:
# define it manually for POSIX shell
- export DIST="${PLATFORM////_}.tar.gz"
windows/amd64:
before_script:
# define it manually for powershell
- $DIST = $PLATFORM -replace '/', '_' + '.tar.gz'
Proposal
extend the current job variable logic to support variable substitutions. it does not necessarily have to be compliant with the POSIX shell variable substitution logic, although this might be what most users are already familiar with.
Related links
comprehensive guide to POSIX shell string substitutions: https://github.com/dylanaraps/pure-sh-bible#strings
comprehensive guide to BASH shell string substitutions: https://github.com/dylanaraps/pure-bash-bible#parameter-expansion