# git-hooks/post-commit.ps1 # 자동 커밋인지 확인 (무한 루프 방지) $commitMsg = git log -1 --pretty=%B if ($commitMsg -match "^\[AUTO\]") { Write-Host "ℹ️ Auto-generated commit detected. Skipping post-commit hook." -ForegroundColor Gray exit 0 } Write-Host "" Write-Host "🔄 Post-commit: Generating ScriptableObjects..." -ForegroundColor Cyan # 이전 커밋에서 변경된 CSV 파일 확인 $changedFiles = git diff-tree --no-commit-id --name-only -r HEAD $csvFiles = $changedFiles | Where-Object { $_ -match "GameData/.*\.csv$" } if ($csvFiles.Count -eq 0) { Write-Host "ℹ️ 변경된 CSV 파일이 없습니다. SO 생성 스킵." -ForegroundColor Gray exit 0 } Write-Host "📊 처리할 파일:" -ForegroundColor Yellow $csvFiles | ForEach-Object { Write-Host " - $_" } Write-Host "" # Unity 실행 중 확인 $unityProcess = Get-Process -Name "Unity" -ErrorAction SilentlyContinue if ($unityProcess) { Write-Host "⚠️ Unity가 실행 중입니다." -ForegroundColor Yellow Write-Host "💡 Unity를 종료하거나, Unity에서 직접 'GameData > Import All Data'를 실행해주세요." -ForegroundColor Yellow Write-Host "" Write-Host "또는 다음 명령어를 실행하세요:" -ForegroundColor Cyan Write-Host " git commit --amend --no-edit && git reset HEAD~1" -ForegroundColor White exit 0 } # Unity 경로 찾기 (Unity Hub 기본 설치 경로) $unityVersions = @( "C:\Program Files\Unity\Hub\Editor\2022.3.10f1\Editor\Unity.exe", "C:\Program Files\Unity\Hub\Editor\2023.2.0f1\Editor\Unity.exe" # 필요한 버전 추가 ) $unityPath = $null foreach ($path in $unityVersions) { if (Test-Path $path) { $unityPath = $path break } } # Unity Hub에서 설치된 모든 버전 검색 if (-not $unityPath) { $hubPath = "C:\Program Files\Unity\Hub\Editor" if (Test-Path $hubPath) { $editors = Get-ChildItem -Path $hubPath -Directory | ForEach-Object { Join-Path $_.FullName "Editor\Unity.exe" } | Where-Object { Test-Path $_ } if ($editors.Count -gt 0) { $unityPath = $editors[0] } } } if (-not $unityPath) { Write-Host "❌ Unity 실행 파일을 찾을 수 없습니다." -ForegroundColor Red Write-Host "💡 Unity를 수동으로 열고 'GameData > Import All Data'를 실행한 후," -ForegroundColor Yellow Write-Host " 변경된 SO를 커밋해주세요." -ForegroundColor Yellow exit 0 } Write-Host "🎮 Unity CLI로 SO 생성 중..." -ForegroundColor Cyan Write-Host "Unity: $unityPath" -ForegroundColor Gray $projectPath = (Get-Location).Path + "\UnityProject" $logFile = (Get-Location).Path + "\DataTools\unity_import.log" # Unity Batch Mode 실행 $unityArgs = @( "-quit", "-batchmode", "-nographics", "-projectPath", "`"$projectPath`"", "-executeMethod", "DataImporter.ImportAllDataCLI", "-logFile", "`"$logFile`"" ) $process = Start-Process -FilePath $unityPath -ArgumentList $unityArgs -Wait -PassThru -NoNewWindow if ($process.ExitCode -ne 0) { Write-Host "❌ SO 생성 실패!" -ForegroundColor Red Write-Host "💡 로그 파일을 확인하세요: $logFile" -ForegroundColor Yellow exit 1 } Write-Host "✅ SO 생성 완료!" -ForegroundColor Green Write-Host "" # 변경된 SO 파일 확인 git add UnityProject/Assets/Data/ScriptableObjects/ 2>$null $status = git status --porcelain UnityProject/Assets/Data/ScriptableObjects/ if ([string]::IsNullOrWhiteSpace($status)) { Write-Host "ℹ️ 변경된 SO 파일이 없습니다." -ForegroundColor Gray exit 0 } Write-Host "📦 변경된 SO:" -ForegroundColor Yellow git status --porcelain UnityProject/Assets/Data/ScriptableObjects/ | ForEach-Object { Write-Host " $_" } Write-Host "" # SO 파일 자동 스테이징 및 커밋 Write-Host "🚀 SO 파일 자동 커밋 중..." -ForegroundColor Cyan # Meta 파일도 함께 추가 git add UnityProject/Assets/Data/ScriptableObjects/**/*.meta 2>$null # 변경 파일 목록 $changedList = $csvFiles -join "`n" # 자동 커밋 $commitHash = git rev-parse --short HEAD $commitMessage = @" [AUTO] Update ScriptableObjects from CSV Generated from commit: $commitHash Changed files: $changedList "@ git commit -m $commitMessage 2>$null if ($LASTEXITCODE -eq 0) { Write-Host "✅ SO 자동 커밋 완료!" -ForegroundColor Green Write-Host "" $currentBranch = git branch --show-current Write-Host "💡 다음 명령어로 Push할 수 있습니다:" -ForegroundColor Cyan Write-Host " git push origin $currentBranch" -ForegroundColor White } else { Write-Host "❌ SO 자동 커밋 실패!" -ForegroundColor Red Write-Host "💡 수동으로 SO를 커밋해주세요:" -ForegroundColor Yellow Write-Host " git add UnityProject/Assets/Data/ScriptableObjects/" -ForegroundColor White Write-Host " git commit -m 'Update SO'" -ForegroundColor White } exit 0