solana/scripts/increment-cargo-version.sh

101 lines
1.9 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -e
2018-10-25 09:13:25 -07:00
usage() {
cat <<EOF
2018-10-25 11:45:15 -07:00
usage: $0 [major|minor|patch|-preXYZ]
2018-10-25 09:13:25 -07:00
Increments the Cargo.toml version.
A minor version increment is the default
EOF
exit 0
}
here="$(dirname "$0")"
cd "$here"/..
source ci/semver_bash/semver.sh
readCargoVariable() {
declare variable="$1"
declare Cargo_toml="$2"
2018-10-25 09:13:25 -07:00
while read -r name equals value _; do
if [[ $name = "$variable" && $equals = = ]]; then
echo "${value//\"/}"
2018-10-25 09:13:25 -07:00
return
fi
done < <(cat "$Cargo_toml")
echo "Unable to locate $variable in $Cargo_toml" 1>&2
2018-10-25 09:13:25 -07:00
}
2019-04-15 13:25:44 -07:00
# shellcheck disable=2207
Cargo_tomls=($(find . -name Cargo.toml))
# Collect the name of all the internal crates
crates=()
2019-04-15 13:25:44 -07:00
for Cargo_toml in "${Cargo_tomls[@]}"; do
crates+=("$(readCargoVariable name "$Cargo_toml")")
done
# Read the current version
2018-10-25 09:13:25 -07:00
MAJOR=0
MINOR=0
PATCH=0
SPECIAL=""
2019-04-15 13:25:44 -07:00
semverParseInto "$(readCargoVariable version "${Cargo_tomls[0]}")" MAJOR MINOR PATCH SPECIAL
2018-10-25 09:13:25 -07:00
[[ -n $MAJOR ]] || usage
2018-10-25 11:45:15 -07:00
currentVersion="$MAJOR.$MINOR.$PATCH$SPECIAL"
SPECIAL=""
2018-10-25 09:13:25 -07:00
# Figure out what to increment
2018-10-25 09:13:25 -07:00
case ${1:-minor} in
patch)
PATCH=$((PATCH + 1))
;;
major)
MAJOR=$((MAJOR+ 1))
;;
minor)
MINOR=$((MINOR+ 1))
;;
-*)
if [[ $1 =~ ^-[A-Za-z0-9]*$ ]]; then
SPECIAL="$1"
else
echo "Error: Unsupported characters found in $1"
exit 1
fi
2018-10-25 11:45:15 -07:00
;;
2018-10-25 09:13:25 -07:00
*)
echo "Error: unknown argument: $1"
usage
;;
esac
2018-10-25 11:45:15 -07:00
newVersion="$MAJOR.$MINOR.$PATCH$SPECIAL"
2018-10-25 09:13:25 -07:00
# Update all the Cargo.toml files
2019-04-15 13:25:44 -07:00
for Cargo_toml in "${Cargo_tomls[@]}"; do
# Set new crate version
2018-10-25 09:13:25 -07:00
(
set -x
2018-10-25 11:45:15 -07:00
sed -i "$Cargo_toml" -e "s/^version = \"[^\"]*\"$/version = \"$newVersion\"/"
)
# Fix up the version references to other internal crates
for crate in "${crates[@]}"; do
(
set -x
sed -i "$Cargo_toml" -e "
s/^$crate = { *path *= *\"\([^\"]*\)\" *, *version *= *\"[^\"]*\"\(.*\)} *\$/$crate = \{ path = \"\1\", version = \"$newVersion\"\2\}/
"
)
done
2018-10-25 09:13:25 -07:00
done
2018-10-25 09:13:25 -07:00
echo "$currentVersion -> $newVersion"
exit 0