first
This commit is contained in:
commit
23448634c2
6 files changed
+195
No files matched your search
Executable
+60
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
if [[ $# -gt 1 ]]; then
|
||||
echo "Usage: $0 [path/to/.env]" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
ENV_FILE="${1:-$(dirname "$0")/.env}"
|
||||
if [[ ! -f "$ENV_FILE" ]]; then
|
||||
echo "Env file not found: $ENV_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
source "$ENV_FILE"
|
||||
|
||||
required_vars=(
|
||||
RSYNC_SOURCE
|
||||
RSYNC_TARGET_DIR
|
||||
GIT_REPO_DIR
|
||||
COMMIT_MESSAGE_PREFIX
|
||||
)
|
||||
|
||||
for var in "${required_vars[@]}"; do
|
||||
if [[ -z "${!var:-}" ]]; then
|
||||
echo "Missing required env var: $var" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
mkdir -p "$RSYNC_TARGET_DIR"
|
||||
|
||||
repo_abs="$(cd "$GIT_REPO_DIR" && pwd)"
|
||||
target_abs="$(cd "$RSYNC_TARGET_DIR" && pwd)"
|
||||
|
||||
case "$target_abs" in
|
||||
"$repo_abs"/*) ;;
|
||||
*)
|
||||
echo "RSYNC_TARGET_DIR must be inside GIT_REPO_DIR" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
rel_target="${target_abs#"$repo_abs"/}"
|
||||
|
||||
if [[ -n "${RSYNC_RSH:-}" ]]; then
|
||||
rsync -az --delete -e "$RSYNC_RSH" "$RSYNC_SOURCE" "$RSYNC_TARGET_DIR/"
|
||||
else
|
||||
rsync -az --delete "$RSYNC_SOURCE" "$RSYNC_TARGET_DIR/"
|
||||
fi
|
||||
|
||||
git -C "$GIT_REPO_DIR" add -A -- "$rel_target"
|
||||
|
||||
if git -C "$GIT_REPO_DIR" diff --cached --quiet -- "$rel_target"; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
timestamp="$(date '+%Y-%m-%d %H:%M:%S')"
|
||||
git -C "$GIT_REPO_DIR" commit -m "$COMMIT_MESSAGE_PREFIX $timestamp" -- "$rel_target"
|
||||
Reference in new issue
Block a user