Files
computer-playbook/scripts/tests/deploy/local/app.sh
T

142 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Local app test without teardown/cleanup.
# Usage:
# scripts/tests/deploy/local/app.sh <app-id>
#
# Environment variables:
# INFINITO_DISTRO arch|debian|ubuntu|fedora|centos (default from scripts/meta/env.sh)
# INVENTORY_DIR target inventory dir (default from scripts/meta/env.sh)
# LIMIT_HOST host limit (default: localhost)
# DEBUG true|false (default: true)
#
# Examples:
# scripts/tests/deploy/local/app.sh web-app-mailu
# INFINITO_DISTRO=arch DEBUG=false scripts/tests/deploy/local/app.sh web-app-nextcloud
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../../../.." && pwd)"
cd "${REPO_ROOT}"
if [[ -f "scripts/meta/env.sh" ]]; then
# shellcheck source=scripts/meta/env.sh
source "scripts/meta/env.sh"
else
echo "ERROR: missing scripts/meta/env.sh" >&2
exit 2
fi
: "${PYTHON:=python3}"
usage() {
cat <<'EOF'
Usage:
app.sh <app-id>
ENV:
INFINITO_DISTRO=<arch|debian|ubuntu|fedora|centos>
INVENTORY_DIR=<path>
LIMIT_HOST=<host-pattern>
DEBUG=<true|false>
-h, --help
EOF
}
normalize_bool() {
case "${1:-}" in
true | True | TRUE | 1) echo "true" ;;
false | False | FALSE | 0) echo "false" ;;
*)
echo "ERROR: invalid boolean value '${1:-}' (expected true|false)" >&2
exit 2
;;
esac
}
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -eq 0 ]]; then
usage
exit 0
fi
APP_ID="${1:-}"
shift
if [[ -z "${APP_ID}" ]]; then
echo "ERROR: app-id is required" >&2
usage
exit 2
fi
if [[ $# -gt 0 ]]; then
echo "ERROR: unknown argument(s): $*" >&2
echo "Pass config via ENV (INFINITO_DISTRO, INVENTORY_DIR, LIMIT_HOST, DEBUG)." >&2
usage
exit 2
fi
INFINITO_DISTRO="${INFINITO_DISTRO:-debian}"
INVENTORY_DIR="${INVENTORY_DIR:-}"
LIMIT_HOST="${LIMIT_HOST:-localhost}"
DEBUG="${DEBUG:-true}"
if [[ -z "${INVENTORY_DIR}" ]]; then
echo "ERROR: INVENTORY_DIR is empty after loading scripts/meta/env.sh" >&2
exit 2
fi
case "${INFINITO_DISTRO}" in
arch | debian | ubuntu | fedora | centos) ;;
*)
echo "ERROR: invalid distro '${INFINITO_DISTRO}'" >&2
exit 2
;;
esac
DEBUG="$(normalize_bool "${DEBUG}")"
echo "=== local app test (no cleanup) ==="
echo "app_id = ${APP_ID}"
echo "distro = ${INFINITO_DISTRO}"
echo "inventory_dir = ${INVENTORY_DIR}"
echo "limit = ${LIMIT_HOST}"
echo "debug = ${DEBUG}"
echo
echo ">>> Ensuring development stack is up (when-down)"
"${PYTHON}" -m cli.deploy.development up \
--distro "${INFINITO_DISTRO}" \
--when-down
echo ">>> Running entry.sh bootstrap inside container"
"${PYTHON}" -m cli.deploy.development exec \
--distro "${INFINITO_DISTRO}" -- \
bash -lc "set -euo pipefail; cd /opt/src/infinito; ./scripts/docker/entry.sh true"
echo ">>> Creating inventory for app '${APP_ID}'"
"${PYTHON}" -m cli.deploy.development init \
--distro "${INFINITO_DISTRO}" \
--app "${APP_ID}" \
--inventory-dir "${INVENTORY_DIR}" \
--vars '{"ASYNC_ENABLED": false}'
deploy_cmd=(
"${PYTHON}" -m cli.deploy.development deploy
--distro "${INFINITO_DISTRO}"
--app "${APP_ID}"
--inventory-dir "${INVENTORY_DIR}"
)
if [[ "${DEBUG}" == "true" ]]; then
deploy_cmd+=(--debug)
fi
# NOTE: --skip-cleanup keeps cleanup routines disabled during this local test run.
deploy_cmd+=(-- --skip-backup --skip-cleanup --limit "${LIMIT_HOST}")
echo ">>> Deploying app '${APP_ID}'"
"${deploy_cmd[@]}"
echo
echo "✅ Finished. Stack and inventory remain on disk (no teardown)."