Files
docs/operations/reference/bash/git-repo-updater.md
Nicole Rappe 886fd0db07
All checks were successful
GitOps Automatic Documentation Deployment / Sync Docs to https://kb.bunny-lab.io (push) Successful in 4s
GitOps Automatic Documentation Deployment / Sync Docs to https://docs.bunny-lab.io (push) Successful in 6s
Additional Doc Restructure
2026-01-27 05:57:50 -07:00

2.2 KiB

Git Repo Updater (Script)

Purpose

Standalone repo_watcher.sh script used by the Git Repo Updater container. This script clones or pulls one or more repositories and rsyncs them into destination paths.

For the containerized version and deployment details, see the Git Repo Updater container doc.

Script

#!/bin/sh

# Function to process each repo-destination pair
process_repo() {
    FULL_REPO_URL=$1
    DESTINATION=$2

    # Extract the URL without credentials for logging and notifications
    CLEAN_REPO_URL=$(echo "$FULL_REPO_URL" | sed 's/https:\/\/[^@]*@/https:\/\//')

    # Directory to hold the repository locally
    REPO_DIR="/root/Repo_Cache/$(basename $CLEAN_REPO_URL .git)"

    # Clone the repo if it doesn't exist, or navigate to it if it does
    if [ ! -d "$REPO_DIR" ]; then
        curl -d "Cloning: $CLEAN_REPO_URL" $NTFY_URL
        git clone "$FULL_REPO_URL" "$REPO_DIR" > /dev/null 2>&1
    fi
    cd "$REPO_DIR" || exit

    # Fetch the latest changes
    git fetch origin main > /dev/null 2>&1

    # Check if the local repository is behind the remote
    LOCAL=$(git rev-parse @)
    REMOTE=$(git rev-parse @{u})

    if [ "$LOCAL" != "$REMOTE" ]; then
        curl -d "Updating: $CLEAN_REPO_URL" $NTFY_URL
        git pull origin main > /dev/null 2>&1
        rsync -av --delete --exclude '.git/' ./ "$DESTINATION" > /dev/null 2>&1
    fi
}

# Main loop
while true; do
    # Iterate over each environment variable matching 'REPO_[0-9]+'
    env | grep '^REPO_[0-9]\+=' | while IFS='=' read -r name value; do
        # Split the value by comma and read into separate variables
        OLD_IFS="$IFS"          # Save the original IFS
        IFS=','                 # Set IFS to comma for splitting
        set -- $value           # Set positional parameters ($1, $2, ...)
        REPO_URL="$1"           # Assign first parameter to REPO_URL
        DESTINATION="$2"        # Assign second parameter to DESTINATION
        IFS="$OLD_IFS"          # Restore original IFS

        process_repo "$REPO_URL" "$DESTINATION"
    done

    # Wait for 5 seconds before the next iteration
    sleep 5
done