Move configuration into the unit file
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Configuration (Customize these!)
|
||||
REPO_URLS="/opt/src/repository.list"
|
||||
REPO_LOCAL_PATH="/opt/src"
|
||||
BRANCH_NAME="develop"
|
||||
POLL_INTERVAL=60 # Seconds between checks
|
||||
#LOG_FILE="/var/log/git-monitor.log" # Log file for recording actions
|
||||
LOCK_FILE="/run/lock/git-monitor.lock" # File to prevent multiple instances
|
||||
# Configuration
|
||||
[[ "x${GITMONITOR_URLS}" == "x" ]] && GITMONITOR_URLS="/opt/src/repository.list"
|
||||
[[ "x${GITMONITOR_LOCAL_PATH}" == "x" ]] && GITMONITOR_LOCAL_PATH="/opt/src"
|
||||
[[ "x${GITMONITOR_BRANCH_NAME}" == "x" ]] && GITMONITOR_BRANCH_NAME="develop"
|
||||
[[ "x${GITMONITOR_POLL_INTERVAL}" == "x" ]] && GITMONITOR_POLL_INTERVAL=60 # Seconds between checks
|
||||
[[ "x${GITMONITOR_LOCK_FILE}" == "x" ]] && GITMONITOR_LOCK_FILE="/run/lock/git-monitor.lock" # File to prevent multiple instances
|
||||
|
||||
IFS="|"
|
||||
|
||||
# Functions
|
||||
@@ -19,14 +19,14 @@ log_message() {
|
||||
}
|
||||
|
||||
check_lock() {
|
||||
if [ -f "$LOCK_FILE" ]; then
|
||||
if [ -f "$GITMONITOR_LOCK_FILE" ]; then
|
||||
log_message "WARN" "Another instance is already running. Exiting."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
create_lock() {
|
||||
touch "$LOCK_FILE"
|
||||
touch "$GITMONITOR_LOCK_FILE"
|
||||
}
|
||||
|
||||
run_after() {
|
||||
@@ -36,17 +36,17 @@ run_after() {
|
||||
|
||||
initialize_repos() {
|
||||
while read -r repo_name repo_url; do
|
||||
if [ ! -d "$REPO_LOCAL_PATH/$repo_name" ]; then
|
||||
log_message "INFO" "Repository directory $REPO_LOCAL_PATH/$repo_name does not exist. Cloning..."
|
||||
mkdir -p "$REPO_LOCAL_PATH/$repo_name"
|
||||
git clone --depth 1 "$repo_url" "$REPO_LOCAL_PATH/$repo_name"
|
||||
if [ ! -d "$GITMONITOR_LOCAL_PATH/$repo_name" ]; then
|
||||
log_message "INFO" "Repository directory $GITMONITO_LOCAL_PATH/$repo_name does not exist. Cloning..."
|
||||
mkdir -p "$GITMONITOR_LOCAL_PATH/$repo_name"
|
||||
git clone --depth 1 "$repo_url" "$GITMONITOR_LOCAL_PATH/$repo_name"
|
||||
if [ $? -ne 0 ]; then
|
||||
log_message "ERROR" "Failed to clone repository. Exiting."
|
||||
exit 1
|
||||
fi
|
||||
log_message "INFO" "Repository cloned successfully."
|
||||
fi
|
||||
done <$REPO_URLS
|
||||
done <$GITMONITOR_URLS
|
||||
}
|
||||
|
||||
check_for_updates() {
|
||||
@@ -55,30 +55,32 @@ check_for_updates() {
|
||||
local current_commit_hash
|
||||
|
||||
# Get the last known commit hash (from a file)
|
||||
cd "$REPO_LOCAL_PATH/$repo_name"
|
||||
if [ -f "$REPO_LOCAL_PATH/$repo_name/.git-monitor-last-commit" ]; then
|
||||
last_commit_hash=$(cat "$REPO_LOCAL_PATH/$repo_name/.git-monitor-last-commit")
|
||||
cd "$GITMONITOR
|
||||
_LOCAL_PATH/$repo_name"
|
||||
if [ -f "$GITMONITOR_LOCAL_PATH/$repo_name/.git-monitor-last-commit" ]; then
|
||||
last_commit_hash=$(cat "$GITMONITOR_LOCAL_PATH/$repo_name/.git-monitor-last-commit")
|
||||
else
|
||||
last_commit_hash="" # Initialize if file doesn't exist
|
||||
fi
|
||||
|
||||
# Fetch the latest commit hash from the remote repository
|
||||
git -C "$REPO_LOCAL_PATH/$repo_name" fetch origin $BRANCH_NAME
|
||||
current_commit_hash=$(git -C "$REPO_LOCAL_PATH/$repo_name" rev-parse origin $BRANCH_NAME)
|
||||
git -C "$GITMONITOR_LOCAL_PATH/$repo_name" fetch origin $GITMONITOR_BRANCH_NAME
|
||||
current_commit_hash=$(git -C "$GITMONITOR_LOCAL_PATH/$repo_name" rev-parse origin $GITMONITOR_BRANCH_NAME)
|
||||
|
||||
if [ -z "$last_commit_hash" ] || [ "$current_commit_hash" != "$last_commit_hash" ]; then
|
||||
log_message "INFO" "New commits detected. Pulling..."
|
||||
git -C "$REPO_LOCAL_PATH/$repo_name" pull origin $BRANCH_NAME
|
||||
git -C "$GITMONITOR
|
||||
_LOCAL_PATH/$repo_name" pull origin $GITMONITOR_BRANCH_NAME
|
||||
if [ $? -eq 0 ]; then
|
||||
log_message "INFO" "Pull successful."
|
||||
|
||||
# run local scripts
|
||||
if [ -f "$REPO_LOCAL_PATH/$repo_name/.git-monitor_after.sh" ]; then
|
||||
run_after "$REPO_LOCAL_PATH/$repo_name/.git-monitor_after.sh"
|
||||
if [ -f "$GITMONITOR_LOCAL_PATH/$repo_name/.git-monitor_after.sh" ]; then
|
||||
run_after "$GITMONITOR_LOCAL_PATH/$repo_name/.git-monitor_after.sh"
|
||||
fi
|
||||
|
||||
# Update the last commit hash file
|
||||
echo "$current_commit_hash" > "$REPO_LOCAL_PATH/$repo_name/.git-monitor-last-commit"
|
||||
echo "$current_commit_hash" > "$GITMONITOR_LOCAL_PATH/$repo_name/.git-monitor-last-commit"
|
||||
else
|
||||
log_message "ERROR" "Pull failed."
|
||||
fi
|
||||
@@ -87,7 +89,7 @@ check_for_updates() {
|
||||
|
||||
# Main Execution
|
||||
|
||||
trap 'rm -f $LOCK_FILE' EXIT
|
||||
trap 'rm -f $GITMONITOR_LOCK_FILE' EXIT
|
||||
|
||||
check_lock
|
||||
create_lock
|
||||
@@ -99,7 +101,7 @@ initialize_repos
|
||||
while true; do
|
||||
while read -r repo_name repo_url; do
|
||||
check_for_updates $repo_name
|
||||
done < $REPO_URLS
|
||||
sleep "$POLL_INTERVAL"
|
||||
done < $GITMONITOR_URLS
|
||||
sleep "$GITMONITOR_POLL_INTERVAL"
|
||||
done
|
||||
|
||||
|
||||
Reference in New Issue
Block a user