#!/usr/bin/env bash # bin/railiance — thin dispatcher; subcommands live in tools/cmd/* set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" PATH="${ROOT}/tools/cmd:${PATH}" usage() { cat <<'EOF' Usage: bin/railiance [args] Commands: doctor Check workstation & provisioning toolchains next Show canonical first-time sequence plan-host Provider-neutral host specs & checklist gen-ssh-key Generate SSH key and show public part cloudinit Emit minimal cloud-init user-data init-repo Idempotently furnish repo housekeeping build-spore Build a distributable "Spore" bundle seed-local Run the seed script on this machine checklist Pre-VM checklist backup Backup postgres + config to Nextcloud (age-encrypted) preflight Pre-migration safety gate (must pass before cluster work) help Show this help EOF } cmd="${1:-help}"; shift || true case "$cmd" in help) usage ;; doctor) exec railiance-doctor "$@" ;; plan-host) exec railiance-plan-host "$@" ;; gen-ssh-key) if ! command -v ssh-keygen >/dev/null 2>&1; then echo "Missing: ssh-keygen" >&2; exit 1; fi key="${HOME}/.ssh/id_ed25519" [[ -f "$key" ]] || ssh-keygen -t ed25519 -N "" -f "$key" echo "Public key:"; cat "${key}.pub" ;; cloudinit) cat "$ROOT/cloudinit/user-data.yaml" ;; init-repo) bash "$ROOT/tools/furnish_railiance_repo.sh" ;; build-spore) bash "$ROOT/tools/build_spore.sh" ;; seed-local) bash "$ROOT/tools/seed_node.sh" ;; checklist) cat <<'CK' Rent-a-VM Checklist ------------------- [ ] Provider account ready (billing set) [ ] Region chosen (low latency to you/users) [ ] Image: Ubuntu 24.04 LTS [ ] Size: 2 vCPU / 4–8 GB RAM / 60+ GB SSD [ ] SSH key uploaded (see gen-ssh-key) [ ] Cloud-init pasted (see: bin/railiance cloudinit) [ ] Hostname set (e.g., railiance-seed-1) [ ] Record public IP / DNS CK ;; next) cat "$ROOT/QUICKSTART.md" ;; backup) exec railiance-backup "$@" ;; preflight) exec railiance-preflight "$@" ;; *) echo "Unknown command: $cmd" >&2; usage; exit 2 ;; esac