Files
keysat-root/backup-all.sh
T
2026-06-12 17:53:55 -05:00

48 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Back up everything to Gitea:
# 1. Commit any new/changed loose files in the root repo, then push it.
# 2. Push each subproject repo's current branch to its `gitea` remote.
#
# GitHub remotes (origin) are left untouched — push those yourself as usual.
# Safe to run repeatedly: skips the root commit when there's nothing to commit,
# and skips any subrepo that has no `gitea` remote.
set -u
cd "$(dirname "$0")" || exit 1
# First connect to the LAN Gitea host shouldn't block on host-key prompts.
export GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=accept-new"
green() { printf '\033[32m%s\033[0m\n' "$1"; }
red() { printf '\033[31m%s\033[0m\n' "$1"; }
echo "=== root repo ==="
if [ -n "$(git status --porcelain)" ]; then
git add -A
git commit -q -m "Backup $(date '+%Y-%m-%d %H:%M')"
echo "committed changes"
else
echo "no changes to commit"
fi
if git push gitea HEAD >/dev/null 2>&1; then green " pushed root -> gitea"; else red " push FAILED (root)"; fi
echo
echo "=== subproject repos ==="
for d in */; do
d="${d%/}"
[ -d "$d/.git" ] || continue
if ! git -C "$d" remote get-url gitea >/dev/null 2>&1; then
echo " $d: no gitea remote, skipping"
continue
fi
branch="$(git -C "$d" symbolic-ref --short HEAD 2>/dev/null || echo HEAD)"
if git -C "$d" push gitea "$branch" >/dev/null 2>&1; then
green " $d: pushed $branch -> gitea"
else
red " $d: push FAILED ($branch)"
fi
done
echo
green "done."