| 
									
										
										
										
											2018-11-11 08:19:04 -08:00
										 |  |  | #!/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. | 
					
						
							| 
									
										
										
										
											2019-07-25 13:57:18 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  | readCargoVariable() { | 
					
						
							|  |  |  |   declare variable="$1" | 
					
						
							|  |  |  |   declare Cargo_toml="$2" | 
					
						
							| 
									
										
										
										
											2018-10-25 09:13:25 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -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") | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  |   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)) | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Collect the name of all the internal crates | 
					
						
							|  |  |  | crates=() | 
					
						
							| 
									
										
										
										
											2019-04-15 13:25:44 -07:00
										 |  |  | for Cargo_toml in "${Cargo_tomls[@]}"; do | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  |   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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-20 21:01:23 -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" | 
					
						
							| 
									
										
										
										
											2019-07-25 13:57:18 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  | # Figure out what to increment | 
					
						
							| 
									
										
										
										
											2019-07-25 13:57:18 -07:00
										 |  |  | case $bump in | 
					
						
							| 
									
										
										
										
											2018-10-25 09:13:25 -07:00
										 |  |  | patch) | 
					
						
							|  |  |  |   PATCH=$((PATCH + 1)) | 
					
						
							|  |  |  |   ;; | 
					
						
							|  |  |  | major) | 
					
						
							|  |  |  |   MAJOR=$((MAJOR+ 1)) | 
					
						
							|  |  |  |   ;; | 
					
						
							|  |  |  | minor) | 
					
						
							|  |  |  |   MINOR=$((MINOR+ 1)) | 
					
						
							|  |  |  |   ;; | 
					
						
							| 
									
										
										
										
											2019-07-25 13:57:18 -07:00
										 |  |  | dropspecial) | 
					
						
							|  |  |  |   ;; | 
					
						
							| 
									
										
										
										
											2018-10-25 16:18:08 -07:00
										 |  |  | -*) | 
					
						
							|  |  |  |   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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  | # Update all the Cargo.toml files | 
					
						
							| 
									
										
										
										
											2019-04-15 13:25:44 -07:00
										 |  |  | for Cargo_toml in "${Cargo_tomls[@]}"; do | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  |   # Set new crate version | 
					
						
							| 
									
										
										
										
											2018-10-25 09:13:25 -07:00
										 |  |  |   ( | 
					
						
							|  |  |  |     set -x | 
					
						
							| 
									
										
										
										
											2019-08-20 17:05:28 -07:00
										 |  |  |     sed -i "$Cargo_toml" -e "0,/^version =/{s/^version = \"[^\"]*\"$/version = \"$newVersion\"/}" | 
					
						
							| 
									
										
										
										
											2018-10-25 10:38:34 -07:00
										 |  |  |   ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  |   # Fix up the version references to other internal crates | 
					
						
							|  |  |  |   for crate in "${crates[@]}"; do | 
					
						
							|  |  |  |     ( | 
					
						
							|  |  |  |       set -x | 
					
						
							|  |  |  |       sed -i "$Cargo_toml" -e "
 | 
					
						
							| 
									
										
										
										
											2019-05-29 18:30:49 -07:00
										 |  |  |         s/^$crate = { *path *= *\"\([^\"]*\)\" *, *version *= *\"[^\"]*\"\(.*\)} *\$/$crate = \{ path = \"\1\", version = \"$newVersion\"\2\}/ | 
					
						
							| 
									
										
										
										
											2018-10-25 12:26:57 -07:00
										 |  |  |       "
 | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |   done | 
					
						
							| 
									
										
										
										
											2018-10-25 09:13:25 -07:00
										 |  |  | done | 
					
						
							| 
									
										
										
										
											2018-10-25 10:38:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-25 09:13:25 -07:00
										 |  |  | echo "$currentVersion -> $newVersion" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exit 0 |