mirror of
https://github.com/rlespinasse/slugify-value.git
synced 2026-05-17 18:25:47 +00:00
55 lines
1.5 KiB
Bash
Executable File
55 lines
1.5 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() {
|
|
output=$(sed -E 's#refs/[^\/]*/##;s/[^a-zA-Z0-9._-]+/-/g;s/-+/-/g;s/^-*//;s/-*$//' <<<"$1")
|
|
reduce "$output"
|
|
}
|
|
|
|
slug_url() {
|
|
output=$(sed -E 's#refs/[^\/]*/##;s/[^a-zA-Z0-9_-]+/-/g;s/-+/-/g;s/^-*//;s/-*$//' <<<"$1")
|
|
reduce "$output"
|
|
}
|
|
|
|
reduce() {
|
|
if [ "${MAX_LENGTH}" == "nolimit" ]; then
|
|
echo "$1"
|
|
else
|
|
cut -c1-"${MAX_LENGTH}" <<<"$1"
|
|
fi
|
|
}
|
|
|
|
{
|
|
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"
|