@@ -9,12 +9,15 @@ mkdir -p /var/log/
99
1010if [ $PKG_MANAGER = " opkg" ]; then
1111 opkg update
12+
1213elif [ $PKG_MANAGER = " apk" ]; then
1314 apk update
1415fi
1516
1617CI_HELPERS=" ${CI_HELPERS:-/ scripts/ ci_helpers.sh} "
1718
19+ source " $CI_HELPERS "
20+
1821for 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
89143done
0 commit comments