mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-10 04:36:40 +00:00
142 lines
3.4 KiB
Bash
Executable File
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)."
|