git repo backup
This commit is contained in:
parent
31bb2c0147
commit
6b46bc4bc2
1 changed files with 34 additions and 2 deletions
|
|
@ -23,13 +23,45 @@
|
||||||
services."backup-rclone" =
|
services."backup-rclone" =
|
||||||
let
|
let
|
||||||
conf = config.age.secrets.roam-rclone-conf.path;
|
conf = config.age.secrets.roam-rclone-conf.path;
|
||||||
|
forgejo-repos = config.services.forgejo.repositoryRoot;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
# Backs up git repos (bare /git/* and forgejo) to an rclone crypt remote
|
||||||
|
# as bundles to avoid crypt path-length limits. Documents are synced to
|
||||||
|
# OneDrive directly (not odc) since syncthing already encrypts them via
|
||||||
|
# receiveEncrypted.
|
||||||
script = ''
|
script = ''
|
||||||
${pkgs.rclone}/bin/rclone --config ${conf} copy /data/sync/documents-hd onedrive:sync
|
${pkgs.rclone}/bin/rclone --config ${conf} copy /data/sync/documents-hd onedrive:sync
|
||||||
${pkgs.rclone}/bin/rclone --config ${conf} copy /git odc:git
|
|
||||||
|
tmpdir=$(mktemp -d)
|
||||||
|
trap "rm -rf $tmpdir" EXIT
|
||||||
|
|
||||||
|
for repo in /git/*/; do
|
||||||
|
[ -f "$repo/HEAD" ] || continue
|
||||||
|
${pkgs.git}/bin/git -c safe.directory="$repo" -C "$repo" show-ref --quiet || continue
|
||||||
|
name=$(basename "$repo")
|
||||||
|
${pkgs.git}/bin/git -c safe.directory="$repo" -C "$repo" bundle create "$tmpdir/$name.bundle" --all
|
||||||
|
done
|
||||||
|
${pkgs.rclone}/bin/rclone --config ${conf} sync "$tmpdir" odc:git
|
||||||
|
|
||||||
|
tmpdir_forgejo=$(mktemp -d)
|
||||||
|
trap "rm -rf $tmpdir_forgejo" EXIT
|
||||||
|
|
||||||
|
for owner in ${forgejo-repos}/*/; do
|
||||||
|
for repo in "$owner"*/; do
|
||||||
|
[ -f "$repo/HEAD" ] || continue
|
||||||
|
${pkgs.git}/bin/git -c safe.directory="$repo" -C "$repo" show-ref --quiet || continue
|
||||||
|
owner_name=$(basename "$owner")
|
||||||
|
repo_name=$(basename "$repo")
|
||||||
|
${pkgs.git}/bin/git -c safe.directory="$repo" -C "$repo" bundle create "$tmpdir_forgejo/''${owner_name}__''${repo_name}.bundle" --all
|
||||||
|
done
|
||||||
|
done
|
||||||
|
${pkgs.rclone}/bin/rclone --config ${conf} sync "$tmpdir_forgejo" odc:forgejo-git
|
||||||
'';
|
'';
|
||||||
path = [ pkgs.rclone ];
|
path = [
|
||||||
|
pkgs.rclone
|
||||||
|
pkgs.git
|
||||||
|
];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
User = "root";
|
User = "root";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue