solana/scripts/increment-cargo-version.sh

145 lines
2.8 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
2020-10-23 10:45:19 -07:00
source scripts/read-cargo-variable.sh
2018-10-25 09:13:25 -07:00
ignores=(
.cache
.cargo
target
web3.js/test
node_modules
)
not_paths=()
for ignore in "${ignores[@]}"; do
not_paths+=(-not -path "*/$ignore/*")
done
# shellcheck disable=2207
Cargo_tomls=($(find . -mindepth 2 -name Cargo.toml "${not_paths[@]}"))
# 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)
;;
check)
badTomls=()
for Cargo_toml in "${Cargo_tomls[@]}"; do
if ! grep "^version *= *\"$currentVersion\"$" "$Cargo_toml" &>/dev/null; then
badTomls+=("$Cargo_toml")
fi
done
if [[ ${#badTomls[@]} -ne 0 ]]; then
echo "Error: Incorrect crate version specified in: ${badTomls[*]}"
exit 1
fi
exit 0
;;
-*)
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
# Version bumps should occur in their own commit. Disallow bumping version
# in dirty working trees. Gate after arg parsing to prevent breaking the
# `check` subcommand.
(
set +e
if ! git diff --exit-code; then
echo -e "\nError: Working tree is dirty. Commit or discard changes before bumping version." 1>&2
exit 1
fi
)
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 cargo lock files
2021-07-16 14:03:57 -07:00
scripts/cargo-for-all-lock-files.sh tree >/dev/null
2018-10-25 09:13:25 -07:00
echo "$currentVersion -> $newVersion"
exit 0