Skip to content

Commit f737de7

Browse files
committed
chore: release semver names map
Using a map allows more flexibility in the future. This should also fix more bugs introduced in the previous commit.
1 parent c6a80aa commit f737de7

1 file changed

Lines changed: 51 additions & 32 deletions

File tree

.github/workflows/release/semver.sh

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,65 +7,84 @@
77
# old=<major>.<minor>.<patch>[-<name>[.<id>]]
88
# new=<major>.<minor>.<patch>[-<name>[.<id>]]
99

10+
declare -A pre=(
11+
[alpha]=1
12+
[beta]=2
13+
[rc]=3
14+
[0]=""
15+
[1]="alpha"
16+
[2]="beta"
17+
[3]="rc"
18+
)
19+
1020
[[ ! "$old" =~ ^$regex$ ]] && exit 1
1121

1222
IFS='.-' read -r -a old <<< "$old"
23+
[ -v 'old[3]' ] && old[3]="${pre[${old[3]}]}"
1324

1425
valid=0 # 0 means "not valid", other values are for "reason" debugging
1526
declare -a ver
1627
if [[ "$new" =~ ^$regex$ ]]; then
1728

1829
IFS='.-' read -r -a ver <<< "$new"
30+
[ -v 'ver[3]' ] && ver[3]="${pre[${ver[3]}]}"
1931
for i in $(seq 0 $level); do
20-
if [ $i == 3 ]; then
21-
# same pre-release
22-
if [ "${ver[3]}" == "${old[3]}" ]; then
32+
if [[ $i == 3 ]]; then
33+
# same pre-release name
34+
if [[ ${ver[3]} == ${old[3]} ]]; then
2335
continue
2436
# left pre-release stage
25-
elif [ ${#ver[3]} == 0 ]; then
37+
elif [[ ${ver[3]} == 0 ]]; then
2638
valid=1
2739
break
28-
# entered pre-release stage (ko because we know the first part is equal -> check for if!)
29-
elif [ ${#ver[3]} == 0 ]; then
40+
# entered pre-release stage (ko; we know the part before is equal!)
41+
# eg: 1.0.0 --> 1.0.0-alpha is bad
42+
elif [[ ${old[3]} == 0 ]]; then
3043
break
31-
# a "grater" pre-release: "a(alpha)" > "b(eta)" > "r(c)"?
32-
elif [[ "${ver[3]}" > "${old[3]}" ]]; then
44+
# a "grater" pre-release?
45+
elif [[ ${ver[3]} -gt ${old[3]} ]]; then
3346
valid=2
3447
break
3548
fi
3649
elif [[ ${ver[$i]} -gt ${old[$i]} ]]; then
37-
valid=2
38-
break
50+
valid=2
51+
break
3952
elif [[ ${ver[$i]} -lt ${old[$i]} ]]; then
40-
break
53+
break
4154
fi
4255
done
4356

4457
fi
4558

59+
step() {
60+
ver[$1]=$(( ${ver[$1]}+1 ))
61+
}
62+
4663
# if ver should should be generated
4764
if [ $valid == 0 ]; then
48-
ver=(${old[@]})
49-
if [[ $level == 4 ]]; then
50-
ver[$level]=$(( ${ver[$level]}+1 ))
51-
elif [[ $level == 3 ]]; then
52-
# if we increase pre-release name we also reset the id
53-
ver=(${ver[@]::4})
54-
if [ "${ver[3]}" == "alpha" ]; then
55-
ver[3]="beta"
56-
elif [ "${ver[3]}" == "beta" ]; then
57-
ver[3]="rc"
58-
elif [ "${ver[3]}" == "rc" ]; then
59-
ver=(${ver[@]::3}) # leave pre-release stage
60-
ver[2]=$(( ${ver[2]}+1 ))
61-
fi
62-
else
63-
ver=(${ver[@]::3}) # no pre-release
64-
ver[$level]=$(( ${ver[$level]}+1 ))
65-
# if we increase major/minor we want to also reset minor/patch
66-
[[ $level == 0 ]] && ver[1]=0
67-
[[ $level == 0 ]] || [[ $level == 1 ]] && ver[2]=0
65+
ver=(${old[@]})
66+
step "$level"
67+
if [[ $level == 3 ]]; then
68+
# if no name was found increase patch as well
69+
if [[ ! -v "pre[${ver[3]}]" ]]; then
70+
ver[3]=1
71+
step 2
72+
# if we just got in alpha increase patch as well
73+
elif [[ ${ver[3]} == 1 ]]; then
74+
step 2
6875
fi
76+
# if we just got in alpha increase patch as well
77+
elif [[ $level == 4 ]] && [[ ! -v 'ver[3]' ]]; then
78+
step 2
79+
fi
80+
for i in $(seq $(( level+1 )) 4); do
81+
# reset all parts after the one increased
82+
ver[$i]=0
83+
done
6984
fi
7085

71-
echo "version=${ver[0]}.${ver[1]}.${ver[2]}${ver[3]:+-${ver[3]}}${ver[4]:+.${ver[4]}}"
86+
# fix: bash is ***... it thinks ver[3] is missing?
87+
ver=(${ver[@]})
88+
ver[3]="${pre[${ver[3]}]}"
89+
90+
echo "version=${ver[0]}.${ver[1]}.${ver[2]}${ver[3]:+-${ver[3]}.${ver[4]:-0}}"

0 commit comments

Comments
 (0)