Squash of recent dev work: return_session login, backend switcher, line detail timeline, overview strips, node platform/country/ISP info with flags and icons, build info (version, tag, time) behind site.show_build, and the acrylic display theme.
48 lines
2.6 KiB
Bash
48 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
||
# 发布一个节点程序:scripts/publish.sh <agent|probe|backend|fleet-enroll> <rid>
|
||
# 输出到 backend/artifacts/publish/<project>/<rid>/。linux-musl-x64(Alpine)和 linux-x64(Ubuntu noble,glibc)在 NativeAOT SDK 容器里构建(任何主机都可以,包括 Windows),
|
||
# 其他 rid 用本机的 dotnet(NativeAOT 不能交叉编译到别的操作系统,所以 win-x64 要在 Windows 上、linux-x64 要在 glibc 的 Linux 上构建)。
|
||
set -euo pipefail
|
||
|
||
project="${1:?usage: publish.sh <agent|probe|backend|fleet-enroll> <rid>}"
|
||
rid="${2:?usage: publish.sh <agent|probe|backend|fleet-enroll> <rid>}"
|
||
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
|
||
case "$project" in
|
||
agent) csproj="backend/agent/src/Monitor.Agent" ;;
|
||
probe) csproj="backend/probe/src/Monitor.Probe" ;;
|
||
backend) csproj="backend/src/Monitor.Backend" ;;
|
||
fleet-enroll) csproj="backend/fleet/tools/fleet-enroll" ;;
|
||
*) echo "unknown project: $project" >&2; exit 2 ;;
|
||
esac
|
||
|
||
# 构建信息(程序里显示的 tag、提交、构建时间):没在 git 仓库里就留空
|
||
export MONITOR_TAG="${MONITOR_TAG:-$(git -C "$root" describe --tags --always --dirty 2>/dev/null || true)}"
|
||
export MONITOR_COMMIT="${MONITOR_COMMIT:-$(git -C "$root" rev-parse --short=10 HEAD 2>/dev/null || true)}"
|
||
export MONITOR_BUILT_AT="${MONITOR_BUILT_AT:-$(date -u +%Y-%m-%dT%H:%M:%SZ)}"
|
||
build_env=(-e MONITOR_TAG -e MONITOR_COMMIT -e MONITOR_BUILT_AT)
|
||
|
||
out="backend/artifacts/publish/$project/$rid"
|
||
args=(publish "$csproj" -c Release -r "$rid" -p:PublishAot=true -p:DebugType=none -p:DebugSymbols=false -o "/src/$out" --artifacts-path /artifacts -nologo -v q)
|
||
|
||
case "$rid" in
|
||
linux-musl-x64)
|
||
# SDK 镜像的版本可以比 global.json 新(rollForward = latestFeature)
|
||
docker run --rm "${build_env[@]}" -v "$root:/src" -v monitor-nuget:/root/.nuget -v "monitor-artifacts-$rid:/artifacts" -w /src \
|
||
mcr.microsoft.com/dotnet/sdk:10.0-alpine-aot dotnet "${args[@]}"
|
||
;;
|
||
linux-x64)
|
||
docker run --rm "${build_env[@]}" -v "$root:/src" -v monitor-nuget:/root/.nuget -v "monitor-artifacts-$rid:/artifacts" -w /src mcr.microsoft.com/dotnet/sdk:10.0-noble-aot dotnet "${args[@]}"
|
||
;;
|
||
linux-musl-arm64|linux-arm64)
|
||
echo "$rid needs an arm64 Alpine builder (native or qemu): run this script on an arm64 host or in CI" >&2
|
||
exit 3
|
||
;;
|
||
*)
|
||
cd "$root/backend" # global.json 在 backend/ 下
|
||
dotnet publish "${csproj#backend/}" -c Release -r "$rid" -p:PublishAot=true -p:DebugType=none -p:DebugSymbols=false -o "$root/$out" -nologo -v q
|
||
;;
|
||
esac
|
||
|
||
ls -l "$root/$out" | sed -n '1,20p'
|