#!/bin/bash # ----------------------------------------------------------------------------------------------- # --------------------------------- Git Pull & Execute Script ----------------------------------- # ----------------------------------------------------------------------------------------------- # Pulls latest scripts from Gitea repo via SSH. # Uses GITEA_SSH_KEY and SSH_PORT from Master.conf. # Supports --dry-run, --log, --status flags via common.sh parse_args. # ----------------------------------------------------------------------------------------------- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Master.conf" source "$SCRIPT_DIR/../common.sh" parse_args "$@" # ----------------------------------------------------------------------------------------------- # STATUS MODE # ----------------------------------------------------------------------------------------------- if [[ "$SHOW_STATUS" == true ]]; then echo echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " $ICON_SUMMARY GIT SYNC STATUS" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " $ICON_GEAR Repo: $REPO_SSH" echo " $ICON_GEAR Target: $TARGET_DIR" echo " $ICON_GEAR SSH Key: $GITEA_SSH_KEY" echo " $ICON_GEAR SSH Port: $SSH_PORT" echo " $ICON_INFO Dry Run: $DRY_RUN" echo " $ICON_INFO Logging: $ENABLE_LOGGING" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" exit 0 fi # ----------------------------------------------------------------------------------------------- # VALIDATION # ----------------------------------------------------------------------------------------------- require_var REPO_SSH require_var TARGET_DIR require_var GITEA_SSH_KEY require_var SSH_PORT # ----------------------------------------------------------------------------------------------- # HEADER # ----------------------------------------------------------------------------------------------- echo echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " $ICON_RUN GIT SYNC STARTING" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" info "$ICON_GEAR Repo: $REPO_SSH" info "$ICON_GEAR Target: $TARGET_DIR" info "$ICON_INFO Dry Run: $DRY_RUN" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" log "Repo: $REPO_SSH" log "Target: $TARGET_DIR" # ----------------------------------------------------------------------------------------------- # DRY RUN # ----------------------------------------------------------------------------------------------- if [[ "$DRY_RUN" == true ]]; then echo warn "Dry-run enabled — no changes will be made" info "Would sync: $REPO_SSH" info "Would target: $TARGET_DIR" echo echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " $ICON_SUMMARY GIT SYNC SUMMARY" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " $ICON_GEAR Repo: $REPO_SSH" echo " $ICON_GEAR Target: $TARGET_DIR" echo " $ICON_WARN Status: DRY RUN" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" exit 0 fi # ----------------------------------------------------------------------------------------------- # MAIN EXECUTION # ----------------------------------------------------------------------------------------------- START_TIME=$(date +%s) mkdir -p "$TARGET_DIR" cd "$TARGET_DIR" if [[ -d ".git" ]]; then info "$ICON_SYNC Existing repository detected — updating" log "git reset --hard" git reset --hard log "git clean -fd" git clean -fd info "$ICON_RUN Pulling latest changes..." if GIT_SSH_COMMAND="ssh -i $GITEA_SSH_KEY -p $SSH_PORT" git pull; then success "Git pull successful" else error "Git pull failed" exit 1 fi else info "$ICON_SYNC No repository found — cloning" if GIT_SSH_COMMAND="ssh -i $GITEA_SSH_KEY -p $SSH_PORT" git clone "$REPO_SSH" .; then success "Clone successful" else error "Clone failed" exit 1 fi fi # ----------------------------------------------------------------------------------------------- # PERMISSIONS # ----------------------------------------------------------------------------------------------- info "$ICON_GEAR Setting executable permissions..." find "$TARGET_DIR" -type f -name "*.sh" -exec chmod +x {} \; success "Permissions applied" # ----------------------------------------------------------------------------------------------- # SUMMARY # ----------------------------------------------------------------------------------------------- END_TIME=$(date +%s) DURATION=$((END_TIME - START_TIME)) echo echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " $ICON_SUMMARY GIT SYNC SUMMARY" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " $ICON_GEAR Repo: $REPO_SSH" echo " $ICON_GEAR Target: $TARGET_DIR" echo " $ICON_TIME Duration: $(format_duration $DURATION)" echo " $ICON_SUCCESS Status: SUCCESS" echo " $ICON_INFO Dry Run: $DRY_RUN" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" success "Repository sync complete"