141 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| set -e
 | |
| 
 | |
| usage() {
 | |
|   cat <<EOF
 | |
| usage: $0 [major|minor|patch|-preXYZ]
 | |
| 
 | |
| Increments the Cargo.toml version.
 | |
| 
 | |
| Default:
 | |
| * Removes the prerelease tag if present, otherwise the minor version is incremented.
 | |
| EOF
 | |
|   exit 0
 | |
| }
 | |
| 
 | |
| here="$(dirname "$0")"
 | |
| cd "$here"/..
 | |
| source ci/semver_bash/semver.sh
 | |
| source scripts/read-cargo-variable.sh
 | |
| 
 | |
| 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
 |