solana/scripts/increment-cargo-version.sh

128 lines
2.4 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.
Default:
* Removes the prerelease tag if present, otherwise the minor version is incremented.
2018-10-25 09:13:25 -07:00
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))
# shellcheck disable=2207
markdownFiles=($(find . -name "*.md"))
# 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
currentVersion="$MAJOR\.$MINOR\.$PATCH$SPECIAL"
bump=$1
if [[ -z $bump ]]; then
if [[ -n $SPECIAL ]]; then
bump=dropspecial # Remove prerelease tag
else
bump=minor
fi
fi
2018-10-25 11:45:15 -07:00
SPECIAL=""
2018-10-25 09:13:25 -07:00
# Figure out what to increment
case $bump in
2018-10-25 09:13:25 -07:00
patch)
PATCH=$((PATCH + 1))
;;
major)
MAJOR=$((MAJOR+ 1))
2020-02-20 21:56:13 -08:00
MINOR=0
PATCH=0
2018-10-25 09:13:25 -07:00
;;
minor)
MINOR=$((MINOR+ 1))
2020-02-20 21:56:13 -08:00
PATCH=0
2018-10-25 09:13:25 -07:00
;;
dropspecial)
;;
-*)
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
sed -i "$Cargo_toml" -e "0,/^version =/{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
# Update all the documentation references
for file in "${markdownFiles[@]}"; do
# Set new crate version
(
set -x
sed -i "$file" -e "s/$currentVersion/$newVersion/g"
)
done
2018-10-25 09:13:25 -07:00
echo "$currentVersion -> $newVersion"
exit 0