Skip to content

Commit 0edfd84

Browse files
authored
captain script and github workflow (rancher#265)
* draft captain script and github workflow * fix names * script directory location change * fix review comment * rke2-packaging fix * rke2-packaging fix * adding asset count change * review fixes * removing local vars * adding qase plan id change here
1 parent a62932a commit 0edfd84

3 files changed

Lines changed: 278 additions & 1 deletion

File tree

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: Run Captain Shell Script
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
k3s_versions:
7+
description: 'Provide the list of k3s versions (comma separated)'
8+
required: true
9+
default: 'v1.34.0-rc1+k3s1,v1.33.4-rc1+k3s1,v1.32.8-rc1+k3s1,v1.31.12-rc1+k3s1'
10+
rke2_versions:
11+
description: 'Provide the list of rke2 versions (comma separated)'
12+
required: true
13+
default: 'v1.34.0-rc1+rke2r1,v1.33.4-rc1+rke2r1,v1.32.8-rc1+rke2r1,v1.31.12-rc1+rke2r1,v1.30.14-rc1+rke2r3'
14+
page_size:
15+
description: 'Page size for API queries'
16+
required: false
17+
default: '150'
18+
19+
jobs:
20+
run-script-job:
21+
runs-on: ubuntu-latest
22+
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
26+
27+
- name: Update and install necessary packages
28+
run: sudo apt-get update && sudo apt-get install -y jq curl skopeo
29+
30+
- name: Change permissions and make script executable (if needed)
31+
working-directory: ./scripts
32+
run: chmod +x ./captain.sh
33+
34+
- name: Run the captain shell script
35+
working-directory: ./scripts
36+
run: ./captain.sh -v "${{ github.event.inputs.k3s_versions }}","${{ github.event.inputs.rke2_versions }}" -d -p "${{ github.event.inputs.page_size }}"

scripts/captain.sh

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
#!/bin/sh
2+
3+
while getopts v:p:dh OPTION
4+
do
5+
case "${OPTION}"
6+
in
7+
v) INPUT=${OPTARG};;
8+
p) PAGE_SIZE=${OPTARG};;
9+
d) DEBUG="true"
10+
echo "DEBUG mode is ON"
11+
;;
12+
h|?)
13+
echo "
14+
Usage:
15+
16+
$(basename "$0") [-v <version_comma_separated> ] [-p <page_size_integer_value> ] [-d]
17+
18+
-d: debug. If flag is used, debug mode is ON and prints the curl commands executed.
19+
-v: version to test. Ex: v1.31.6-rc1+rke2r1,v1.31.6-rc1+k3s1,v1.31.5+rke2r1
20+
-p: page size for curl commands to fetch data from docker hub or github. Default is 200.
21+
-h: help - usage is displayed
22+
"
23+
exit 1
24+
;;
25+
esac
26+
done
27+
28+
# Set defaults if not provided
29+
if [ -z "${INPUT}" ]; then
30+
echo "Please provide the version to test using -v option."
31+
exit 1
32+
fi
33+
if [ -z "${DEBUG}" ]; then
34+
DEBUG="false"
35+
fi
36+
if [ -z "${PAGE_SIZE}" ]; then
37+
PAGE_SIZE=200
38+
fi
39+
40+
debug_log () {
41+
if [ "${DEBUG}" = true ]; then
42+
echo "$ $1"
43+
fi
44+
}
45+
46+
verify_count () {
47+
# $1 count $2 expected_count $3 log item we are checking
48+
COUNT="$1"
49+
EXPECTED_COUNT="$2"
50+
DESCRIPTION="$3"
51+
52+
if [ "${COUNT}" -eq "${EXPECTED_COUNT}" ] || [ "${COUNT}" -gt "${EXPECTED_COUNT}" ]; then
53+
echo "PASS: ${DESCRIPTION} Count is ${COUNT}."
54+
else
55+
echo "FAIL: Not found enough ${DESCRIPTION}. Expected count ${EXPECTED_COUNT} but got ${COUNT}."
56+
fi
57+
}
58+
59+
verify_system_agent_installers () {
60+
SAI_OUTPUT_FILE="sys_agent_installers_${RANDOM}"
61+
SYSTEM_AGENT_INSTALLER_URL="https://registry.hub.docker.com/v2/repositories/rancher/system-agent-installer-${PRODUCT}/tags?page_size=${PAGE_SIZE}"
62+
63+
echo "\n==== VERIFY SYSTEM AGENT INSTALLER FOR PRODUCT: ${PRODUCT} version prefix: ${VERSION_PREFIX} version suffix: ${VERSION_SUFFIX}: ===="
64+
65+
if echo "${VERSION_PREFIX}" | grep -q "rc"; then
66+
debug_log "curl -L -s \"${SYSTEM_AGENT_INSTALLER_URL}\" | jq -r \".results[].name\" | grep ${VERSION_PREFIX} | grep ${VERSION_SUFFIX} | tee -a \"${SAI_OUTPUT_FILE}\""
67+
curl -L -s "${SYSTEM_AGENT_INSTALLER_URL}" | jq -r ".results[].name" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | tee -a "${SAI_OUTPUT_FILE}"
68+
else
69+
debug_log "curl -L -s \"${SYSTEM_AGENT_INSTALLER_URL}\" | jq -r \".results[].name\" | grep ${VERSION_PREFIX} | grep ${VERSION_SUFFIX} | grep -v \"rc\" | tee -a \"${SAI_OUTPUT_FILE}\""
70+
curl -L -s "${SYSTEM_AGENT_INSTALLER_URL}" | jq -r ".results[].name" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | grep -v "rc" | tee -a "${SAI_OUTPUT_FILE}"
71+
fi
72+
73+
SAI_COUNT=$(cat "${SAI_OUTPUT_FILE}" | wc -l)
74+
WINDOWS_COUNT=$(cat "${SAI_OUTPUT_FILE}" | grep "windows" | wc -l)
75+
LINUX_ARM_COUNT=$(cat "${SAI_OUTPUT_FILE}" | grep "linux-arm64" | wc -l)
76+
LINUX_AMD_COUNT=$(cat "${SAI_OUTPUT_FILE}" | grep "linux-amd64" | wc -l)
77+
78+
if [ "${PRODUCT}" = "rke2" ]; then
79+
verify_count "${SAI_COUNT}" "5" "Total images"
80+
verify_count "${WINDOWS_COUNT}" "2" "Windows images"
81+
else
82+
verify_count "${SAI_COUNT}" "3" "Total images"
83+
fi
84+
85+
verify_count "${LINUX_ARM_COUNT}" "1" "Linux arm images"
86+
verify_count "${LINUX_AMD_COUNT}" "1" "linux-amd64 images"
87+
88+
rm -rf "${SAI_OUTPUT_FILE}"
89+
}
90+
91+
verify_upgrade_images () {
92+
UPG_OUTPUT_FILE="upgrade_images_${RANDOM}"
93+
UPGRADE_IMAGES_URL="https://registry.hub.docker.com/v2/repositories/rancher/${PRODUCT}-upgrade/tags?page_size=${PAGE_SIZE}"
94+
95+
echo "\n==== VERIFY UPGRADE IMAGES FOR ${PRODUCT} ${VERSION_PREFIX}: ===="
96+
97+
if echo $2 | grep -q "rc"; then
98+
debug_log "curl -L -s ${UPGRADE_IMAGES_URL} | jq -r \".results[].name\" | grep ${VERSION_PREFIX} | grep "${VERSION_SUFFIX}""
99+
curl -L -s "${UPGRADE_IMAGES_URL}" | jq -r ".results[].name" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | tee -a "${UPG_OUTPUT_FILE}"
100+
else
101+
debug_log "curl -L -s ${UPGRADE_IMAGES_URL} | jq -r \".results[].name\" | grep ${VERSION_PREFIX} | grep "${VERSION_SUFFIX}" | grep -v \"rc\""
102+
curl -L -s "${UPGRADE_IMAGES_URL}" | jq -r ".results[].name" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | grep -v "rc" | tee -a "${UPG_OUTPUT_FILE}"
103+
fi
104+
105+
UPGRADE_COUNT=$(cat "${UPG_OUTPUT_FILE}" | wc -l)
106+
verify_count "${UPGRADE_COUNT}" "1" "Upgrade images"
107+
108+
rm -rf "${UPG_OUTPUT_FILE}"
109+
}
110+
111+
verify_releases () {
112+
RELEASES_FILE="releases_${RANDOM}"
113+
114+
echo "\n==== VERIFY RELEASES FOR ${PRODUCT} ${VERSION_PREFIX} ${VERSION_SUFFIX}: ===="
115+
116+
if [ "${PRODUCT}" = "rke2" ]; then
117+
RELEASES_URL="https://api.github.com/repos/rancher/rke2/releases"
118+
else
119+
RELEASES_URL="https://api.github.com/repos/k3s-io/k3s/releases"
120+
fi
121+
122+
if echo "${VERSION_PREFIX}" | grep -q "rc"; then
123+
debug_log "curl -s -H \"Accept: application/vnd.github+json\" ${RELEASES_URL} | jq '.[].tag_name' | grep ${VERSION_PREFIX} | grep ${VERSION_SUFFIX}"
124+
curl -s -H "Accept: application/vnd.github+json" "${RELEASES_URL}" | jq '.[].tag_name' | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | tee -a "${RELEASES_FILE}"
125+
else
126+
debug_log "curl -s -H \"Accept: application/vnd.github+json\" ${RELEASES_URL} | jq '.[].tag_name' | grep ${VERSION_PREFIX} | grep ${VERSION_SUFFIX} | grep -v \"rc\""
127+
curl -s -H "Accept: application/vnd.github+json" "${RELEASES_URL}" | jq '.[].tag_name' | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | grep -v "rc" | tee -a "${RELEASES_FILE}"
128+
fi
129+
130+
RELEASES_COUNT=$(cat "${RELEASES_FILE}" | wc -l)
131+
verify_count "${RELEASES_COUNT}" "1" "Release versions"
132+
133+
rm -rf "${RELEASES_FILE}"
134+
}
135+
136+
verify_release_asset_count_rke2 () {
137+
echo "\n==== VERIFY ASSET COUNT FOR RKE2 VERSION: ${VERSION} ===="
138+
debug_log "curl -sS -H \"Accept: application/vnd.github+json\" \"https://api.github.com/repos/rancher/rke2/releases/tags/${VERSION}\" | jq '.assets | length'"
139+
140+
ASSET_COUNT=$(curl -sS -H "Accept: application/vnd.github+json" "https://api.github.com/repos/rancher/rke2/releases/tags/${VERSION}" | jq '.assets | length')
141+
verify_count "${ASSET_COUNT}" "74" "RKE2 release Asset count"
142+
}
143+
144+
verify_release_asset_count_k3s () {
145+
echo "\n==== VERIFY ASSET COUNT FOR K3S VERSION: ${VERSION} ===="
146+
debug_log "curl -sS -H \"Accept: application/vnd.github+json\" \"https://api.github.com/repos/k3s-io/k3s/releases/tags/${VERSION}\" | jq '.assets | length'"
147+
148+
ASSET_COUNT=$(curl -sS -H "Accept: application/vnd.github+json" "https://api.github.com/repos/k3s-io/k3s/releases/tags/${VERSION}" | jq '.assets | length')
149+
verify_count "${ASSET_COUNT}" "19" "K3S release Asset count"
150+
}
151+
152+
verify_rke2_packaging () {
153+
RKE2_PKG_FILE="rke2_pkg_${RANDOM}"
154+
155+
echo "\n==== SELINUX RKE2 PACKAGING CHECK: ${PRODUCT} ${VERSION_PREFIX} ${VERSION_SUFFIX}: ===="
156+
157+
for p in {1..3}; do
158+
if echo "${VERSION_PREFIX}" | grep -q "rc"; then
159+
debug_log "curl -s -H \"Accept: application/vnd.github+json\" https://api.github.com/repos/rancher/rke2-packaging/tags\?page\=${p}\&per_page\=100 | jq '.[].name' >> ${RKE2_PKG_FILE}"
160+
curl -s -H "Accept: application/vnd.github+json" https://api.github.com/repos/rancher/rke2-packaging/tags\?page\="${p}"\&per_page\=100 | jq '.[].name' >> "${RKE2_PKG_FILE}" 2>&1
161+
else
162+
debug_log "curl -s -H \"Accept: application/vnd.github+json\" https://api.github.com/repos/rancher/rke2-packaging/tags\?page\=${p}\&per_page\=100 | jq '.[].name' >> ${RKE2_PKG_FILE}"
163+
curl -s -H "Accept: application/vnd.github+json" https://api.github.com/repos/rancher/rke2-packaging/tags\?page\="${p}"\&per_page\=100 | jq '.[].name' >> "${RKE2_PKG_FILE}" 2>&1
164+
fi
165+
done
166+
167+
if echo "${VERSION_PREFIX}" | grep -q "rc"; then
168+
CHANNEL_COUNT=$(cat "${RKE2_PKG_FILE}" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | wc -l)
169+
OUTPUT=$(cat "${RKE2_PKG_FILE}" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" )
170+
else
171+
CHANNEL_COUNT=$(cat "${RKE2_PKG_FILE}" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | grep -v "rc" | wc -l)
172+
OUTPUT=$(cat "${RKE2_PKG_FILE}" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | grep -v "rc")
173+
fi
174+
175+
debug_log "\nOutput:\n ${OUTPUT}"
176+
verify_count "${CHANNEL_COUNT}" "1" "RKE2 packaging versions"
177+
178+
rm -rf "${RKE2_PKG_FILE}"
179+
}
180+
181+
verify_prime_registry () {
182+
SYS_AGENT_OUTFILE="sys_agent_${RANDOM}"
183+
RKE2_RUNTIME_OUTFILE="rke2_runtime_${RANDOM}"
184+
echo "\n==== VERIFY PRIME REGISTRY FOR ${PRODUCT} ${VERSION_PREFIX} ${VERSION_SUFFIX}: ===="
185+
186+
if [ "${PRODUCT}" = "rke2" ]; then
187+
RKE2_RUNTIME_URL="docker://registry.rancher.com/rancher/rke2-runtime"
188+
if echo $2 | grep -q "rc"; then
189+
debug_log "skopeo list-tags ${RKE2_RUNTIME_URL} | grep ${VERSION_PREFIX} | grep ${VERSION_SUFFIX} | tee -a ${RKE2_RUNTIME_OUTFILE}"
190+
skopeo list-tags "${RKE2_RUNTIME_URL}" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | tee -a "${RKE2_RUNTIME_OUTFILE}"
191+
else
192+
debug_log "skopeo list-tags ${RKE2_RUNTIME_URL} | grep ${VERSION_PREFIX} | grep ${VERSION_SUFFIX} | grep -v rc | tee -a ${RKE2_RUNTIME_OUTFILE}"
193+
skopeo list-tags "${RKE2_RUNTIME_URL}" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | grep -v rc | tee -a "${RKE2_RUNTIME_OUTFILE}"
194+
fi
195+
196+
RKE2_RUNTIME_COUNT=$(cat "${RKE2_RUNTIME_OUTFILE}" | wc -l)
197+
verify_count "${RKE2_RUNTIME_COUNT}" "1" "RKE2 Runtime(in prime registry)"
198+
fi
199+
200+
SYS_AGENT_INSTALLER_URL="docker://registry.rancher.com/rancher/system-agent-installer-${PRODUCT}"
201+
debug_log "skopeo list-tags ${SYS_AGENT_INSTALLER_URL} | grep ${VERSION_PREFIX} | grep ${VERSION_SUFFIX} | tee -a ${SYS_AGENT_OUTFILE}"
202+
skopeo list-tags "${SYS_AGENT_INSTALLER_URL}" | grep "${VERSION_PREFIX}" | grep "${VERSION_SUFFIX}" | tee -a "${SYS_AGENT_OUTFILE}"
203+
204+
SYS_AGENT_COUNT=$(cat "${SYS_AGENT_OUTFILE}" | wc -l)
205+
verify_count "${SYS_AGENT_COUNT}" "1" "System Agent Installer for ${PRODUCT} (in prime registry)"
206+
207+
rm -rf "${SYS_AGENT_OUTFILE}"
208+
rm -rf "${RKE2_RUNTIME_OUTFILE}"
209+
}
210+
211+
# Main script execution starts here
212+
VERSIONS=$(echo "${INPUT}" | tr "," "\n")
213+
for VERSION in $VERSIONS
214+
do
215+
echo "==========================================================================
216+
TESTING VERSION: ${VERSION}
217+
=========================================================================="
218+
if echo "${VERSION}" | grep -q "rke2"; then
219+
PRODUCT="rke2"
220+
else
221+
PRODUCT="k3s"
222+
fi
223+
224+
VERSION_PREFIX=$(echo "${VERSION}" | cut -d+ -f1)
225+
VERSION_SUFFIX=$(echo "${VERSION}" | cut -d+ -f2) # Values will be rke2r1/rke2r2/k3s1/k3s2
226+
227+
echo "Version under test: ${VERSION} ; Prefix: ${VERSION_PREFIX} Suffix: ${VERSION_SUFFIX}"
228+
229+
verify_system_agent_installers
230+
verify_upgrade_images
231+
verify_releases
232+
if [ "${PRODUCT}" = "rke2" ]; then
233+
verify_rke2_packaging
234+
verify_release_asset_count_rke2
235+
else
236+
verify_release_asset_count_k3s
237+
fi
238+
verify_prime_registry
239+
240+
echo "===================== DONE ==========================\n"
241+
done

scripts/qase-patch-validation.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ process() {
7474
QASE_TEST_PLAN_ID='14'
7575
IDENTIFIER='rke2r1'
7676
elif [ "$product" == "k3s" ]; then
77-
QASE_TEST_PLAN_ID='15'
77+
QASE_TEST_PLAN_ID='20'
7878
IDENTIFIER='k3s1'
7979
fi
8080

0 commit comments

Comments
 (0)