forked from quarkus-qe/quarkus-test-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
133 lines (110 loc) · 6.63 KB
/
check-release-version.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
name: "Release check"
on:
pull_request:
types:
- opened
- synchronize
paths:
- .github/project.yml
jobs:
check-release-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check release version
run: |
releases=$(curl -sSL "https://github.com/gitapi/repos/${GITHUB_REPOSITORY}/releases")
if [[ "$GITHUB_BASE_REF" == "main" ]]; then
latest_prerelease=$(echo "$releases" | jq -r '.[] | select(.prerelease) | .tag_name' | head -n 1)
latest_prerelease_beta_number=$(echo "$latest_prerelease" | cut -d"." -f4,4 | grep -o '[0-9]\+' || true)
next_prerelease=$(grep -E 'current-version:\s*' .github/project.yml | awk '{print $2}')
next_prerelease_minor_version=$(echo "$next_prerelease" | cut -d"." -f2,2)
next_prerelease_patch_version=$(echo "$next_prerelease" | cut -d"." -f3,3)
next_prerelease_beta_number=$(echo "$next_prerelease" | cut -d"." -f4,4 | grep -o '[0-9]\+' || true)
prerelease_minor_version_bump=false
current_release=$(curl -sSL "https://github.com/gitapi/repos/${GITHUB_REPOSITORY}/releases/latest" | jq -r .tag_name)
current_release_minor_version=$(echo "$current_release" | cut -d"." -f2,2)
# Check if can change minor version after creating new branch
if [[ "$current_release_minor_version" == "$next_prerelease_minor_version" ]]; then
echo "Error: next LTS release branch is out, bump version to 1."$(("$next_prerelease_minor_version" + 1))".0.Beta1"
exit 1;
elif [[ "$next_prerelease_beta_number" == 1 ]]; then
prerelease_minor_version_bump=true
fi
if [[ $(("$current_release_minor_version" + 1)) != "$next_prerelease_minor_version" ]]; then
echo "Error: pre-releases should have minor version one upper than last release"
exit 1;
fi
if [[ "$next_prerelease_patch_version" != 0 || -z "$next_prerelease_beta_number" ]]; then
echo "Error: new releases are not allowed from development branch, use .Beta\D+ qualifier"
exit 1;
fi
if (! "$prerelease_minor_version_bump") && [[ ("$next_prerelease_beta_number" != $(("$latest_prerelease_beta_number" + 1))) ]]; then
echo "Error: pre-release version should go one by one as sequence"
correct_version=$(echo "$latest_prerelease" | cut -d"." -f1,2,3)
correct_prerelease_number=$(("$latest_prerelease_beta_number" + 1))
echo "After" $latest_prerelease "should go "$correct_version".Beta"$correct_prerelease_number
exit 1;
fi
echo "==================================="
cat .github/project.yml
echo "==================================="
project_current_base=$(echo "$next_prerelease" | grep -oP '^.*Beta')
echo "$project_current_base"
project_next_version=$(grep -E 'next-version:\s*' .github/project.yml | awk '{print $2}')
echo "$project_next_version"
project_next_base=$(echo "$project_next_version" | grep -oP '^.*Beta')
echo "$project_next_base"
project_current_beta_number="$next_prerelease_beta_number"
echo "$project_current_beta_number"
project_next_beta_number=$(echo "$project_next_version" | grep -oP 'Beta\K[0-9]+')
echo "$project_next_beta_number"
if [[ "$project_current_base" != "$project_next_base" ]] || [[ $(("$project_current_beta_number" + 1)) != "$project_next_beta_number" ]]; then
echo "The next-version in project.yaml is not valid. Next pre-release Beta version must be one upper that current"
exit 1;
fi
else
expected_release_version=$(echo "$GITHUB_BASE_REF" | sed 's/z/0/')
first_release_tag_exists=$(echo "$releases" | jq -r '.[] | .tag_name' | grep "^$expected_release_version$" || true)
next_release=$(grep -E 'current-version:\s*' .github/project.yml | awk '{print $2}')
if [ -z "$first_release_tag_exists" ]; then
if [[ "$next_release" != "$expected_release_version" ]]; then
echo "Error: wrong tag name for the first release in new branch"
exit 1;
else
exit 0;
fi
fi
branch_version=$(echo "$GITHUB_BASE_REF" | cut -d. -f1,2)
latest_branch_tag_patch_version=$(echo "$releases" | jq -r --arg version "$branch_version" '
.[]
| select(.tag_name | contains($version))
| .tag_name' | grep -v "Beta" | head -1 | cut -d. -f3)
branch_minor_version=$(echo "$GITHUB_BASE_REF" | cut -d. -f2,2)
next_release_minor_version=$(echo "$next_release" | cut -d"." -f2,2)
next_release_patch_version=$(echo "$next_release" | cut -d"." -f3,3)
beta_tag_exists=$(echo "$next_release" | cut -d"." -f4,4 || true)
if [ -n "$beta_tag_exists" ]; then
echo "Releases cannot consist any qualifier after version"
exit 1;
fi
if [[ "$branch_minor_version" != "$next_release_minor_version" ]]; then
echo "Error: minor versions cannot be changed"
exit 1;
fi
if [[ $(("$latest_branch_tag_patch_version" + 1)) != "$next_release_patch_version" ]]; then
echo "Error: release patch versions should be bumped one by one as sequence"
exit 1;
fi
echo "==================================="
cat .github/project.yml
echo "==================================="
project_next_version=$(grep -E 'next-version:\s*' .github/project.yml | awk '{print $2}')
project_next_base=$(echo "$project_next_version" | cut -d"." -f1,2)
project_current_patch_version="$next_release_patch_version"
project_next_patch_version=$(echo "$project_next_version" | awk -F. '{print $3}')
if [[ "$branch_version" != "$project_next_base" ]] || [[ $(("$project_current_patch_version" + 1)) != "$project_next_patch_version" ]]; then
echo "The next-version in project.yaml is not valid. Patch version of the next release must be one upper than the latest"
exit 1;
fi
fi