1
1
#! /bin/bash
2
2
3
+ RED=' \033[0;31m'
4
+ GREEN=' \033[0;32m'
5
+ CYAN=' \033[0;36m'
6
+ # YELLOW='\033[0;33m'
7
+ # BLUE='\033[0;34m'
8
+ # MAGENTA='\033[0;35m'
9
+ # GRAY='\033[0;37m'
10
+
11
+ # Reset output color to the default
12
+ NC=' \033[0m'
13
+
3
14
if [ $# != 1 ]
4
15
then
5
16
echo " Please provide version as the first argument"
6
17
exit 1
7
18
fi
8
19
9
20
version=" $1 "
21
+ regex=" ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$"
22
+
23
+ if [[ $version =~ $regex ]]; then
24
+ echo -e " ${CYAN} Changing to the version number $version ${NC} "
25
+ else
26
+ echo -e " ${RED} Error: Invalid version number provided.${NC} "
27
+ echo " The version number should follow the semantic versioning format."
28
+ echo " Please ensure the version number consists of MAJOR.MINOR.PATCH"
29
+ echo " Example: 0.6.9 or 2.3.1"
30
+ exit 1
31
+ fi
32
+
10
33
CI_DIR=" $( cd " $( dirname " $0 " ) " && pwd ) "
11
34
pushd " $CI_DIR /../"
12
35
@@ -15,50 +38,94 @@ echo "Searching for crates..."
15
38
crates=($( find . -type d -exec bash -c ' [ -f "$0"/Cargo.toml ]' ' {}' \; -print) )
16
39
17
40
if [[ " ${# crates[@]} " == " 0" ]]; then
18
- echo " No crates found."
41
+ echo -e " ${RED} Error: No crates found."
19
42
exit 1
20
43
else
21
- echo " Found ${# crates[@]} crate(s): ${crates[*]} "
44
+ echo -e " ${CYAN} Found ${# crates[@]} crate(s): ${crates[*]}${NC } "
22
45
fi
23
46
24
- file=Cargo.toml
25
47
final_exit_code=0
26
48
declare -a grep_failures
27
49
declare -a lockfile_failures
28
50
29
- bump_version () {
30
- # Catches every `version` that begins a line and doesn't end with a comma.
31
- find_pattern=' ^version\s*=.*[^,]\s*$'
32
- replace_pattern=' s/' $find_pattern ' /version = "' " $version " ' "/'
51
+ # Catches every `version` that begins a line and stores version inside double quotes
52
+ find_pattern=" ^version = \" .*\" $"
53
+ replace_pattern=" s/${find_pattern} /version = \" ${version} \" /"
54
+
55
+ get_current_version () {
56
+ local current_version=" "
57
+ if [ " $( uname) " == " Darwin" ]; then
58
+ # macOS
59
+ current_version=$( grep -Eo " $find_pattern " " $file " | sed ' s/^version = "//;s/"$//' )
60
+ else
61
+ # Linux
62
+ current_version=" $( grep -oP ' (?<=^version = ")[^"]+' " $file " | head -n 1) "
63
+ fi
64
+
65
+ echo " $current_version "
66
+ }
67
+
68
+ replace_version () {
69
+ if [ " $( uname) " == " Darwin" ]; then
70
+ # macOS
71
+ sed -i ' ' " $replace_pattern " " $file "
72
+ else
73
+ # Linux
74
+ sed -i " $replace_pattern " " $file "
75
+ fi
76
+ }
77
+
78
+ find_and_replace () {
79
+ local crate=$1
80
+ local file=" Cargo.toml"
33
81
34
- grep -q " $find_pattern " " $file " && sed -i " " " $replace_pattern " " $file "
35
- exit_code=" $? "
36
- if [[ " $exit_code " != " 0" ]]; then
82
+ if grep -q " $find_pattern " " $file " ; then
83
+ local prev_version=$( get_current_version)
84
+ replace_version
85
+ local new_version=$( get_current_version)
86
+ echo -e " ${CYAN} Successfully changed the version inside $file for ${crate# ./ } (v$prev_version -> v$new_version )${NC} "
87
+ else
88
+ echo -e " ${RED} Error: Failed to change the version inside $file for ${crate# ./ }${NC} "
37
89
final_exit_code=1
38
- grep_failures+=($1 )
39
- return
90
+ grep_failures+=(" $crate " )
91
+ return 1
40
92
fi
93
+ }
94
+
95
+ update_lockfile () {
96
+ local crate=$1
97
+ local file=" Cargo.lock"
41
98
42
- cargo generate-lockfile
43
- exit_code=" $? "
44
- if [[ " $exit_code " != " 0" ]]; then
99
+ if cargo update --workspace; then
100
+ echo -e " ${CYAN} Successfully updated $file for ${crate# ./ }${NC} "
101
+ else
102
+ echo -e " ${RED} Error: Failed to update $file for ${crate# ./ }${NC} "
45
103
final_exit_code=1
46
- lockfile_failures+=($1 )
104
+ lockfile_failures+=(" $crate " )
105
+ return 1
47
106
fi
48
107
}
49
108
50
109
for crate in " ${crates[@]} "
51
110
do
52
111
pushd " $crate "
53
- bump_version " $crate "
112
+ find_and_replace " $crate "
113
+ popd
114
+ done
115
+
116
+
117
+ for crate in " ${crates[@]} "
118
+ do
119
+ pushd " $crate "
120
+ update_lockfile " $crate "
54
121
popd
55
122
done
56
123
57
124
if [[ $final_exit_code != 0 ]]; then
58
- [[ " ${# grep_failures[@]} " != " 0" ]] && echo " Failed to find 'version' for ${# grep_failures[@]} crate(s): ${grep_failures[*]} "
59
- [[ " ${# lockfile_failures[@]} " != " 0" ]] && echo " Failed to generate lockfile for ${# lockfile_failures[@]} crate(s): ${lockfile_failures[*]} "
125
+ [[ " ${# grep_failures[@]} " != " 0" ]] && echo -e " ${RED} Error: Failed to find 'version' for ${# grep_failures[@]} crate(s): ${grep_failures[*]} "
126
+ [[ " ${# lockfile_failures[@]} " != " 0" ]] && echo -e " ${RED} Error: Failed to generate lockfile for ${# lockfile_failures[@]} crate(s): ${lockfile_failures[*]} "
60
127
else
61
- echo " The version number has been changed to $version ."
128
+ echo -e " ${GREEN} The version number has been updated to $version ."
62
129
fi
63
130
64
131
exit $final_exit_code
0 commit comments