# 릴리스 zip 만들기 (166): stage 폴더 (make_layout -Clean) 를 zip 으로 묶고, 목록을 검사한다. # - zip 안 경로는 '/' 로 (Windows tar). 맨 위는 stage 폴더 이름 (JJ_MKVMaker/). # - 실행 흔적 (Logs\ · *.log · crash dump · 설정 · 세션 · 비밀 저장소 · 디버그 빌드 파일) 이 들어 있으면 실패한다. # 사용: powershell -File tool\make_zip.ps1 -Stage '<루트>\release\stage\JJ_MKVMaker' -Zip '<루트>\release\JJ_MKVMaker_v<버전>_win64.zip' param( [Parameter(Mandatory = $true)][string]$Stage, [Parameter(Mandatory = $true)][string]$Zip ) $ErrorActionPreference = 'Stop' $Stage = (Resolve-Path $Stage).Path $parent = Split-Path $Stage -Parent $name = Split-Path $Stage -Leaf if (Test-Path $Zip) { Remove-Item $Zip -Force } & "$env:SystemRoot\System32\tar.exe" -a -c -f $Zip -C $parent $name if ($LASTEXITCODE -ne 0) { throw "tar 실패 ($LASTEXITCODE)" } # 목록 검사 $list = & "$env:SystemRoot\System32\tar.exe" -t -f $Zip if ($LASTEXITCODE -ne 0) { throw "zip 목록을 읽지 못함 ($LASTEXITCODE)" } $bad = $list | Where-Object { $_ -match '(^|/)Logs/' -or $_ -match '\.(log|dmp|mdmp)$' -or $_ -match '(^|/)(settings|session)\.json(\.bak|\.tmp)?$' -or $_ -match '(^|/)settings\.broken-' -or $_ -match '(^|/)secrets\.dat$' -or $_ -match '(^|/)kernel_blob\.bin$' -or $_ -match '\\' } if ($bad) { Remove-Item $Zip -Force throw ("zip 에 넣으면 안 되는 파일이 있어 지웠습니다:`n" + ($bad -join "`n")) } if (-not ($list -contains "$name/jj_mkvmaker.exe")) { Remove-Item $Zip -Force throw "zip 맨 위에 $name/jj_mkvmaker.exe 가 없습니다" } # 86 (관리자 판단): 7-Zip 이 빠진 채 정식 판이 나가지 않게 (CMake 는 없으면 경고만 하고 빼고 빌드한다) $need = @("$name/Lib/7zip/7z.exe", "$name/Lib/7zip/7z.dll", "$name/Lib/7zip/License.txt") $missing = $need | Where-Object { -not ($list -contains $_) } if ($missing) { Remove-Item $Zip -Force throw ("7-Zip 이 빠졌습니다 (tool\fetch_7zip.ps1 로 받은 뒤 다시 빌드):`n" + ($missing -join "`n")) } $item = Get-Item $Zip $hash = (Get-FileHash $Zip -Algorithm SHA256).Hash.ToLower() "{0} {1} bytes {2} files sha256 {3}" -f $item.Name, $item.Length, $list.Count, $hash