releases/build/remote/build-remote.sh

46 lines
1.6 KiB
Bash

#!/usr/bin/env bash
# 빌드머신(ChanpacaLaptop=linux / Mac mini=macos)에서
# Cli + Avalonia 셸을 RID별 self-contained publish 하고
# 산출물을 로컬 out/mediabrowser-<rid>.tar.gz 로 수집한다.
#
# 사용: bash build/remote/build-remote.sh [linux|mac|all]
set -euo pipefail
cd "$(dirname "$0")/../.."
TARGET="${1:-all}"
REMOTE_DIR="build/videodownloader"
mkdir -p out
push_src() { # $1 = ssh 대상
echo "==> [$1] 소스 코드 전송"
git archive HEAD | ssh -o BatchMode=yes "$1" "rm -rf $REMOTE_DIR && mkdir -p $REMOTE_DIR && tar -x -C $REMOTE_DIR"
}
build_and_collect() { # $1 = ssh 대상, $2 = RID
local host="$1"
local rid="$2"
echo "==> [$host] publish $rid"
ssh -o BatchMode=yes "$host" "cd $REMOTE_DIR && 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"
echo "==> [$host] 수집: out/mediabrowser-$rid.tar.gz"
scp -o BatchMode=yes "$host:$REMOTE_DIR/out/mediabrowser-$rid.tar.gz" "out/mediabrowser-$rid.tar.gz"
}
if [[ "$TARGET" == "mac" || "$TARGET" == "all" ]]; then
push_src vd-mac
build_and_collect vd-mac osx-arm64
build_and_collect vd-mac osx-x64
fi
if [[ "$TARGET" == "linux" || "$TARGET" == "all" ]]; then
push_src vd-linux
build_and_collect vd-linux linux-x64
build_and_collect vd-linux linux-arm64
fi
echo "==> 원격 빌드 완료:"
ls -lh out/mediabrowser-*.tar.gz 2>/dev/null || true