Files
computer-playbook/scripts/ci/deploy-app.sh
T
kevinveenbirkenbach 510197cc1f ci: always keep stack on failure in deploy-app workflow
Remove KEEP_STACK env handling and always pass --keep-stack-on-failure
to deploy.sh to preserve containers and logs for debugging after failed
CI runs.

https://chatgpt.com/share/6967a413-7a24-800f-8837-514133a57072
2026-01-14 15:11:23 +01:00

90 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# SPOT: Deploy exactly ONE app across ALL distros (serial).
#
# Required env:
# APP="web-app-keycloak"
# TEST_DEPLOY_TYPE="server|workstation|universal"
# DISTROS="arch debian ubuntu fedora centos"
#
# Optional env:
# TESTED_LIFECYCLES="alpha beta rc stable"
# MISSING_ONLY="true|false"
APP="${APP:-}"
TEST_DEPLOY_TYPE="${TEST_DEPLOY_TYPE:-server}"
DISTROS="${DISTROS:-arch debian ubuntu fedora centos}"
TESTED_LIFECYCLES="${TESTED_LIFECYCLES:-alpha beta rc stable}"
MISSING_ONLY="${MISSING_ONLY:-true}"
[[ -n "${APP}" ]] || { echo "ERROR: APP is required"; exit 2; }
normalize_bool() {
case "${1:-}" in
true|True|TRUE|1) echo "true" ;;
false|False|FALSE|0) echo "false" ;;
*) echo "true" ;;
esac
}
MISSING_ONLY="$(normalize_bool "${MISSING_ONLY}")"
export TESTED_LIFECYCLES
deploy_type="${TEST_DEPLOY_TYPE}"
mkdir -p logs
read -r -a distro_arr <<< "${DISTROS}"
for distro in "${distro_arr[@]}"; do
export INFINITO_DISTRO="${distro}"
log_file="logs/deploy-${TEST_DEPLOY_TYPE}-${distro}-${APP}.log"
{
echo "=== $(date -u) ==="
echo "test_deploy_type=${TEST_DEPLOY_TYPE}"
echo "deploy_type=${deploy_type}"
echo "distro=${distro}"
echo "app=${APP}"
echo "tested_lifecycles=${TESTED_LIFECYCLES}"
echo "missing_only=${MISSING_ONLY}"
echo
echo "--- disk before ---"
df -h || true
docker system df || true
set +e
args=( --type "${deploy_type}" --app "${APP}" )
if [[ "${MISSING_ONLY}" == "true" ]]; then args+=( --missing ); fi
args+=( --keep-stack-on-failure )
scripts/tests/deploy.sh "${args[@]}"
rc=$?
set -e
echo
echo "--- disk after ---"
df -h || true
docker system df || true
if [[ $rc -eq 0 ]]; then
echo "--- cleanup (success) ---"
docker system prune -af --volumes || true
docker builder prune -af || true
else
echo "--- no cleanup (failure) ---"
fi
exit "$rc"
} 2>&1 | tee "${log_file}"
rc=${PIPESTATUS[0]}
if [[ $rc -ne 0 ]]; then
echo "FAILED: app=${APP} distro=${distro} (see ${log_file})" >&2
exit "$rc"
fi
done