The deploy script now builds the CLI binary and copies it to /usr/local/bin. SSH passes commands as `toes -c "command args"`, so parse that form before falling through to the interactive shell or normal arg handling.
71 lines
2.0 KiB
Bash
Executable File
71 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
# Get absolute path of this script's directory
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
ROOT_DIR="$SCRIPT_DIR/.."
|
|
|
|
# Load config
|
|
source "$ROOT_DIR/scripts/config.sh"
|
|
|
|
git push origin main
|
|
|
|
# SSH to target: pull, build, sync apps, restart
|
|
ssh "$SSH_HOST" bash <<'SCRIPT'
|
|
set -e
|
|
|
|
DEST="${DEST:-$HOME/toes}"
|
|
APPS_DIR="${APPS_DIR:-$HOME/apps}"
|
|
DATA_DIR="${DATA_DIR:-$HOME/data}"
|
|
REPOS_DIR="$DATA_DIR/repos"
|
|
|
|
cd "$DEST" && git checkout -- bun.lock && git pull origin main && bun install && rm -rf dist && bun run build && bun run cli:build && sudo cp dist/toes /usr/local/bin/toes
|
|
|
|
echo "=> Syncing default apps..."
|
|
for app_dir in "$DEST"/apps/*/; do
|
|
app=$(basename "$app_dir")
|
|
[ -f "$app_dir/package.json" ] || continue
|
|
target="$APPS_DIR/$app"
|
|
mkdir -p "$target"
|
|
cp -a "$app_dir"/. "$target"/
|
|
echo " $app"
|
|
(cd "$target" && bun install --frozen-lockfile 2>/dev/null || bun install)
|
|
done
|
|
|
|
echo "=> Initializing bare repos..."
|
|
mkdir -p "$REPOS_DIR"
|
|
for app_dir in "$DEST"/apps/*/; do
|
|
app=$(basename "$app_dir")
|
|
[ -f "$app_dir/package.json" ] || continue
|
|
bare="$REPOS_DIR/$app.git"
|
|
|
|
if [ ! -d "$bare" ]; then
|
|
git init --bare -b main "$bare" > /dev/null
|
|
git -C "$bare" config http.receivepack true
|
|
fi
|
|
|
|
tmp=$(mktemp -d)
|
|
cp -a "$app_dir"/. "$tmp"/
|
|
git -C "$tmp" init -b main > /dev/null 2>&1
|
|
git -C "$tmp" add -A > /dev/null
|
|
git -C "$tmp" -c user.name=toes -c user.email=toes@localhost commit -m "deploy" > /dev/null 2>&1
|
|
git -C "$tmp" push --force "$bare" main > /dev/null 2>&1
|
|
rm -rf "$tmp"
|
|
echo " $app"
|
|
done
|
|
|
|
sudo systemctl restart toes.service
|
|
SCRIPT
|
|
|
|
b=$'\033[1m' d=$'\033[2m' g=$'\033[32m' c=$'\033[36m' r=$'\033[0m'
|
|
|
|
echo ""
|
|
echo " ${b}${g}🐾 Deployed${r} to ${b}$SSH_HOST${r}"
|
|
echo " ${d}─────────────────────────────${r}"
|
|
echo ""
|
|
echo " Dashboard: ${c}$URL${r}"
|
|
echo ""
|
|
echo " ${d}Grab the CLI:${r}"
|
|
echo " ${c}curl -fsSL $URL/install | bash${r}"
|
|
echo ""
|