#!/usr/bin/env bash set -euo pipefail usage() { cat <<'EOF' Usage: start-atvm-run-watcher.sh --build-name [options] Options: --build-name --template --template-command --runner-command --config-family --config-file --migration-style --integration-plugin --extra-option Repeatable --scope-description --categorize --state-root Default: /var/lib/atvm-run-watcher EOF } BUILD_NAME="" TEMPLATE="" TEMPLATE_COMMAND="" RUNNER_COMMAND="" CONFIG_FAMILY="" CONFIG_FILE="" MIGRATION_STYLE="" INTEGRATION_PLUGIN="" EXTRA_OPTIONS=() SCOPE_DESCRIPTION="" WATCHER_CATEGORIZED="false" STATE_ROOT="/var/lib/atvm-run-watcher" while [[ $# -gt 0 ]]; do case "$1" in --build-name) BUILD_NAME="${2:-}"; shift 2 ;; --template) TEMPLATE="${2:-}"; shift 2 ;; --template-command) TEMPLATE_COMMAND="${2:-}"; shift 2 ;; --runner-command) RUNNER_COMMAND="${2:-}"; shift 2 ;; --config-family) CONFIG_FAMILY="${2:-}"; shift 2 ;; --config-file) CONFIG_FILE="${2:-}"; shift 2 ;; --migration-style) MIGRATION_STYLE="${2:-}"; shift 2 ;; --integration-plugin) INTEGRATION_PLUGIN="${2:-}"; shift 2 ;; --extra-option) EXTRA_OPTIONS+=("${2:-}"); shift 2 ;; --scope-description) SCOPE_DESCRIPTION="${2:-}"; shift 2 ;; --categorize) WATCHER_CATEGORIZED="true"; shift ;; --state-root) STATE_ROOT="${2:-}"; shift 2 ;; -h|--help) usage; exit 0 ;; *) echo "Unknown argument: $1" >&2; usage >&2; exit 1 ;; esac done if [[ -z "$BUILD_NAME" ]]; then echo "--build-name is required" >&2 usage >&2 exit 1 fi RUN_DIR="${STATE_ROOT}/${BUILD_NAME}" RUN_LOG="/tmp/${BUILD_NAME}.log" systemctl stop "atvm-run-watcher@${BUILD_NAME}.service" >/dev/null 2>&1 || true rm -rf "$RUN_DIR" rm -f "$RUN_LOG" mkdir -p "$RUN_DIR" EXTRA_OPTIONS_JSON=$(python3 - <<'PY' "${EXTRA_OPTIONS[@]}" import json import sys print(json.dumps(sys.argv[1:])) PY ) cat >"${RUN_DIR}/watch.env" <