From 16d4fd6cbf7835583d46960f96d30b35107e9c74 Mon Sep 17 00:00:00 2001 From: merakor Date: Fri, 4 Sep 2020 10:30:13 +0000 Subject: cpt: add support for package tests FossilOrigin-Name: f257d102fe4e20da0965fd247df1c229c4fae24d5e5059704f3886ff26181247 --- src/cpt-build | 1 + src/cpt-lib | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/cpt-build b/src/cpt-build index edf59bb..d922084 100755 --- a/src/cpt-build +++ b/src/cpt-build @@ -7,6 +7,7 @@ parser_definition() { setup REST -- "usage: ${0##*/} [pkg...]" msg -- '' 'Options:' flag CPT_PROMPT -y --no-prompt on:0 init:"$CPT_PROMPT" -- "Do not prompt for confirmation" + flag CPT_TEST -t --test init:"$CPT_TEST" -- "Run tests (if it exists)" disp :usage -h --help -- "Show this help message" disp :version -v --version -- "Print version information" } diff --git a/src/cpt-lib b/src/cpt-lib index 0460fcb..6957841 100644 --- a/src/cpt-lib +++ b/src/cpt-lib @@ -677,8 +677,11 @@ pkg_depends() { [ "$pkg_build" ] && [ -z "$2" ] && (pkg_list "$1" >/dev/null) && return - # Recurse through the dependencies of the child packages. - while read -r dep _ || [ "$dep" ]; do + while read -r dep type || [ "$dep" ]; do + # Skip test dependencies unless $CPT_TEST is set to 1. + case $type in test) [ "$CPT_TEST" = 1 ] || continue; esac + + # Recurse through the dependencies of the child packages. [ "${dep##\#*}" ] && pkg_depends "$dep" done 2>/dev/null < "$(pkg_find "$1")/depends" ||: @@ -964,6 +967,19 @@ pkg_build() { kill 0 } } | tee "$log_dir/$pkg-$time-$pid" + # Run the test script if it exists and the user wants to run tests. This + # is turned off by default. + [ -x "$repo_dir/test" ] && [ "$CPT_TEST" = 1 ] && { + run_hook pre-test "$pkg" "$pkg_dir/$pkg" + log "$pkg" "Running tests" + "$repo_dir/test" "$pkg_dir/$pkg" "$build_version" "$sys_arch" 2>&1 || { + log "$pkg" "Test failed" + log "$pkg" "Log stored to $log_dir/$pkg-$time-$pid" + run_hook test-fail "$pkg" "$pkg_dir/$pkg" + pkg_clean + kill 0 + } } | tee -a "$log_dir/$pkg-$time-$pid" + # Delete the log file if the build succeeded to prevent # the directory from filling very quickly with useless logs. [ "$CPT_KEEPLOG" = 1 ] || rm -f "$log_dir/$pkg-$time-$pid" -- cgit v1.2.3