JJ_MKVMaker/tool/make_zip.ps1

50 lines
2.5 KiB
PowerShell

# 릴리스 zip 만들기 (166): stage 폴더 (make_layout -Clean) 를 zip 으로 묶고, 목록을 검사한다.
# - zip 안 경로는 '/' 로 (Windows tar). 맨 위는 stage 폴더 이름 (JJ_MKVMaker/).
# - 실행 흔적 (Logs\ · *.log · crash dump · 설정 · 세션 · 비밀 저장소 · 디버그 빌드 파일) 이 들어 있으면 실패한다.
# - 판 번호 (tool\check_windows_build.ps1): 정식 판은 -Release (번호 < 1000), 아니면 시험판 (시험 번호여야 함 - 정식 판처럼 보이지 않게).
# 사용: powershell -File tool\make_zip.ps1 -Stage '<루트>\release\stage\JJ_MKVMaker' -Zip '<루트>\release\JJ_MKVMaker_v<버전>_win64.zip' [-Release]
param(
[Parameter(Mandatory = $true)][string]$Stage,
[Parameter(Mandatory = $true)][string]$Zip,
[switch]$Release
)
$ErrorActionPreference = 'Stop'
$Stage = (Resolve-Path $Stage).Path
& (Join-Path $PSScriptRoot 'check_windows_build.ps1') -Dir $Stage -Release:$Release
$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