#!/bin/bash # 저장소의 win-ci 스크립트를 /home/claude/win-ci 로 반영한다. # # ./sync.sh stage2.ps1 을 그대로 배포 (origin/main 최신을 검증) # ./sync.sh 그 커밋을 검증하도록 $TargetRev 를 박아서 배포 # # build.sh 를 다시 돌리면 안 된다. build.sh 의 fetch 는 지워둔 Windows ISO(4.8GB)를 # 다시 내려받는다. 설치가 끝난 VM 에 스크립트만 갱신할 때는 이걸 쓴다. # # stage2.ps1 은 게스트 agent 가 20초마다 해시를 비교해 받아가므로, 복사만 하면 # VM 재시작 없이 다음 폴링에 새 버전이 실행된다. 반대로 내용이 같으면 다시 돌지 # 않는다 — 그래서 재검증을 요청할 때는 sha 를 넘겨 내용이 바뀌게 한다. # serve-host.py 는 호스트 프로세스라 유닛을 재시작해야 반영된다. set -euo pipefail D="${WIN_CI_DIR:-/home/claude/win-ci}" HERE="$(cd "$(dirname "$0")" && pwd)" REV="${1:-}" mkdir -p "$D/serve" "$D/results" cp "$HERE/serve/stage2.ps1" "$D/serve/" if [ -n "$REV" ]; then sed -i "s/^\$TargetRev = 'main'$/\$TargetRev = '$REV'/" "$D/serve/stage2.ps1" grep -q "^\$TargetRev = '$REV'$" "$D/serve/stage2.ps1" || { echo "TargetRev 치환 실패"; exit 1; } echo "검증 대상 리비전 = $REV" fi cp "$HERE"/*.sh "$HERE/serve-host.py" "$D/" chmod +x "$D"/*.sh if systemctl --user is-active --quiet win-ci-http.service; then systemctl --user restart win-ci-http.service echo "win-ci-http 재시작 (serve-host.py 반영)" fi echo "stage2.ps1 sha256 = $(sha256sum "$D/serve/stage2.ps1" | cut -c1-12) (게스트가 20초 안에 받아간다)"