Namespaces, assemblies, projects and directories, the solution, binaries, images, systemd units, config paths, environment variables, protocol method names, the media type and the raw chunk magic all move to MoShiro/moshiro. Existing data and deployments are not compatible and must be recreated. Also fix the architecture tests after the solution layout change and make the update tests independent of their order.
52 lines
2.7 KiB
Bash
52 lines
2.7 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/MoShiro.Agent" ;;
|
||
probe) csproj="backend/probe/src/MoShiro.Probe" ;;
|
||
backend) csproj="backend/src/MoShiro.Backend" ;;
|
||
fleet-enroll) csproj="backend/fleet/tools/fleet-enroll" ;;
|
||
*) echo "unknown project: $project" >&2; exit 2 ;;
|
||
esac
|
||
|
||
# 构建信息(程序里显示的 tag、提交、构建时间):没在 git 仓库里就留空
|
||
export MOSHIRO_TAG="${MOSHIRO_TAG:-$(git -C "$root" describe --tags --always --dirty 2>/dev/null || true)}"
|
||
export MOSHIRO_COMMIT="${MOSHIRO_COMMIT:-$(git -C "$root" rev-parse --short=10 HEAD 2>/dev/null || true)}"
|
||
export MOSHIRO_BUILT_AT="${MOSHIRO_BUILT_AT:-$(date -u +%Y-%m-%dT%H:%M:%SZ)}"
|
||
build_env=(-e MOSHIRO_TAG -e MOSHIRO_COMMIT -e MOSHIRO_BUILT_AT)
|
||
|
||
out="backend/artifacts/publish/$project/$rid"
|
||
publish_options=()
|
||
if [[ "$project" == backend ]]; then
|
||
publish_options+=(-p:OpenApiGenerateDocuments=false)
|
||
fi
|
||
args=(publish "$csproj" -c Release -r "$rid" -p:PublishAot=true -p:DebugType=none -p:DebugSymbols=false "${publish_options[@]}" -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 moshiro-nuget:/root/.nuget -v "moshiro-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 moshiro-nuget:/root/.nuget -v "moshiro-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
|
||
dotnet publish "${csproj#backend/}" -c Release -r "$rid" -p:PublishAot=true -p:DebugType=none -p:DebugSymbols=false "${publish_options[@]}" -o "$root/$out" -nologo -v q
|
||
;;
|
||
esac
|
||
|
||
ls -l "$root/$out" | sed -n '1,20p'
|