Construct Name With Bash Substitution in GitHub Actions
How we can construct string like 2022-12-03-refs-heads-feature-branch-1-1234abc
in GitHub Actions?
We can use several predefined environment variables in the GitHub Actions environment. They are described in the documentation: Environment variables - GitHub Docs.
This string 2022-12-03-refs-heads-feature-branch-1-1234abc
can be divided into three parts: today’s date, the reference name (like refs-heads-feature-branch-1
), and git commit hash (1234abc
).
The date can be created from date
command. The reference name can be created from GITHUB_REF
(like refs/heads/feature-branch-1
). The commit hash can be created from GITHUB_SHA
(like ffac537e6cbbf934b08745a378932722df287a53
).
The date
should be OK, but other environment variables contains illegal characters for the filename or just too long. The normal run:
command seems to be run on bash in the standard environment (Ubuntu VM?) so we can use a bash’s feature called Shell Parameter Expansion (Bash Reference Manual).
To make the desired string 2022-12-03-refs-heads-feature-branch-1-1234abc
, we can use the expression like this: $(date +%Y-%m-%d)-${GITHUB_REF////-}-${GITHUB_SHA::7}
. The ${VARIABLE//A/B}
means to replace A
with B
in VARIABLE
and the ${VARIABLE:0:7}
means to substring VARIABLE
from position 0 (which can be omitted) to position 7.