65 lines
1.6 KiB
Bash
Executable File
65 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)}
|
|
|
|
case "$branch" in
|
|
master)
|
|
;;
|
|
*)
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
remote_host=${CPONE_REMOTE_HOST:-one@cpone.aplikasi.web.id}
|
|
remote_root=${CPONE_REMOTE_ROOT:-/home/one/project/one/one-api}
|
|
ssh_key=${CPONE_SSH_KEY:-/Users/fajrihardhitamurti/.ssh/id_rsa}
|
|
|
|
tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/cpone-sync.XXXXXX")
|
|
trap 'rm -rf "$tmpdir"' EXIT HUP INT TERM
|
|
|
|
manifest="$tmpdir/files.list"
|
|
verify_list="$tmpdir/files.verify"
|
|
|
|
if git rev-parse --verify HEAD^ >/dev/null 2>&1; then
|
|
git diff -M --name-only -z --diff-filter=ACMR HEAD^ HEAD > "$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
|
|
|
|
# backup file lama sebelum upload (disimpan di folder yang sama dengan suffix timestamp)
|
|
ts=$(date +%Y%m%d_%H%M%S)
|
|
tr '\0' '\n' < "$manifest" | while IFS= read -r relpath; do
|
|
[ -n "$relpath" ] || continue
|
|
ssh $ssh_args "$remote_host" "
|
|
src='$remote_root/$relpath'
|
|
if [ -f \"\$src\" ]; then
|
|
cp \"\$src\" \"\$src.$ts\"
|
|
fi
|
|
"
|
|
done
|
|
|
|
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' "cpone verify failed: missing $remote_root/$relpath" >&2
|
|
exit 1
|
|
}
|
|
done < "$verify_list"
|