#!/usr/bin/env bash set -euo pipefail repository_root=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) workspace_venv="$repository_root/../.venv" test_tmp=$(mktemp -d) chmod 0700 "$test_tmp" export ANSIBLE_COLLECTIONS_PATH="$test_tmp/collections" export ANSIBLE_ROLES_PATH="$(dirname "$repository_root")" inventory="$repository_root/tests/inventory" converge="$repository_root/tests/converge.yml" verify_baseline="$repository_root/tests/verify-baseline.yml" ansible_playbook="$workspace_venv/bin/ansible-playbook" baseline_args=(-e 'narratio_whisperx_transcribe_url=http://127.0.0.1:8000/transcribe') cleanup() { exit_status=$? trap - EXIT "$ansible_playbook" -i "$inventory" "${baseline_args[@]}" "$converge" >/dev/null 2>&1 || true rm -rf -- "$test_tmp" exit "$exit_status" } trap cleanup EXIT require_clean_recap() { grep -Eq 'changed=0 .*failed=0' "$1" } run_converge() { output_file=$1 shift "$ansible_playbook" -i "$inventory" "$@" "$converge" | tee "$output_file" } cd "$repository_root" "$workspace_venv/bin/ansible-galaxy" collection install \ -r collections/requirements.yml \ -p "$ANSIBLE_COLLECTIONS_PATH" "$ansible_playbook" -i "$inventory" --syntax-check "$converge" "$workspace_venv/bin/ansible-lint" "$converge" "$verify_baseline" baseline_log="$test_tmp/baseline.log" run_converge "$baseline_log" "${baseline_args[@]}" "$ansible_playbook" -i "$inventory" "$verify_baseline" baseline_repeat_log="$test_tmp/baseline-repeat.log" run_converge "$baseline_repeat_log" "${baseline_args[@]}" require_clean_recap "$baseline_repeat_log"