Skip to content

Commit fa95e6a

Browse files
committed
multi-arch-test-build: add generic version tests
Colorize output using ci_helpers.sh Signed-off-by: George Sapkin <george@sapk.in>
1 parent f44fb50 commit fa95e6a

File tree

1 file changed

+74
-20
lines changed

1 file changed

+74
-20
lines changed

.github/scripts/test_entrypoint.sh

Lines changed: 74 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@ mkdir -p /var/log/
99

1010
if [ $PKG_MANAGER = "opkg" ]; then
1111
opkg update
12+
1213
elif [ $PKG_MANAGER = "apk" ]; then
1314
apk update
1415
fi
1516

1617
CI_HELPERS="${CI_HELPERS:-/scripts/ci_helpers.sh}"
1718

19+
source "$CI_HELPERS"
20+
1821
for PKG in /ci/*.[ai]pk; do
1922
if [ $PKG_MANAGER = "opkg" ]; then
2023
tar -xzOf "$PKG" ./control.tar.gz | tar xzf - ./control
@@ -26,6 +29,7 @@ for PKG in /ci/*.[ai]pk; do
2629
# package source containing test.sh script
2730
PKG_SOURCE=$(sed -ne 's#^Source: \(.*\)$#\1#p' ./control)
2831
PKG_SOURCE="${PKG_SOURCE#/feed/}"
32+
2933
elif [ $PKG_MANAGER = "apk" ]; then
3034
# package name including variant
3135
PKG_NAME=$(apk adbdump --format json "$PKG" | jsonfilter -e '@["info"]["name"]')
@@ -38,33 +42,27 @@ for PKG in /ci/*.[ai]pk; do
3842
fi
3943

4044
echo
41-
echo "Testing package $PKG_NAME in version $PKG_VERSION from $PKG_SOURCE"
45+
info "Testing package $PKG_NAME with version $PKG_VERSION from $PKG_SOURCE"
4246

4347
if ! [ -d "/ci/$PKG_SOURCE" ]; then
44-
echo "$PKG_SOURCE is not a directory"
45-
exit 1
48+
err_die "$PKG_SOURCE is not a directory"
4649
fi
4750

4851
PRE_TEST_SCRIPT="/ci/$PKG_SOURCE/pre-test.sh"
4952
TEST_SCRIPT="/ci/$PKG_SOURCE/test.sh"
5053

51-
if ! [ -f "$TEST_SCRIPT" ]; then
52-
echo "No test.sh script available"
53-
continue
54-
fi
55-
5654
export PKG_NAME PKG_VERSION CI_HELPERS
5755

5856
if [ -f "$PRE_TEST_SCRIPT" ]; then
59-
echo "Use package specific pre-test.sh"
57+
info "Use the package-specific pre-test.sh"
6058
if sh "$PRE_TEST_SCRIPT" "$PKG_NAME" "$PKG_VERSION"; then
61-
echo "Pre-test successful"
59+
success "Pre-test successful"
6260
else
63-
echo "Pre-test failed"
64-
exit 1
61+
err_die "Pre-test failed"
6562
fi
63+
6664
else
67-
echo "No pre-test.sh script available"
65+
info "No pre-test.sh script available"
6866
fi
6967

7068
if [ $PKG_MANAGER = "opkg" ]; then
@@ -73,17 +71,73 @@ for PKG in /ci/*.[ai]pk; do
7371
apk add --allow-untrusted "$PKG"
7472
fi
7573

76-
echo "Use package specific test.sh"
77-
if sh "$TEST_SCRIPT" "$PKG_NAME" "$PKG_VERSION"; then
78-
echo "Test successful"
74+
SUCCESS=0
75+
if [ -f "$TEST_SCRIPT" ]; then
76+
info "Use the package-specific test.sh"
77+
if sh "$TEST_SCRIPT" "$PKG_NAME" "$PKG_VERSION"; then
78+
success "Test successful"
79+
SUCCESS=1
80+
else
81+
err "Test failed"
82+
fi
83+
7984
else
80-
echo "Test failed"
81-
exit 1
85+
warn "Use a generic test"
86+
87+
if [ $PKG_MANAGER = "opkg" ]; then
88+
PKG_FILES=$(opkg files "$PKG_NAME" | grep -E "^(/bin/|/sbin/|/usr/bin/|/usr/libexec/|/usr/sbin/)" || true)
89+
elif [ $PKG_MANAGER = "apk" ]; then
90+
PKG_FILES=$(apk info --contents "$PKG_NAME" | grep -E "^(bin/|sbin/|usr/bin/|usr/libexec/|usr/sbin/)" || true)
91+
fi
92+
93+
if [ -z "$PKG_FILES" ]; then
94+
success "No executables found in $PKG_NAME"
95+
SUCCESS=1
96+
else
97+
FOUND_EXEC=0
98+
for FILE in $PKG_FILES; do
99+
# apk info --contents does not have a leading /
100+
if [ $PKG_MANAGER = "apk" ]; then
101+
FILE="/$FILE"
102+
fi
103+
104+
if [ ! -f "$FILE" ] || [ ! -x "$FILE" ]; then
105+
continue
106+
fi
107+
108+
FOUND_EXEC=1
109+
info "Test executable $FILE and look for $PKG_VERSION"
110+
for V in --version -version version -v -V --help -help -?; do
111+
info "Trying $V"
112+
if "$FILE" "$V" 2>&1 | grep -F "$PKG_VERSION"; then
113+
SUCCESS=1
114+
break 2
115+
fi
116+
done
117+
done
118+
119+
if [ "$FOUND_EXEC" = 1 ]; then
120+
if [ "$SUCCESS" = 1 ]; then
121+
success "Test successful"
122+
else
123+
err "Test failed"
124+
fi
125+
else
126+
success "No executables found in $PKG_NAME"
127+
SUCCESS=1
128+
fi
129+
fi
82130
fi
83131

84132
if [ $PKG_MANAGER = "opkg" ]; then
85-
opkg remove "$PKG_NAME" --force-removal-of-dependent-packages --force-remove --autoremove || true
133+
opkg remove "$PKG_NAME" \
134+
--autoremove \
135+
--force-removal-of-dependent-packages \
136+
--force-remove \
137+
|| true
86138
elif [ $PKG_MANAGER = "apk" ]; then
87-
apk del -r "$PKG_NAME"
139+
apk del --rdepends "$PKG_NAME" || true
88140
fi
141+
142+
[ "$SUCCESS" = 1 ] || exit 1
89143
done

0 commit comments

Comments
 (0)