RPC远程过程调用,二进制封装,提供高吞吐低延迟的高性能RPC框架
大石头
authored at
2022-08-10 13:26:19
NewLife.Remoting
name: aot
# AOT 兼容矩阵(å‚考 NewLife.Core åšæ³•):分æžå™¨é›¶å‘Šè¦ + 三工程 NativeAOT 冒烟。
# NativeAOT 䏿”¯æŒè·¨ OS 编译,æ¯ä¸ª RID 用对应原生 runner å‘布è¿è¡Œï¼š
# win-x64 → windows-latestï¼›linux-x64 → ubuntu-latestï¼›linux-arm64 → ubuntu-24.04-arm(以上为阻æ–é—¨ç¦ï¼‰
# win-arm64 / osx-arm64 / osx-x64 → 观察期(continue-on-error),平å°ç¨³å®šå…¨ç»¿åŽé€é¡¹è½¬é˜»æ–
# linux-musl-x64 / linux-musl-arm64 → alpine 容器内原生å‘布è¿è¡Œï¼ˆè§‚察期)
# linux-loongarch64(LA64ï¼‰ï¼šæ— runtime packã€æ— NativeAOTï¼›QEMU 下的 JIT 冒烟ã€2026-10-16 起暂缓】,
# ä½œä¸šé…æ–¹ä¿ç•™ä½†é»˜è®¤ä¸æ‰§è¡Œï¼ˆif: false),龙芯覆盖由 test.yml çš„ LA64 å•元测试矩阵承接。
# 触å‘:push / PR / 手动(workflow_dispatch);ä¸é‡‡ç”¨å¤œé—´å®šæ—¶ã€‚
on:
push:
branches: [ '*' ]
pull_request:
branches: [ '*' ]
workflow_dispatch:
jobs:
# 分æžå™¨é›¶å‘Šè¦ï¼ˆä¸Ž RID æ— å…³ï¼‰ä¸Žæºç”Ÿæˆå™¨å•测,win-x64 硬约æŸ
aot-analyzer:
name: aot analyzer (win-x64)
runs-on: windows-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Setup dotNET
uses: actions/setup-dotnet@v4
with:
# net8.0 ç›®æ ‡éœ€è¦ 8.x SDK æä¾›å¯¹åº”ç›®æ ‡åŒ…ï¼ˆrunner 镜åƒå·²ä¸å†é¢„装旧版 SDK)
dotnet-version: |
8.x
10.x
- name: 分æžå™¨é›¶å‘Šè¦æž„建(-warnaserror é˜»æ–æ–°å¢žå‘Šè¦ï¼‰
run: |
dotnet build NewLife.Remoting/NewLife.Remoting.csproj -f net8.0 -c Release --nologo -warnaserror
dotnet build NewLife.Remoting/NewLife.Remoting.csproj -f net10.0 -c Release --nologo -warnaserror
dotnet build NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj -f net8.0 -c Release --nologo -warnaserror
dotnet build NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj -f net10.0 -c Release --nologo -warnaserror
- name: æºç”Ÿæˆå™¨å•元测试
run: dotnet test XUnitTest.SourceGenerator -c Release --nologo
# 三工程 NativeAOT 冒烟:AotSmokeï¼ˆæ ¸å¿ƒé“¾è·¯ 23 场景,å«å¤šè¯è¨€è¯è¡¨ï¼‰ã€AotSmoke.Webï¼ˆæœ€å° API 宿主 11 场景)ã€
# AotSmoke.XCode(XCode 设备链路 6 场景,EXT-6 åŽè½¬ç¡¬çº¦æŸï¼‰ã€‚JIT 基线先行,å†åŽŸç”Ÿå‘布è¿è¡Œï¼ˆéž 0 退出ç å³å¤±è´¥ï¼‰ã€‚
aot:
name: aot (${{ matrix.rid }})
runs-on: ${{ matrix.os }}
timeout-minutes: 40
continue-on-error: ${{ matrix.experimental == true }}
strategy:
fail-fast: false
matrix:
include:
- rid: win-x64
os: windows-latest
bin: AotSmoke.exe
- rid: win-arm64
os: windows-11-arm
bin: AotSmoke.exe
experimental: true
- rid: linux-x64
os: ubuntu-latest
bin: AotSmoke
- rid: linux-arm64
os: ubuntu-24.04-arm
bin: AotSmoke
- rid: osx-arm64
os: macos-latest
bin: AotSmoke
experimental: true
- rid: osx-x64
os: macos-15-intel
bin: AotSmoke
experimental: true
steps:
- uses: actions/checkout@v4
- name: Setup dotNET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.x
- name: Install NativeAOT Prerequisites (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y clang zlib1g-dev
- name: JIT Baseline (23 + 11 + 6 场景)
run: |
dotnet run -c Release --project AotSmoke/AotSmoke.csproj
dotnet run -c Release --project AotSmoke.Web/AotSmoke.Web.csproj
dotnet run -c Release --project AotSmoke.XCode/AotSmoke.XCode.csproj
- name: Publish NativeAOT (三工程)
run: |
dotnet publish AotSmoke/AotSmoke.csproj -c Release -r ${{ matrix.rid }} -o AotSmoke/bin/aot-out
dotnet publish AotSmoke.Web/AotSmoke.Web.csproj -c Release -r ${{ matrix.rid }} -o AotSmoke.Web/bin/aot-out
dotnet publish AotSmoke.XCode/AotSmoke.XCode.csproj -c Release -r ${{ matrix.rid }} -o AotSmoke.XCode/bin/aot-out
- name: Run NativeAOT Smoke
shell: bash
run: |
if [[ "${{ matrix.bin }}" == "AotSmoke.exe" ]]; then EXT=".exe"; else EXT=""; fi
./AotSmoke/bin/aot-out/AotSmoke$EXT
./AotSmoke.Web/bin/aot-out/AotSmoke.Web$EXT
./AotSmoke.XCode/bin/aot-out/AotSmoke.XCode$EXT
# NativeAOT 冒烟(musl):alpine 容器内原生å‘布è¿è¡Œï¼ˆè§‚察期)。
# 容器内 actions/setup-dotnet ä¸å¯ç”¨ï¼Œæ”¹ç”¨ dotnet-install.shï¼›å®˜æ–¹è¦æ±‚ alpine 3.15+ 且安装 clang/build-base/zlib-dev
aot-musl:
name: aot (${{ matrix.rid }})
runs-on: ${{ matrix.os }}
timeout-minutes: 40
continue-on-error: true
strategy:
fail-fast: false
matrix:
include:
- rid: linux-musl-x64
os: ubuntu-latest
- rid: linux-musl-arm64
os: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v4
- name: Publish & Run NativeAOT Smoke (alpine)
run: |
docker run --rm -v "$PWD:/src" -w /src alpine:3.20 sh -c '
set -e
apk add --no-cache bash curl clang build-base zlib-dev icu-libs >/dev/null
curl -sSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh
bash /tmp/dotnet-install.sh --channel 10.0 --install-dir /usr/share/dotnet >/dev/null
ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
export DOTNET_CLI_TELEMETRY_OPTOUT=1
dotnet run -c Release --project AotSmoke/AotSmoke.csproj
dotnet publish AotSmoke/AotSmoke.csproj -c Release -r ${{ matrix.rid }} -o AotSmoke/bin/aot-out
./AotSmoke/bin/aot-out/AotSmoke
'
# 龙芯 LA64(linux-loongarch64ï¼‰ï¼šæ— runtime packã€æ— NativeAOT,QEMU 用户æ€ä»¿çœŸä»¥ JIT å§¿æ€è·‘æ ¸å¿ƒå†’çƒŸã€‚
# ã€2026-10-16 èµ·æš‚ç¼“ã€‘é…æ–¹ä¿ç•™ã€é»˜è®¤ä¸æ‰§è¡Œï¼ˆif: false):该冒烟在 QEMU 下曾 22/22 通过,但稳定性尚ä¸è¶³ä»¥
# 长期å 用 3 å°æ—¶ runner;龙芯覆盖当å‰ç”± test.yml çš„ test (linux-la64 qemu) å•元测试矩阵承接。
# æ¢å¤æ–¹å¼ï¼šåˆ 除下é¢é‚£è¡Œ ifï¼Œå¹¶åŒæ¥æ›´æ–°æœ¬æ³¨é‡Šã€‚
# é…æ–¹è¦ç‚¹ï¼šâ‘ tonistiigi/binfmt 注册较新的 qemu-user-static(qemu 10.2.3ï¼Œå« loong64ï¼›9.2.2 的龙芯仿真å˜åœ¨
# 缺陷,曾在 MSBuild/Regex 处触å‘å†…å˜æŸå);② 业务在 loong64 Debian å®¹å™¨å†…æ‰§è¡Œâ€”â€”å®¹å™¨æ ¹æ–‡ä»¶ç³»ç»Ÿçš„
# glibc/ld.so 与龙芯 SDK 匹é…ï¼ˆå®¿ä¸»äº¤å‰ glibc 曾é‡ã€Œunexpected reloc typeã€ï¼‰ï¼›â‘¢ 龙芯 SDK 由宿主下载åŽ
# 进入预构建镜åƒï¼ˆ.github/la64)。还原/è¿è¡Œæ‹†åˆ†ä¸ºç‹¬ç«‹æ¥éª¤ï¼Œä¾¿äºŽæ¸è¿›æŸ¥çœ‹æ—¥å¿—ï¼›å„æ¥éª¤å¸¦é‡è¯•,
# è§„é¿ QEMU 仿真的å¶å‘内å˜/指令缺陷。
aot-loongarch64:
name: smoke (linux-la64 qemu)
if: false
runs-on: ubuntu-latest
timeout-minutes: 180
continue-on-error: true
steps:
- uses: actions/checkout@v4
- name: Initialize binfmt_misc (QEMU 10.2.3)
run: docker run --rm --privileged tonistiigi/binfmt:qemu-v10.2.3-68 --install all
- name: Build LoongArch64 SDK image
run: |
curl -fL -o .github/la64/dotnet-sdk-10.0.113-linux-loongarch64.tar.gz \
https://github.com/loongson/dotnet/releases/download/v10.0.113-loongarch64/dotnet-sdk-10.0.113-linux-loongarch64.tar.gz
for i in 1 2; do
echo "=== image build attempt $i ==="
docker build --platform linux/loong64 -t la64-dotnet:10.0.113 .github/la64 && exit 0
echo "image build attempt $i failed"
done
exit 1
- name: JIT Smoke in LoongArch64 Container (AotSmoke 23 场景)
run: |
for i in 1 2 3; do
echo "=== smoke attempt $i ==="
docker run --rm --platform linux/loong64 -v "$PWD:/src" -v "$PWD/.qemu/nuget:/nuget" -w /src la64-dotnet:10.0.113 \
bash -c 'dotnet nuget add source https://lnuget.loongnix.cn/v3/index.json -n loongnuget --allow-insecure-connections || true; dotnet --info; timeout -k 60s 60m dotnet run -c Release --project AotSmoke/AotSmoke.csproj' && exit 0
echo "smoke attempt $i failed"
done
exit 1
|