diff options
| author | Alex Pooley (@zuedev) <zuedev@gmail.com> | 2026-05-07 23:18:27 +0100 |
|---|---|---|
| committer | Alex Pooley (@zuedev) <zuedev@gmail.com> | 2026-05-07 23:18:27 +0100 |
| commit | 2cb9c5a451be25e3d31fa68914323e1f2ade1444 (patch) | |
| tree | e0b179179c20774d132dd941bac2b6a9e08dfaab | |
| parent | a59c578b4d65a7e2f92fbd9568b0011cf54285c4 (diff) | |
| download | git.zue.dev-2cb9c5a451be25e3d31fa68914323e1f2ade1444.tar git.zue.dev-2cb9c5a451be25e3d31fa68914323e1f2ade1444.tar.gz git.zue.dev-2cb9c5a451be25e3d31fa68914323e1f2ade1444.tar.bz2 git.zue.dev-2cb9c5a451be25e3d31fa68914323e1f2ade1444.tar.xz git.zue.dev-2cb9c5a451be25e3d31fa68914323e1f2ade1444.zip | |
add mirroring functionality
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | .gitinfo | 5 | ||||
| -rw-r--r-- | docker-compose.yaml | 1 | ||||
| -rw-r--r-- | etc/cron.d/5m | 1 | ||||
| -rw-r--r-- | scripts/push-repo-mirrors.bash | 49 |
5 files changed, 57 insertions, 2 deletions
@@ -1,2 +1,3 @@ /repositories/ -/tailscale-data/
\ No newline at end of file +/tailscale-data/ +/.secrets/
\ No newline at end of file @@ -1,5 +1,8 @@ { "$schema": "https://onedev.docker-compose.zue.dev/gitinfo/~raw/main/gitinfo.schema.json", "root": "https://git.zue.dev/git.zue.dev", - "description": "Server configuration for my git server, powered by Docker." + "description": "Server configuration for my git server, powered by Docker.", + "mirrors": [ + "https://github.com/zuedev/git.zue.dev" + ] } diff --git a/docker-compose.yaml b/docker-compose.yaml index 856487e..87dd9ad 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -8,6 +8,7 @@ services: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0kwVbA9ZdXOAuiyPeXsJ7HSujPtCIYtFPl2GdajHDT0SwsZDUMNr/p6Y9DyQjOI1zqD73ndGSOIe6EY7adB3L6ZSODvDwFlGMtP5sXE0UESOcJJdU7m4wHWieM3xal5nz1Y2BJyp2x04Ol5+kpak9A4MqUcHz29Z4ubgPG/UUWENoKZIfHXSCZfvJBO82InrvieAu/dpKzmtkXNJ9bP+fSkiNnCOVo+ZvCbIuZm8tOoQIhshzdeVhfNmdUj9LNErkoGoJ+CA13eXYlqT9B8o45E+M8lLxQr/RpzCk/3likszBzVqITB6Vkrvey8BcHhcbrs+5LYbxvb6s+1bsRHNAwO+w7SgrD3eX8AQqFKvb6xzrFji+996NWSC2hVLcKZyDvSM2p6ws4IDLFLD64IS+73SEZv2fN847j0vmqJqXYPpB/jQKuUG+rWeonkDXBfPjFrHtp75nk5bSBBDi+LQBGW52nz6/gtOWP46USV46BW2zF+YFSyw/2Ta7DMhrvXlLWuDV/CpK0FytpHjQWjHoiDfrZfiDAOu8sPIiH7hjZevHqzNJ+xOZDNqNbYqxxB1gLeK4u6xX9c4Jkk259r09tMutFACbzxxPQr3LYBKW8IrPcX1rfuE4+aZ1UysfjG/2FmKOPeWca9tVSQUK7RSThvzWDGdm0gXxI0HrPwmfZQ== zuedev volumes: - ./repositories:/repositories + - ./.secrets/github_token:/run/secrets/github_token:ro network_mode: service:tailscale depends_on: - tailscale diff --git a/etc/cron.d/5m b/etc/cron.d/5m new file mode 100644 index 0000000..7568027 --- /dev/null +++ b/etc/cron.d/5m @@ -0,0 +1 @@ +*/5 * * * * git /bin/bash /scripts/push-repo-mirrors.bash >> /home/git/.logs/push-repo-mirrors.log 2>&1 diff --git a/scripts/push-repo-mirrors.bash b/scripts/push-repo-mirrors.bash new file mode 100644 index 0000000..e25d39f --- /dev/null +++ b/scripts/push-repo-mirrors.bash @@ -0,0 +1,49 @@ +#!/bin/bash + +# This script pushes the repository mirrors to their respective remote URLs if they are defined in the .gitinfo file. + +for repository in /repositories/*; do + echo "Processing repository: $(basename "$repository")" + + cd /repositories/$(basename "$repository") + + gitinfoExists=$(git ls-tree HEAD -- .gitinfo 2>/dev/null) + + echo "gitinfoExists: $gitinfoExists" + + # does gitinfo exist? + if [ -z "$gitinfoExists" ]; then + echo "No .gitinfo found for $(basename "$repository"). Skipping." + continue + fi + + gitinfoContents=$(git cat-file -p @:.gitinfo) + + echo "gitinfoContents: $gitinfoContents" + + # extract mirrors from gitinfo (json format) + mirrors=$(echo "$gitinfoContents" | grep -oP '"mirrors":\s*\[\K[^\]]+') + + echo "Extracted mirrors: $mirrors" + + # push to each mirror + for mirror in $(echo "$mirrors" | tr ',' '\n'); do + case "$mirror" in + *github.com*) + # do we have a /run/secrets/github_token defined? + if [ ! -f /run/secrets/github_token ]; then + echo "/run/secrets/github_token not found. Skipping push to $mirror." + continue + fi + + GITHUB_TOKEN=$(cat /run/secrets/github_token) + + echo "Pushing to GitHub mirror: $mirror" + git push --mirror "https://x-access-token:$GITHUB_TOKEN@$mirror" || echo "Failed to push to $mirror" + ;; + *) + echo "Unknown mirror type: $mirror. Skipping." + ;; + esac + done +done
\ No newline at end of file |
