Skip to content

Commit 335726f

Browse files
committed
Update release version checker script
1 parent 7a6ac57 commit 335726f

File tree

43 files changed

+523
-105
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+523
-105
lines changed

.github/check-release-version.sh

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#!/bin/bash
2+
set -e
3+
4+
releases=${RELEASES_JSON:-$(curl -sSL "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases?per_page=100")}
5+
current_release=${LATEST_JSON:-$(curl -sSL "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest" | jq -r .tag_name)}
6+
7+
if [[ "$GITHUB_BASE_REF" == "main" ]]; then
8+
latest_prerelease=$(echo "$releases" | jq -r '.[] | select(.prerelease) | .tag_name' | head -n 1)
9+
latest_prerelease_beta_number=$(echo "$latest_prerelease" | cut -d"." -f4,4 | grep -o '[0-9]\+' || true)
10+
latest_prerelease_minor_version=$(echo "$latest_prerelease" | cut -d'.' -f2,2)
11+
12+
next_prerelease=$(grep -E 'current-version:\s*' project.yml | awk '{print $2}')
13+
next_prerelease_minor_version=$(echo "$next_prerelease" | cut -d"." -f2,2)
14+
next_prerelease_patch_version=$(echo "$next_prerelease" | cut -d"." -f3,3)
15+
next_prerelease_beta_number=$(echo "$next_prerelease" | cut -d"." -f4,4 | grep -o '[0-9]\+' || true)
16+
prerelease_minor_version_bump=false
17+
18+
current_release_minor_version=$(echo "$current_release" | cut -d"." -f2,2)
19+
20+
# Determine minor version bump (e.g., 1.6.0.Beta21 → 1.7.0.Beta1)
21+
if [[ "$next_prerelease_beta_number" == 1 ]]; then
22+
# Ensure patch version is zero when starting a new minor development cycle
23+
if [[ "$next_prerelease_patch_version" != 0 ]]; then
24+
echo "Error: pre-release patch version must be 0 when starting new minor version"
25+
exit 1;
26+
fi
27+
28+
if [[ "$next_prerelease_minor_version" -eq $(("$latest_prerelease_minor_version" + 1)) ]]; then
29+
echo "Starting new minor development cycle after unreleased prerelease"
30+
prerelease_minor_version_bump=true
31+
elif [[ "$next_prerelease_minor_version" -eq $(("$current_release_minor_version" + 1)) ]]; then
32+
echo "Starting new minor development cycle after released version"
33+
prerelease_minor_version_bump=true
34+
else
35+
echo "Error: cannot skip minor versions. Must be based on latest prerelease or release"
36+
exit 1;
37+
fi
38+
elif [[ "$next_prerelease_beta_number" == 0 ]]; then
39+
echo "Error: pre-release beta number cannot be 0, it must be 1 or higher"
40+
exit 1;
41+
else
42+
# Regular pre-release continuation
43+
if [[ "$next_prerelease_minor_version" != "$current_release_minor_version" && "$next_prerelease_minor_version" != $(("$current_release_minor_version" + 1)) ]]; then
44+
echo "Error: pre-release minor version must match current or be next"
45+
exit 1;
46+
fi
47+
fi
48+
49+
50+
if [[ "$next_prerelease_patch_version" != 0 || -z "$next_prerelease_beta_number" ]]; then
51+
echo "Error: new releases are not allowed from development branch, use .Beta\\D+ qualifier"
52+
exit 1;
53+
fi
54+
55+
if (! "$prerelease_minor_version_bump") && [[ ("$next_prerelease_beta_number" != $(("$latest_prerelease_beta_number" + 1))) ]]; then
56+
echo "Error: pre-release version should go one by one as sequence"
57+
correct_version=$(echo "$latest_prerelease" | cut -d"." -f1,2,3)
58+
correct_prerelease_number=$(("$latest_prerelease_beta_number" + 1))
59+
echo "After" $latest_prerelease "should go "$correct_version".Beta"$correct_prerelease_number
60+
exit 1;
61+
fi
62+
63+
project_current_base=$(echo "$next_prerelease" | grep -oP '^.*Beta')
64+
project_next_version=$(grep -E 'next-version:\s*' project.yml | awk '{print $2}')
65+
project_next_base=$(echo "$project_next_version" | grep -oP '^.*Beta')
66+
67+
project_current_beta_number="$next_prerelease_beta_number"
68+
project_next_beta_number=$(echo "$project_next_version" | grep -oP 'Beta\K[0-9]+')
69+
70+
if [[ "$project_current_base" != "$project_next_base" ]] || [[ $(("$project_current_beta_number" + 1)) != "$project_next_beta_number" ]]; then
71+
echo "Error: the next-version in project.yaml is not valid. Next pre-release Beta version must be one upper that current"
72+
exit 1;
73+
fi
74+
75+
else
76+
expected_release_version=$(echo "$GITHUB_BASE_REF" | sed 's/z/0/')
77+
78+
first_release_tag_exists=$(echo "$releases" | jq -r '.[] | .tag_name' | grep "^$expected_release_version$" || true)
79+
next_release=$(grep -E 'current-version:\s*' project.yml | awk '{print $2}')
80+
81+
if [ -z "$first_release_tag_exists" ]; then
82+
if [[ "$next_release" != "$expected_release_version" ]]; then
83+
echo "Error: wrong tag name for the first release in new branch"
84+
exit 1;
85+
else
86+
exit 0;
87+
fi
88+
fi
89+
90+
branch_version=$(echo "$GITHUB_BASE_REF" | cut -d. -f1,2)
91+
latest_branch_tag_patch_version=$(echo "$releases" | jq -r --arg version "$branch_version" '
92+
.[]
93+
| select(.tag_name | contains($version))
94+
| .tag_name' | grep -v "Beta" | head -1 | cut -d. -f3)
95+
96+
branch_minor_version=$(echo "$GITHUB_BASE_REF" | cut -d. -f2,2)
97+
next_release_minor_version=$(echo "$next_release" | cut -d"." -f2,2)
98+
next_release_patch_version=$(echo "$next_release" | cut -d"." -f3,3)
99+
beta_tag_exists=$(echo "$next_release" | cut -d"." -f4,4 || true)
100+
101+
if [ -n "$beta_tag_exists" ]; then
102+
echo "Error: releases cannot consist any qualifier after version"
103+
exit 1;
104+
fi
105+
106+
if [[ "$branch_minor_version" != "$next_release_minor_version" ]]; then
107+
echo "Error: minor versions cannot be changed"
108+
exit 1;
109+
fi
110+
111+
if [[ $(("$latest_branch_tag_patch_version" + 1)) != "$next_release_patch_version" ]]; then
112+
echo "Error: release patch versions should be bumped one by one as sequence"
113+
exit 1;
114+
fi
115+
116+
project_next_version=$(grep -E 'next-version:\s*' project.yml | awk '{print $2}')
117+
project_next_base=$(echo "$project_next_version" | cut -d"." -f1,2)
118+
119+
project_current_patch_version="$next_release_patch_version"
120+
project_next_patch_version=$(echo "$project_next_version" | awk -F. '{print $3}')
121+
122+
if [[ "$branch_version" != "$project_next_base" ]] || [[ $(("$project_current_patch_version" + 1)) != "$project_next_patch_version" ]]; then
123+
echo "Error: the next-version in project.yaml is not valid. Patch version of the next release must be one upper than the latest"
124+
exit 1;
125+
fi
126+
fi
127+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"tag_name": "1.6.1",
3+
"prerelease": false
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{ "tag_name": "1.6.1", "prerelease": false },
3+
{ "tag_name": "1.6.0", "prerelease": false },
4+
{ "tag_name": "1.5.2", "prerelease": false }
5+
]
6+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"tag_name": "1.6.0",
3+
"prerelease": false
4+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[
2+
{
3+
"tag_name": "1.7.0.Beta1",
4+
"prerelease": true
5+
},
6+
{
7+
"tag_name": "1.6.0.Beta20",
8+
"prerelease": true
9+
},
10+
{
11+
"tag_name": "1.6.0",
12+
"prerelease": false
13+
},
14+
{
15+
"tag_name": "1.5.0",
16+
"prerelease": false
17+
}
18+
]
19+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"tag_name": "1.5.0",
3+
"prerelease": false
4+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[
2+
{
3+
"tag_name": "1.6.0.Beta20",
4+
"prerelease": true
5+
},
6+
{
7+
"tag_name": "1.5.0",
8+
"prerelease": false
9+
}
10+
]
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
current-version: 1.6.0.Beta1
2+
next-version: 1.6.0.Beta2
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
current-version: 1.6.0.Beta22
2+
next-version: 1.6.0.Beta23

0 commit comments

Comments
 (0)