Yoloadd a bash -n to check bash syntax near the very beginning of the test suite to crash early if there are obvious syntax errors

This commit is contained in:
Alexandre Aubin 2024-08-31 14:22:46 +02:00
parent 56ec8ec4f0
commit dc17670f62

View file

@ -16,7 +16,21 @@ _STUFF_TO_RUN_BEFORE_INITIAL_SNAPSHOT()
# Set witness files
set_witness_files
[[ -e $package_path/manifest.toml ]] || return
[[ -e $package_path/manifest.toml ]] || log_critical "The app CI / package_check doesn't support testing packaging v1 apps anymore."
log_title "Basic bash syntax checks"
local syntax_issue=false
pushd $package_path/scripts >/dev/null
for SCRIPT in $(ls _common.sh install remove upgrade backup restore change_url config 2>/dev/null)
do
# bash -n / noexec option allows to find syntax issues without actually running the scripts
# cf https://unix.stackexchange.com/questions/597743/bash-shell-noexec-option-usage-purpose
bash -n $SCRIPT | tee -a /proc/self/fd/3 || syntax_issue=true
done
popd >/dev/null
[[ $syntax_issue == true ]] && log_report_test_success || log_critical "Obvious syntax issues found which will make the scripts crash ... not running the actual tests until these are fixed"
# We filter apt deps starting with $app_id to prevent stupid issues with for example cockpit and transmission where the apt package is not properly reinstalled on reinstall-after-remove test ...
local apt_deps=$(python3 -c "import toml, sys; t = toml.loads(sys.stdin.read()); P = t['resources'].get('apt', {}).get('packages', ''); P = P.replace(',', ' ').split() if isinstance(P, str) else P; P = [p for p in P if p != '$app_id' and not p.startswith('$app_id-')]; print(' '.join(P));" < $package_path/manifest.toml)