Files
goldenChart/scripts/hooks/pre-push
T
2026-06-14 23:49:16 +09:00

77 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# frontend/backend/desktop/shared 변경 push 시 semver bump 필수
set -euo pipefail
ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
cd "$ROOT"
# shellcheck disable=SC1091
source "$ROOT/scripts/desktop-version-scope.sh"
read_local_version() {
"$ROOT/scripts/read-desktop-version.sh" 2>/dev/null || echo "0.0.0"
}
read_remote_version() {
local remote_ref="$1"
git show "${remote_ref}:desktop/src-tauri/tauri.conf.json" 2>/dev/null \
| node -e "let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{console.log(JSON.parse(d).version||'0.0.0')}catch{console.log('0.0.0')}})" \
|| echo "0.0.0"
}
version_gt() {
node -e "
const parse = v => String(v||'0').replace(/^v/i,'').split('.').map(n=>parseInt(n,10)||0);
const a=parse(process.argv[1]), b=parse(process.argv[2]);
for(let i=0;i<3;i++){const d=(a[i]||0)-(b[i]||0);if(d){process.exit(d>0?0:1)}}
process.exit(0);
" "$1" "$2"
}
while read -r _local_ref local_sha _remote_ref remote_sha; do
[[ "$local_sha" == "0000000000000000000000000000000000000000" ]] && continue
if [[ "$remote_sha" == "0000000000000000000000000000000000000000" ]]; then
range="$local_sha"
else
range="${remote_sha}..${local_sha}"
fi
if ! desktop_version_diff_affects_app "$range"; then
continue
fi
local_ver="$(read_local_version)"
remote_ver="$(read_remote_version "$remote_sha")"
if version_gt "$local_ver" "$remote_ver"; then
continue
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Desktop 앱 영향 변경(frontend/backend/desktop/shared)"
echo " push — semver bump 가 필요합니다."
echo " 로컬 v${local_ver} ≤ 원격 v${remote_ver}"
echo ""
affected="$(desktop_version_list_affected_in_range "$range" | head -5 | sed 's/^/ /')"
if [[ -n "$affected" ]]; then
echo " 변경 예:"
echo "$affected"
count="$(desktop_version_list_affected_in_range "$range" | wc -l | tr -d ' ')"
if [[ "$count" -gt 5 ]]; then
echo " ... 외 $((count - 5))개 파일"
fi
echo ""
fi
echo " bump + push + Jenkins Desktop 빌드:"
echo " ./scripts/push-with-desktop-version.sh"
echo ""
echo " bump 만:"
echo " ./scripts/bump-desktop-version-for-push.sh"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
exit 1
done
exit 0