mirror of https://github.com/pulumi/pulumi.git
112 lines
3.1 KiB
Bash
Executable File
112 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
>&2 echo "::group::Update versions"
|
|
trap ">&2 echo '::endgroup::'" EXIT # bash equivalent of defer func()
|
|
|
|
INPUT_VERSION="$1"
|
|
BUILD="$(cut -d'+' -f2 <<< "$INPUT_VERSION")" # may not be present
|
|
VERSION_PRERELEASE="$(cut -d'+' -f1 <<< "$INPUT_VERSION")"
|
|
|
|
VERSION="$(cut -d'-' -f1 <<< "$VERSION_PRERELEASE")"
|
|
PRERELEASE="$(cut -d'-' -f2 <<< "$VERSION_PRERELEASE")" # may not be present
|
|
|
|
MAJOR="$(cut -d'.' -f1 <<< "$VERSION")"
|
|
MINOR="$(cut -d'.' -f2 <<< "$VERSION")"
|
|
PATCH="$(cut -d'.' -f3 <<< "$VERSION")"
|
|
|
|
>&2 echo "::debug::INPUT_VERSION=$INPUT_VERSION"
|
|
>&2 echo "::debug::VERSION=$VERSION"
|
|
>&2 echo "::debug::PRERELEASE=$PRERELEASE"
|
|
>&2 echo "::debug::MAJOR=$MAJOR"
|
|
>&2 echo "::debug::MAJOR=$MINOR"
|
|
>&2 echo "::debug::MINOR=$PATCH"
|
|
>&2 echo "::debug::BUILD=$BUILD"
|
|
|
|
PIPX_MISSING=false
|
|
if ! command -v pipx &>/dev/null; then
|
|
>&2 echo "::error::pipx not installed, install pipx via pypi or homebrew"
|
|
PIPX_MISSING=true
|
|
fi
|
|
|
|
JQ_MISSING=false
|
|
if ! command -v jq &>/dev/null; then
|
|
>&2 echo "::error::yq not installed, install jq via your OS package manager"
|
|
JQ_MISSING=true
|
|
fi
|
|
|
|
if $JQ_MISSING || $PIPX_MISSING; then
|
|
exit 1;
|
|
fi
|
|
|
|
yq() {
|
|
pipx run yq==3.0.2 "$@"
|
|
}
|
|
|
|
N=$(yq '.replacements | length' .github/scripts/versions.yaml)
|
|
for n in $(seq 0 1 "$((N-1))"); do
|
|
replacement=$(yq ".replacements[$n]" .github/scripts/versions.yaml)
|
|
type=$(yq -r '.type' <<< "$replacement")
|
|
|
|
case "$type" in
|
|
"file")
|
|
file=$(yq -r '.file' <<< "$replacement")
|
|
fileFormat=$(yq -r '.fileFormat' <<< "$replacement")
|
|
updatePath=$(yq -r '.updatePath' <<< "$replacement")
|
|
versionFormat=$(yq -r '.versionFormat' <<< "$replacement")
|
|
|
|
TOOL="jq"
|
|
TOOL_ARGS=""
|
|
SPONGE=false
|
|
case "$fileFormat" in
|
|
"sed") TOOL="sed";;
|
|
"json") TOOL="jq" TOOL_ARGS="--in-place";;
|
|
"yaml") TOOL="yq" TOOL_ARGS="--in-place";;
|
|
*)
|
|
>&2 echo "::error::Unknown file format $fileFormat; unable to update file $file"
|
|
exit 1
|
|
esac
|
|
|
|
tool() {
|
|
if $SPONGE; then
|
|
TEMP="$("$TOOL" "$@")"
|
|
echo -n "$TEMP" > "$file"
|
|
else
|
|
"$TOOL" "$@"
|
|
fi
|
|
}
|
|
|
|
# Use a subshell to avoid mutating our caller's environment.
|
|
# envsubst requires exported variables
|
|
(
|
|
export SEMVER="$INPUT_VERSION"
|
|
export VERSION
|
|
export MAJOR
|
|
export MINOR
|
|
export PATCH
|
|
export PRERELEASE
|
|
export BUILD
|
|
|
|
# We do not want to expand vars to envsubst, we're listing the ones we want to allow.
|
|
# shellcheck disable=SC2016
|
|
versionString=$(envsubst '$SEMVER,$VERSION,$MAJOR,$MINOR,$PATCH,$PRERELEASE,$BUILD' <<< "$versionFormat")
|
|
|
|
if [ "$TOOL" == "sed" ]; then
|
|
sed --in-place -E "s/$updatePath/$versionString/" "$file"
|
|
else
|
|
tool $TOOL_ARGS "$updatePath = \"$versionString\"" "$file"
|
|
fi
|
|
)
|
|
;;
|
|
"command")
|
|
command=$(yq -r '.command' <<< "$replacement")
|
|
eval "${command}"
|
|
;;
|
|
*)
|
|
>&2 echo "::error::Unknown replacement type $type"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|