From a2e088438360ea602ae92637d7d907bb916522a9 Mon Sep 17 00:00:00 2001 From: Hane Date: Wed, 3 Jun 2026 23:04:34 +0200 Subject: [PATCH] wip: auto repo local copy via cronjob --- datamount/gitbackup/this-is-git-dir.txt | 0 orchestrating/cronjobs/README.org | 1 + .../cronjobs/forgejo-clone/forgejo-clone.sh | 57 +++++++++++++++++++ orchestrating/cronjobs/forgejo-clone/secrets | 3 + 4 files changed, 61 insertions(+) create mode 100644 datamount/gitbackup/this-is-git-dir.txt create mode 100644 orchestrating/cronjobs/README.org create mode 100755 orchestrating/cronjobs/forgejo-clone/forgejo-clone.sh create mode 100644 orchestrating/cronjobs/forgejo-clone/secrets diff --git a/datamount/gitbackup/this-is-git-dir.txt b/datamount/gitbackup/this-is-git-dir.txt new file mode 100644 index 0000000..e69de29 diff --git a/orchestrating/cronjobs/README.org b/orchestrating/cronjobs/README.org new file mode 100644 index 0000000..6f040e0 --- /dev/null +++ b/orchestrating/cronjobs/README.org @@ -0,0 +1 @@ +Make sure crond is running, and add each script to the user's crontab diff --git a/orchestrating/cronjobs/forgejo-clone/forgejo-clone.sh b/orchestrating/cronjobs/forgejo-clone/forgejo-clone.sh new file mode 100755 index 0000000..1615a87 --- /dev/null +++ b/orchestrating/cronjobs/forgejo-clone/forgejo-clone.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env sh + +. secrets +#TODO check secrets file exists + +#Retrieve token user +user_json=$(curl -s -X 'GET' \ +'https://$GIT_DOMAIN/api/v1/user' \ +-H 'accept: application/json' \ +-H "Authorization: token ${AUTH_TOKEN}") + +user_id=$(jq ".id" <(echo "$user_json")) +user_username=$(jq ".username" <(echo "$user_json")) +echo $user_username + +#Retrieve repos from user, including private repos +repo_json=$(curl -s -X 'GET' \ + "https://$GIT_DOMAIN/api/v1/repos/search?uid=${user_id}?private=true" \ + -H 'accept: application/json' \ + -H "Authorization: token ${AUTH_TOKEN}") + +#Listing only the HTTPS repo clone URL +repo_urls=$(jq ".data" <(echo "$repo_json") | jq ".[] | .html_url" | grep Hane) +echo $repo_urls +echo "----\n" + +#Cloning each repo to destdir +i=0; +finished=false; +while ! $finished +do + i=$(($i+1)); + repo=$(awk "{print \$$i}" <(echo $repo_urls)) + if [ "$repo" = "" ] + then + finished=true + else + #Retrieve repo name for folder + repo_name="$(awk -F/ '{print $5}' <(echo $repo))" + repo_name="${repo_name%\"}" + #echo $repo_name + #Remove quotes from user_username + username=${user_username%\"} + username=${username#\"} + #Clone repo + #TODO: what do if repo already exists? if it! + if [ -e "$REPO_DIR$repo_name" ] + then + echo "REPO: $repo_name" + git -C "$REPO_DIR$repo_name" fetch --all + #git -C "$REPO_DIR$repo_name" rebase --update-refs + else + git clone https://$user_username:$AUTH_TOKEN@$GIT_DOMAIN/$username/$repo_name /home/$USER/pihanepi/datamount/gitbackup/$repo_name --recurse-submodules + fi + fi +done + diff --git a/orchestrating/cronjobs/forgejo-clone/secrets b/orchestrating/cronjobs/forgejo-clone/secrets new file mode 100644 index 0000000..194b4ad --- /dev/null +++ b/orchestrating/cronjobs/forgejo-clone/secrets @@ -0,0 +1,3 @@ +REPO_DIR=/home/$USER/pihanepi/datamount/gitbackup/ +GIT_DOMAIN=git.roboces.dev +AUTH_TOKEN=