Files
slugify-value/slugify.sh
2022-06-15 16:06:49 +02:00

80 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
if [[ "$OSTYPE" == "darwin"* ]]; then
# On MacOS,
# bash don't support substitution, so we use 'tr'
KEY=$(echo "$INPUT_KEY" | tr '[:lower:]' '[:upper:]')
CS_VALUE=${INPUT_VALUE:-${!INPUT_KEY}}
VALUE=$(echo "$CS_VALUE" | tr '[:upper:]' '[:lower:]')
PREFIX=$(echo "$INPUT_PREFIX" | tr '[:lower:]' '[:upper:]')
else
KEY=${INPUT_KEY^^}
CS_VALUE=${INPUT_VALUE:-${!INPUT_KEY}}
VALUE=${CS_VALUE,,}
PREFIX=${INPUT_PREFIX^^}
fi
MAX_LENGTH=""
if [ -z "${INPUT_SLUG_MAXLENGTH}" ]; then
echo "::error ::slug-maxlength cannot be empty"
exit 1
elif [ "${INPUT_SLUG_MAXLENGTH}" -eq "${INPUT_SLUG_MAXLENGTH}" ] 2>/dev/null; then
MAX_LENGTH="${INPUT_SLUG_MAXLENGTH}"
elif [ "${INPUT_SLUG_MAXLENGTH}" == "nolimit" ]; then
MAX_LENGTH="${INPUT_SLUG_MAXLENGTH}"
else
echo "::error ::slug-maxlength must be a number or equals to 'nolimit'"
exit 1
fi
slug() {
# 1st : Remove refs prefix
# 2d : Replace unwanted characters
# 3d : Remove leading dashes
# 4d : Remove trailing dashes
output=$(sed -E 's#refs/[^\/]*/##;s/[^a-zA-Z0-9._-]+/-/g;s/^-*//;s/-*$//' <<<"$1")
reduce "$output" false
}
slug_url() {
# 1st : Remove refs prefix
# 2d : Replace unwanted characters
# 3d : Remove leading dashes
# 4d : Remove trailing dashes
output=$(sed -E 's#refs/[^\/]*/##;s/[^a-zA-Z0-9-]+/-/g;s/^-*//;s/-*$//' <<<"$1")
reduce "$output" true
}
reduce() {
reduced_value="$1"
remove_ending_hypen="$2"
if [ "${MAX_LENGTH}" != "nolimit" ]; then
reduced_value=$(cut -c1-"${MAX_LENGTH}" <<<"$1")
fi
if [ "$remove_ending_hypen" == "true" ]; then
reduced_value=$(sed -E 's/-*$//' <<<"$reduced_value")
fi
echo "$reduced_value"
}
SLUG_VALUE=$(slug "$VALUE")
SLUG_CS_VALUE=$(slug "$CS_VALUE")
SLUG_URL_VALUE=$(slug_url "$VALUE")
SLUG_URL_CS_VALUE=$(slug_url "$CS_VALUE")
echo "::set-output name=value::${CS_VALUE}"
echo "::set-output name=slug::${SLUG_VALUE}"
echo "::set-output name=slug-cs::${SLUG_CS_VALUE}"
echo "::set-output name=slug-url::${SLUG_URL_VALUE}"
echo "::set-output name=slug-url-cs::${SLUG_URL_CS_VALUE}"
if [ "${INPUT_PUBLISH_ENV}" == "true" ]; then
{
echo "${PREFIX}${KEY}=${CS_VALUE}"
echo "${PREFIX}${KEY}_SLUG=${SLUG_VALUE}"
echo "${PREFIX}${KEY}_SLUG_CS=${SLUG_CS_VALUE}"
echo "${PREFIX}${KEY}_SLUG_URL=${SLUG_URL_VALUE}"
echo "${PREFIX}${KEY}_SLUG_URL_CS=${SLUG_URL_CS_VALUE}"
} >>"$GITHUB_ENV"
fi