Add a $CI_BUILD_REF_SLUG CI variable which is the ref name with only [a-z0-9-] characters

Description

We often use the value of $CI_BUILD_REF_NAME in our .gitlab-ci.yml files, mostly for Docker image tags and review app environment URLs. All would be well and good with this, but most people at our company name branches like <username>/foo, or feature/bar. This means that:

  • The ref name can't be used as a docker image tag, since / is an illegal character there. We ended up adding this to most of our projects' .gitlab-ci.yml files to work around this:
    before_script:
    - export NOSLASH_REF_NAME=${CI_BUILD_REF_NAME/\//-}
  • The ref name can't be used as a review app subdomain directly. We couldn't find any way to make this work, so we're just managing branch deployment URLs outside GitLab.

Proposal

Add a $CI_BUILD_REF_SLUG to the build context which is just the $CI_BUILD_REF_NAME with all letters lowercased, and all non-alphanumeric characters replaced with a dash. So a feature/foo branch would get a slug like feature-foo, and a tag named macOS/v1.0.0 would be slugified as macos-v1-0-0.