Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124#!/usr/bin/env fish## Deploys Datomic transactor config, postgres init, and backup script to silo.## Does NOT install JVM/Postgres/Datomic jar itself — those are one-time## operator steps (see silo/datomic/README.md bring-up section).#### Usage:## fish deploy.fish Full deploy (config + systemd + cron)## fish deploy.fish --config Config only (no systemd reload, no restart)
set RED '\033[0;31m'set GREEN '\033[0;32m'set YELLOW '\033[1;33m'set NC '\033[0m'
set SCRIPT_DIR (dirname (status --current-filename))set VAULT_DIR "$SCRIPT_DIR/../../aesthetic-computer-vault"set SSH_KEY "$VAULT_DIR/home/.ssh/id_rsa"set TRANSACTOR_PROPS_GPG "$VAULT_DIR/kidlisp-datomic/transactor.properties.gpg"set POSTGRES_ENV_GPG "$VAULT_DIR/kidlisp-datomic/postgres.env.gpg"set SILO_HOST "silo.aesthetic.computer"set SILO_USER "root"set REMOTE_OPT "/opt/datomic"
set CONFIG_ONLY falseif contains -- --config $argv set CONFIG_ONLY trueend
## Prereq checksif not test -f $SSH_KEY echo -e "$RED x SSH key not found: $SSH_KEY$NC" exit 1end
for f in $TRANSACTOR_PROPS_GPG $POSTGRES_ENV_GPG if not test -f $f echo -e "$RED x Vault file missing: $f$NC" echo -e "$YELLOW Populate via vault workflow before deploying.$NC" exit 1 endend
echo -e "$GREEN-> Testing SSH to $SILO_HOST...$NC"if not ssh -i $SSH_KEY -o StrictHostKeyChecking=no -o ConnectTimeout=10 \ $SILO_USER@$SILO_HOST "echo ok" &>/dev/null echo -e "$RED x Cannot connect to $SILO_HOST$NC" exit 1end
## Render transactor.properties from template + vault values in-memory.## Secrets never touch disk on the dev machine — decrypted into /dev/shm,## scp'd to silo, then shredded.set TPL "$SCRIPT_DIR/transactor/transactor.properties.template"set TMP_DIR (mktemp -d /dev/shm/datomic-render-XXXXXX)set RENDERED "$TMP_DIR/transactor.properties"set DECRYPTED_TRANSACTOR "$TMP_DIR/transactor.values"
## Decrypt transactor.properties valuesgpg --decrypt --quiet --output $DECRYPTED_TRANSACTOR $TRANSACTOR_PROPS_GPGif test $status -ne 0 echo -e "$RED x Failed to decrypt $TRANSACTOR_PROPS_GPG$NC" shred -u $DECRYPTED_TRANSACTOR 2>/dev/null rmdir $TMP_DIR exit 1end
## Source values into current fish env (isolated subshell vars)set -l POSTGRES_USER (grep '^POSTGRES_USER=' $DECRYPTED_TRANSACTOR | cut -d= -f2-)set -l POSTGRES_PASSWORD (grep '^POSTGRES_PASSWORD=' $DECRYPTED_TRANSACTOR | cut -d= -f2-)set -l STORAGE_ACCESS_SECRET (grep '^STORAGE_ACCESS_SECRET=' $DECRYPTED_TRANSACTOR | cut -d= -f2-)
## Substitute placeholderssed -e "s|{{POSTGRES_USER}}|$POSTGRES_USER|g" \ -e "s|{{POSTGRES_PASSWORD}}|$POSTGRES_PASSWORD|g" \ -e "s|{{STORAGE_ACCESS_SECRET}}|$STORAGE_ACCESS_SECRET|g" \ $TPL > $RENDERED
echo -e "$GREEN-> Uploading rendered transactor.properties...$NC"scp -i $SSH_KEY -o StrictHostKeyChecking=no \ $RENDERED \ $SILO_USER@$SILO_HOST:/opt/datomic/config/transactor.propertiesssh -i $SSH_KEY $SILO_USER@$SILO_HOST \ "chown datomic:datomic /opt/datomic/config/transactor.properties; chmod 0600 /opt/datomic/config/transactor.properties"
## Shred plaintext (including sed's temp file if any)shred -u $RENDERED $DECRYPTED_TRANSACTOR 2>/dev/nullrmdir $TMP_DIR
## Upload non-secret filesecho -e "$GREEN-> Uploading systemd unit, init.sql, backup.fish, cron...$NC"scp -i $SSH_KEY -o StrictHostKeyChecking=no \ $SCRIPT_DIR/transactor/datomic-transactor.service \ $SILO_USER@$SILO_HOST:/etc/systemd/system/datomic-transactor.service
scp -i $SSH_KEY -o StrictHostKeyChecking=no \ $SCRIPT_DIR/postgres/init.sql \ $SCRIPT_DIR/postgres/backup.fish \ $SILO_USER@$SILO_HOST:$REMOTE_OPT/
scp -i $SSH_KEY -o StrictHostKeyChecking=no \ $SCRIPT_DIR/backup.cron \ $SILO_USER@$SILO_HOST:/etc/cron.d/datomic-backup
if test $CONFIG_ONLY = false ssh -i $SSH_KEY $SILO_USER@$SILO_HOST " chmod +x $REMOTE_OPT/backup.fish chmod 0644 /etc/cron.d/datomic-backup systemctl daemon-reload systemctl restart datomic-transactor sleep 2 systemctl is-active datomic-transactor " set STATUS $status if test $STATUS -eq 0 echo -e "$GREEN Transactor restarted OK.$NC" else echo -e "$RED x Transactor failed to start. Check:$NC" echo -e "$YELLOW ssh -i $SSH_KEY $SILO_USER@$SILO_HOST journalctl -u datomic-transactor -n 50$NC" exit 1 endend
echo -e "$GREEN Done.$NC"