releases/build/remote/build-remote.ps1

66 lines
2.8 KiB
PowerShell

# MediaBrowser 원격 빌드 수집 스크립트 (PowerShell)
# 빌드머신(vd-linux / vd-mac)에서 Cli + Avalonia 셸을 RID별 self-contained publish 하고
# 산출물을 out/mediabrowser-<rid>.tar.gz 로 수집한다.
#
# 사용: ./build/remote/build-remote.ps1 [-Target mac|linux|all]
param(
[ValidateSet("mac", "linux", "all")]
[string]$Target = "all"
)
$ErrorActionPreference = "Stop"
$root = Split-Path -Parent (Split-Path -Parent $PSScriptRoot)
$outDir = Join-Path $root "out"
New-Item -ItemType Directory -Path $outDir -Force | Out-Null
$remoteDir = "build/videodownloader"
function Push-Source {
param([string]$HostName)
Write-Host "==> [$HostName] 소스 코드 아카이브 전송" -ForegroundColor Cyan
$tempTar = Join-Path $outDir "source_sync.tar"
if (Test-Path $tempTar) { Remove-Item $tempTar -Force }
# git archive 생성
git archive --format=tar -o $tempTar HEAD
if ($LASTEXITCODE -ne 0) { throw "git archive 생성 실패" }
# 원격 폴더 초기화 및 tar 전송/풀기
& ssh.exe $HostName "rm -rf $remoteDir && mkdir -p $remoteDir"
& scp.exe $tempTar "${HostName}:${remoteDir}/source_sync.tar"
& ssh.exe $HostName "tar -xf $remoteDir/source_sync.tar -C $remoteDir && rm -f $remoteDir/source_sync.tar"
Remove-Item $tempTar -Force -ErrorAction SilentlyContinue
}
function Build-And-Collect {
param([string]$HostName, [string]$Rid)
Write-Host "==> [$HostName] publish $Rid" -ForegroundColor Cyan
$cmd = "cd $remoteDir && export DOTNET_ROOT=`$HOME/.dotnet && export PATH=`$HOME/.dotnet:`$PATH && " +
"dotnet publish VideoDownloader.Cli -c Release -r $Rid --self-contained -o out/cli-$Rid && " +
"dotnet publish VideoDownloader.Avalonia -c Release -r $Rid --self-contained -o out/avalonia-$Rid && " +
"cd out && tar -czf mediabrowser-$Rid.tar.gz cli-$Rid avalonia-$Rid"
& ssh.exe $HostName $cmd
if ($LASTEXITCODE -ne 0) { throw "[$HostName] 빌드 실패: $Rid" }
$localTarget = Join-Path $outDir "mediabrowser-$Rid.tar.gz"
Write-Host "==> [$HostName] 수집: mediabrowser-$Rid.tar.gz" -ForegroundColor Green
& scp.exe "${HostName}:${remoteDir}/out/mediabrowser-$Rid.tar.gz" $localTarget
if ($LASTEXITCODE -ne 0) { throw "[$HostName] 산출물 수집 실패: $Rid" }
}
if ($Target -eq "mac" -or $Target -eq "all") {
Push-Source "vd-mac"
Build-And-Collect "vd-mac" "osx-arm64"
Build-And-Collect "vd-mac" "osx-x64"
}
if ($Target -eq "linux" -or $Target -eq "all") {
Push-Source "vd-linux"
Build-And-Collect "vd-linux" "linux-x64"
Build-And-Collect "vd-linux" "linux-arm64"
}
Write-Host "`n원격 빌드 및 수집 완료:" -ForegroundColor Green
Get-ChildItem (Join-Path $outDir "mediabrowser-*.tar.gz") |
ForEach-Object { Write-Host (" {0,-35} {1:N1} MB" -f $_.Name, ($_.Length / 1MB)) }