fix(terraform): restore forgejo.db from the dump tarball

Boot restore was copying data/ and repos/ and leaving the sqlite file at the archive root, so a volume restore started Forgejo with no database.
This commit is contained in:
Adam Moussa 2026-09-29 18:43:22 -04:00
parent 530bd7210e
commit 907608c2f6
No known key found for this signature in database

View file

@ -114,11 +114,30 @@ if [ ! -f /var/lib/forgejo/data/forgejo.db ]; then
RESTORE_DIR="$(mktemp -d)"
aws s3 cp "s3://${BACKUP_BUCKET}/${S3_PREFIX}/${LATEST}/${FILE}" "$RESTORE_DIR/dump.tar.gz" --region "${AWS_REGION}"
tar xzf "$RESTORE_DIR/dump.tar.gz" -C "$RESTORE_DIR"
cp -a "$RESTORE_DIR"/data/. /var/lib/forgejo/data/
mkdir -p /var/lib/forgejo/data /var/lib/forgejo/custom
if [ -d "$RESTORE_DIR/data" ]; then
cp -a "$RESTORE_DIR"/data/. /var/lib/forgejo/data/
fi
rm -rf /var/lib/forgejo/data/repositories
mkdir -p /var/lib/forgejo/data/repositories
cp -a "$RESTORE_DIR"/repos/. /var/lib/forgejo/data/repositories/
if [ -d "$RESTORE_DIR/repos" ]; then
cp -a "$RESTORE_DIR"/repos/. /var/lib/forgejo/data/repositories/
fi
# Dump sqlite lives at the archive root, not under data/. Copy it last.
cp "$RESTORE_DIR/gitea-db.sqlite3" /var/lib/forgejo/data/forgejo.db
if [ -d "$RESTORE_DIR/lfs" ]; then
mkdir -p /var/lib/forgejo/data/lfs
cp -a "$RESTORE_DIR"/lfs/. /var/lib/forgejo/data/lfs/
fi
if [ -d "$RESTORE_DIR/custom" ]; then
cp -a "$RESTORE_DIR"/custom/. /var/lib/forgejo/custom/
fi
chown -R forgejo:forgejo /var/lib/forgejo
rm -rf "$RESTORE_DIR"
if [ ! -s /var/lib/forgejo/data/forgejo.db ]; then
echo "Restore did not produce /var/lib/forgejo/data/forgejo.db" >&2
exit 1
fi
else
echo "No backup found in S3 - starting fresh"
fi