Files
BE_CPONE/scripts/devcpone_sync.sh

57 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
set -eu
repo_root=$(git rev-parse --show-toplevel)
branch=${1:-$(git symbolic-ref --quiet --short HEAD 2>/dev/null || true)}
old_sha=${2:-}
new_sha=${3:-HEAD}
case "$branch" in
master)
;;
*)
exit 0
;;
esac
remote_host=${DEVCPONE_REMOTE_HOST:-one@devcpone.aplikasi.web.id}
remote_root=${DEVCPONE_REMOTE_ROOT:-/home/one/project/one/one-api}
ssh_key=${DEVCPONE_SSH_KEY:-/Users/fajrihardhitamurti/id_rsa}
tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/devcpone-sync.XXXXXX")
trap 'rm -rf "$tmpdir"' EXIT HUP INT TERM
manifest="$tmpdir/files.list"
verify_list="$tmpdir/files.verify"
zero_sha="0000000000000000000000000000000000000000"
if [ -n "$old_sha" ] && [ "$old_sha" != "$zero_sha" ]; then
git diff -M --name-only -z --diff-filter=ACMR "$old_sha" "$new_sha" > "$manifest"
elif git rev-parse --verify "${new_sha}^" >/dev/null 2>&1; then
git diff -M --name-only -z --diff-filter=ACMR "${new_sha}^" "$new_sha" > "$manifest"
else
git ls-files -z > "$manifest"
fi
if [ ! -s "$manifest" ]; then
exit 0
fi
ssh_args="-o BatchMode=yes"
if [ -f "$ssh_key" ]; then
ssh_args="-i $ssh_key $ssh_args"
fi
ssh $ssh_args "$remote_host" "mkdir -p '$remote_root'" >/dev/null
rsync -a --relative --from0 --files-from="$manifest" -e "ssh $ssh_args" "$repo_root"/ "$remote_host:$remote_root"/
tr '\0' '\n' < "$manifest" > "$verify_list"
while IFS= read -r relpath; do
[ -n "$relpath" ] || continue
ssh $ssh_args "$remote_host" "test -e '$remote_root/$relpath'" || {
printf '%s\n' "devcpone verify failed: missing $remote_root/$relpath" >&2
exit 1
}
done < "$verify_list"