From 5422bd621836e361bcb49c427f888fe3a8df267c Mon Sep 17 00:00:00 2001 From: Jeffery To Date: Mon, 17 Jul 2023 17:02:30 +0800 Subject: [PATCH] CI: Fix finding test script 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 --- .github/workflows/entrypoint.sh | 40 ++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/.github/workflows/entrypoint.sh b/.github/workflows/entrypoint.sh index 7587aa8b78..8d48d8a22e 100755 --- a/.github/workflows/entrypoint.sh +++ b/.github/workflows/entrypoint.sh @@ -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=$(find /ci/ -name "$PKG_SOURCE" -type d)/pre-test.sh + 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 + + 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