maestro/scripts/migrate-config.sh
clade 7049a874f3 feat: initial public release (MAESTRO v0.1.0)
Open-source release of MAESTRO, an agent orchestration platform that runs
LLM-driven tasks through sandboxed tools, with a web UI. Apache-2.0.
See README.md and docs/ (getting-started, configuration, architecture).
2026-06-03 04:01:14 +00:00

42 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# migrate-config.sh — convert a legacy (v1) config.yaml to the v2 layout.
#
# Usage:
# scripts/migrate-config.sh # in-place rewrite of ./config.yaml
# scripts/migrate-config.sh --dry-run # print result to stdout + diff to stderr
# scripts/migrate-config.sh --config /path.yaml # operate on a different file
#
# The script delegates to the TypeScript CLI compiled at
# dist/scripts/migrate-config.js. If that file doesn't exist yet, we try
# the tsx runtime as a fallback (matches `npm run dev`'s approach), so
# the script works even before `npm run build` has run once.
#
# Exit codes mirror the Node CLI (see src/scripts/migrate-config.ts).
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
DIST_ENTRY="$PROJECT_DIR/dist/scripts/migrate-config.js"
TS_ENTRY="$PROJECT_DIR/src/scripts/migrate-config.ts"
if [[ -f "$DIST_ENTRY" ]]; then
exec node "$DIST_ENTRY" "$@"
fi
# Fallback path for pre-build environments. Prefer tsx > ts-node because
# the rest of the repo's npm scripts use tsx (see package.json:bench).
if command -v npx >/dev/null 2>&1; then
if [[ -f "$PROJECT_DIR/node_modules/tsx/dist/cli.mjs" ]] || npx --no-install tsx --version >/dev/null 2>&1; then
exec npx --no-install tsx "$TS_ENTRY" "$@"
fi
if [[ -f "$PROJECT_DIR/node_modules/ts-node/dist/bin.js" ]]; then
exec node --loader ts-node/esm "$TS_ENTRY" "$@"
fi
fi
echo "error: neither dist/scripts/migrate-config.js nor a TS runtime (tsx/ts-node) is available." >&2
echo " Run 'npm run build' first, or install tsx (npm i -D tsx)." >&2
exit 1