# MediaBrowser 원격 빌드 수집 스크립트 (PowerShell) # 빌드머신(vd-linux / vd-mac)에서 Cli + Avalonia 셸을 RID별 self-contained publish 하고 # 산출물을 out/mediabrowser-.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)) }