mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-16 09:26:58 +02:00
Merge pull request #760 from flatcar/krnowak/bash-escape-parameters
ci-automation: Properly escape parameters passed to bash
This commit is contained in:
commit
dbe64c0131
@ -114,6 +114,21 @@ function __prepare_torcx() {
|
|||||||
}
|
}
|
||||||
# --
|
# --
|
||||||
|
|
||||||
|
function __escape_multiple() {
|
||||||
|
local out_array_arg_name="${1}"; shift
|
||||||
|
# rest are args to be escape and appended into the array named
|
||||||
|
# after the first arg
|
||||||
|
local -n out_array_arg_ref="${out_array_arg_name}"
|
||||||
|
local arg arg_escaped
|
||||||
|
|
||||||
|
out_array_arg_ref=()
|
||||||
|
for arg; do
|
||||||
|
printf -v arg_escaped '%q' "${arg}"
|
||||||
|
out_array_arg_ref+=( "${arg_escaped}" )
|
||||||
|
done
|
||||||
|
}
|
||||||
|
# --
|
||||||
|
|
||||||
function test_run() {
|
function test_run() {
|
||||||
# Run a subshell, so the traps, environment changes and global
|
# Run a subshell, so the traps, environment changes and global
|
||||||
# variables are not spilled into the caller.
|
# variables are not spilled into the caller.
|
||||||
@ -173,11 +188,27 @@ function _test_run_impl() {
|
|||||||
# A job on each worker prunes old mantle images (docker image prune)
|
# A job on each worker prunes old mantle images (docker image prune)
|
||||||
echo "docker rm -f '${container_name}'" >> ./ci-cleanup.sh
|
echo "docker rm -f '${container_name}'" >> ./ci-cleanup.sh
|
||||||
|
|
||||||
|
local image_escaped
|
||||||
|
printf -v image_escaped '%q' "${image}"
|
||||||
|
local common_test_args=(
|
||||||
|
"${work_dir}"
|
||||||
|
"${tests_dir}"
|
||||||
|
"${arch}"
|
||||||
|
"${vernum}"
|
||||||
|
)
|
||||||
|
local common_test_args_escaped=()
|
||||||
|
__escape_multiple common_test_args_escaped "${common_test_args[@]}"
|
||||||
|
|
||||||
|
local tests_escaped=()
|
||||||
|
__escape_multiple tests_escaped "${@}"
|
||||||
|
|
||||||
# Vendor tests may need to know if it is a first run or a rerun
|
# Vendor tests may need to know if it is a first run or a rerun
|
||||||
touch "${work_dir}/first_run"
|
touch "${work_dir}/first_run"
|
||||||
for retry in $(seq "${retries}"); do
|
for retry in $(seq "${retries}"); do
|
||||||
local tapfile="results-run-${retry}.tap"
|
local tapfile="results-run-${retry}.tap"
|
||||||
local failfile="failed-run-${retry}.txt"
|
local failfile="failed-run-${retry}.txt"
|
||||||
|
local tapfile_escaped
|
||||||
|
printf -v tapfile_escaped '%q' "${tapfile}"
|
||||||
|
|
||||||
# Ignore retcode since tests are flaky. We'll re-run failed tests and
|
# Ignore retcode since tests are flaky. We'll re-run failed tests and
|
||||||
# determine success based on test results (tapfile).
|
# determine success based on test results (tapfile).
|
||||||
@ -185,13 +216,9 @@ function _test_run_impl() {
|
|||||||
touch sdk_container/.env
|
touch sdk_container/.env
|
||||||
docker run --pull always --rm --name="${container_name}" --privileged --net host -v /dev:/dev \
|
docker run --pull always --rm --name="${container_name}" --privileged --net host -v /dev:/dev \
|
||||||
-w /work -v "$PWD":/work "${mantle_ref}" \
|
-w /work -v "$PWD":/work "${mantle_ref}" \
|
||||||
bash -c "set -o noglob && git config --global --add safe.directory /work && source sdk_container/.env && ci-automation/vendor-testing/${image}.sh \
|
bash -c "git config --global --add safe.directory /work && \
|
||||||
\"${work_dir}\" \
|
source sdk_container/.env && \
|
||||||
\"${tests_dir}\" \
|
ci-automation/vendor-testing/${image_escaped}.sh ${common_test_args_escaped[*]} ${tapfile_escaped} ${tests_escaped[*]}"
|
||||||
\"${arch}\" \
|
|
||||||
\"${vernum}\" \
|
|
||||||
\"${tapfile}\" \
|
|
||||||
$*"
|
|
||||||
set -e
|
set -e
|
||||||
rm -f "${work_dir}/first_run"
|
rm -f "${work_dir}/first_run"
|
||||||
|
|
||||||
@ -226,10 +253,9 @@ function _test_run_impl() {
|
|||||||
echo "Failed tests:"
|
echo "Failed tests:"
|
||||||
printf '%s\n' "${failed_tests[@]}"
|
printf '%s\n' "${failed_tests[@]}"
|
||||||
echo "-----------"
|
echo "-----------"
|
||||||
set -- "${failed_tests[@]}"
|
__escape_multiple tests_escaped "${failed_tests[@]}"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
if ${print_give_up}; then
|
if ${print_give_up}; then
|
||||||
echo "########### All re-runs exhausted ($retries). Giving up. ###########"
|
echo "########### All re-runs exhausted ($retries). Giving up. ###########"
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user