#!/usr/bin/env bash set -e usage() { cat <&2 } ignores=( .cache .cargo target web3.js/examples ) not_paths=() for ignore in "${ignores[@]}"; do not_paths+=(-not -path "*/$ignore/*") done # shellcheck disable=2207,SC2068 # Don't want a positional arg if `not-paths` is empty Cargo_tomls=($(find . -mindepth 2 -name Cargo.toml ${not_paths[@]})) # shellcheck disable=2207 markdownFiles=($(find . -name "*.md")) # Collect the name of all the internal crates crates=() for Cargo_toml in "${Cargo_tomls[@]}"; do crates+=("$(readCargoVariable name "$Cargo_toml")") done # Read the current version MAJOR=0 MINOR=0 PATCH=0 SPECIAL="" semverParseInto "$(readCargoVariable version "${Cargo_tomls[0]}")" MAJOR MINOR PATCH SPECIAL [[ -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 SPECIAL="" # Figure out what to increment case $bump in patch) PATCH=$((PATCH + 1)) ;; major) MAJOR=$((MAJOR+ 1)) MINOR=0 PATCH=0 ;; minor) MINOR=$((MINOR+ 1)) PATCH=0 ;; 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 ;; *) echo "Error: unknown argument: $1" usage ;; esac newVersion="$MAJOR.$MINOR.$PATCH$SPECIAL" # Update all the Cargo.toml files for Cargo_toml in "${Cargo_tomls[@]}"; do # Set new crate version ( 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 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 echo "$currentVersion -> $newVersion" exit 0