#!/usr/bin/env bash # Deploy Madagascar Local Authority application code to jumper. set -euo pipefail TARGET_HOST="${TARGET_HOST:-jumper.madagascar.xdev.ro}" TARGET_DIR="${TARGET_DIR:-/usr/local/xdev-host-manager}" RESTART=1 ALLOW_DIRTY=0 DRY_RUN=0 INCLUDE_CONFIG=0 usage() { cat <&2 usage >&2 exit 2 ;; esac done cd "$(dirname "$0")/.." if [[ "$ALLOW_DIRTY" -ne 1 ]] && [[ -n "$(git status --porcelain)" ]]; then echo "Working tree is dirty; commit first or pass --allow-dirty." >&2 git status --short >&2 exit 1 fi command -v rsync >/dev/null 2>&1 || { echo "rsync is required for deployment." >&2 exit 1 } ssh "$TARGET_HOST" "command -v rsync >/dev/null 2>&1" || { echo "rsync is required on $TARGET_HOST." >&2 exit 1 } perl -c scripts/host_manager.pl >/dev/null rsync_args=(-az --delete) if [[ "$DRY_RUN" -eq 1 ]]; then rsync_args+=(--dry-run --itemize-changes) fi ssh "$TARGET_HOST" "mkdir -p '$TARGET_DIR/scripts' '$TARGET_DIR/deploy' '$TARGET_DIR/.doc'" rsync "${rsync_args[@]}" scripts/ "$TARGET_HOST:$TARGET_DIR/scripts/" rsync "${rsync_args[@]}" deploy/ "$TARGET_HOST:$TARGET_DIR/deploy/" rsync "${rsync_args[@]}" .doc/ "$TARGET_HOST:$TARGET_DIR/.doc/" rsync "${rsync_args[@]}" README.md "$TARGET_HOST:$TARGET_DIR/README.md" if [[ "$INCLUDE_CONFIG" -eq 1 ]]; then ssh "$TARGET_HOST" "mkdir -p '$TARGET_DIR/config'" rsync "${rsync_args[@]}" config/ "$TARGET_HOST:$TARGET_DIR/config/" fi if [[ "$DRY_RUN" -eq 1 ]]; then exit 0 fi ssh "$TARGET_HOST" "cd '$TARGET_DIR' && perl -c scripts/host_manager.pl >/dev/null" if [[ "$RESTART" -eq 1 ]]; then ssh "$TARGET_HOST" "sudo -n systemctl restart host-manager && systemctl is-active host-manager >/dev/null" fi ssh "$TARGET_HOST" "curl -fsS http://127.0.0.1:8088/healthz >/dev/null" echo "Deployed to $TARGET_HOST:$TARGET_DIR"