CI: Fix finding test script
authorJeffery To <jeffery.to@gmail.com>
Mon, 17 Jul 2023 09:02:30 +0000 (17:02 +0800)
committerJosef Schlehofer <pepe.schlehofer@gmail.com>
Sat, 2 Sep 2023 14:21:28 +0000 (16:21 +0200)
Currently, the run-test code tries to find the package source directory
based on the directory name only. This fails for the Go compiler package
because there is more than one directory named "golang".

This uses the full path listed in the "Source:" line of the control file
to find the package source directory.

This also:

* Checks for the test script earlier, to avoid installing and removing
  ipk files when there is no test script to be run

* Makes PKG_VERSION parsing more lenient, as the package may not have a
  PKG_RELEASE, e.g. attendedsysupgrade-common

Signed-off-by: Jeffery To <jeffery.to@gmail.com>
(cherry picked from commit 5422bd621836e361bcb49c427f888fe3a8df267c)

.github/workflows/entrypoint.sh

index 7587aa8b785159e4075f53cc7cc9f37414508df8..8d48d8a22e0cc36acc427156947b60430fd64a24 100755 (executable)
@@ -20,15 +20,29 @@ for PKG in /ci/*.ipk; do
        # package name including variant
        PKG_NAME=$(sed -ne 's#^Package: \(.*\)$#\1#p' ./control)
        # package version without release
-       PKG_VERSION=$(sed -ne 's#^Version: \(.*\)-[0-9]*$#\1#p' ./control)
-       # package source contianing test.sh script
-       PKG_SOURCE=$(sed -ne 's#^Source: .*/\(.*\)$#\1#p' ./control)
+       PKG_VERSION=$(sed -ne 's#^Version: \(.*\)$#\1#p' ./control)
+       PKG_VERSION="${PKG_VERSION%-[!-]*}"
+       # package source containing test.sh script
+       PKG_SOURCE=$(sed -ne 's#^Source: \(.*\)$#\1#p' ./control)
+       PKG_SOURCE="${PKG_SOURCE#/feed/}"
 
+       echo
        echo "Testing package $PKG_NAME in version $PKG_VERSION from $PKG_SOURCE"
 
-       export PKG_NAME PKG_VERSION CI_HELPER
+       if ! [ -d "/ci/$PKG_SOURCE" ]; then
+               echo "$PKG_SOURCE is not a directory"
+               exit 1
+       fi
+
+       PRE_TEST_SCRIPT="/ci/$PKG_SOURCE/pre-test.sh"
+       TEST_SCRIPT="/ci/$PKG_SOURCE/test.sh"
+
+       if ! [ -f "$TEST_SCRIPT" ]; then
+               echo "No test.sh script available"
+               continue
+       fi
 
-       PRE_TEST_SCRIPT=$(find /ci/ -name "$PKG_SOURCE" -type d)/pre-test.sh
+       export PKG_NAME PKG_VERSION CI_HELPER
 
        if [ -f "$PRE_TEST_SCRIPT" ]; then
                echo "Use package specific pre-test.sh"
@@ -44,18 +58,12 @@ for PKG in /ci/*.ipk; do
 
        opkg install "$PKG"
 
-       TEST_SCRIPT=$(find /ci/ -name "$PKG_SOURCE" -type d)/test.sh
-
-       if [ -f "$TEST_SCRIPT" ]; then
-               echo "Use package specific test.sh"
-               if sh "$TEST_SCRIPT" "$PKG_NAME" "$PKG_VERSION"; then
-                       echo "Test successful"
-               else
-                       echo "Test failed"
-                       exit 1
-               fi
+       echo "Use package specific test.sh"
+       if sh "$TEST_SCRIPT" "$PKG_NAME" "$PKG_VERSION"; then
+               echo "Test successful"
        else
-               echo "No test.sh script available"
+               echo "Test failed"
+               exit 1
        fi
 
        opkg remove "$PKG_NAME" --force-removal-of-dependent-packages --force-remove --autoremove || true