From cfef57e50096f423529386f09d7b5e42c8af6be7 Mon Sep 17 00:00:00 2001 From: geruipu Date: Mon, 5 Oct 2026 13:41:10 +0800 Subject: [PATCH] Fix Native linker tools, macOS-only validation and package metadata --- .github/workflows/nuget-avalonia-native.yml | 3 +++ .github/workflows/zig-toolchain-image.yml | 7 ++++++- build/linux-toolchain/Dockerfile | 2 +- build/linux-toolchain/validate-toolchain.py | 6 ++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nuget-avalonia-native.yml b/.github/workflows/nuget-avalonia-native.yml index 0686485..5563a0b 100644 --- a/.github/workflows/nuget-avalonia-native.yml +++ b/.github/workflows/nuget-avalonia-native.yml @@ -100,6 +100,8 @@ jobs: contents: read packages: write uses: ./.github/workflows/zig-toolchain-image.yml + with: + validation_rids: '["osx-x64","osx-arm64"]' build: needs: [detect, toolchain] @@ -187,6 +189,7 @@ jobs: mkdir -p "External/AvaloniaNative/$rid/native" cp "artifacts/native/native-avalonia-${{ matrix.version.avalonia_version }}-$rid/libAvaloniaNative.a" "External/AvaloniaNative/$rid/native/" cp "artifacts/native/native-avalonia-${{ matrix.version.avalonia_version }}-$rid/macos_font_preinit.o" "External/AvaloniaNative/$rid/native/" + cp "artifacts/native/native-avalonia-${{ matrix.version.avalonia_version }}-$rid/avalonia-native-build.json" "External/AvaloniaNative/$rid/native/" done - name: Pack StaticLink.Avalonia.Native diff --git a/.github/workflows/zig-toolchain-image.yml b/.github/workflows/zig-toolchain-image.yml index 6b2aa9d..3492b60 100644 --- a/.github/workflows/zig-toolchain-image.yml +++ b/.github/workflows/zig-toolchain-image.yml @@ -2,6 +2,10 @@ name: pinned-zig-toolchain-image on: workflow_call: + inputs: + validation_rids: + type: string + default: '[]' outputs: image: description: Immutable Debian 12 Zig toolchain image reference @@ -26,6 +30,7 @@ jobs: GH_TOKEN: ${{ github.token }} ACTOR: ${{ github.actor }} REPOSITORY: ${{ github.repository }} + VALIDATION_RIDS: ${{ inputs.validation_rids || '[]' }} BASE_HASH: ${{ hashFiles('build/linux-toolchain/Dockerfile') }} RECIPE_HASH: ${{ hashFiles('build/linux-toolchain/Dockerfile*', 'build/linux-toolchain/*.py', 'build/linux-toolchain/*.c', 'build/linux-toolchain/*.gn.in', 'build/linux-toolchain/*lock.json', 'build/linux-toolchain/versions/*.json', 'build/linux-toolchain/patches/**') }} run: | @@ -55,7 +60,7 @@ jobs: docker run --rm --user "$(id -u):$(id -g)" \ -e HOME=/tmp -e DOTNET_CLI_HOME=/tmp -e ZIG_GLOBAL_CACHE_DIR=/tmp/zig-cache \ -v "$PWD/artifacts/toolchain-environment:/validation" \ - --entrypoint python3 "$image" /opt/staticlink/validate-toolchain.py --output /validation + --entrypoint python3 "$image" /opt/staticlink/validate-toolchain.py --output /validation --rids "$VALIDATION_RIDS" if [ "$built_image" = true ]; then docker push "$image" docker pull "$image" diff --git a/build/linux-toolchain/Dockerfile b/build/linux-toolchain/Dockerfile index af1e38a..f3c1a0f 100644 --- a/build/linux-toolchain/Dockerfile +++ b/build/linux-toolchain/Dockerfile @@ -21,7 +21,7 @@ RUN rm -f /etc/apt/sources.list.d/debian.sources \ pkg-config cmake binutils file unzip xz-utils bzip2 patch \ libfontconfig1-dev libglib2.0-dev libgl1-mesa-dev libpci-dev \ libx11-dev libxcb1-dev libxext-dev libwayland-dev libexpat1-dev libicu72 libssl3 \ - && for tool in clang clang++ llvm-ar llvm-ranlib llvm-nm; do \ + && for tool in clang clang++ llvm-ar llvm-ranlib llvm-nm lld ld.lld lld-link ld64.lld; do \ ln -s "/usr/bin/$tool-16" "/usr/local/bin/$tool"; \ done \ && mkdir -p /opt/staticlink \ diff --git a/build/linux-toolchain/validate-toolchain.py b/build/linux-toolchain/validate-toolchain.py index 92092ba..fd4742b 100644 --- a/build/linux-toolchain/validate-toolchain.py +++ b/build/linux-toolchain/validate-toolchain.py @@ -20,6 +20,7 @@ def run(command): def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--rids", default="[]") args = parser.parse_args() args.output.mkdir(parents=True, exist_ok=True) report = {"python": sys.version, "targets": {}, "passed": False} @@ -41,6 +42,11 @@ def main(): raise RuntimeError("Missing .NET SDK " + major) adapter = Path(__file__).with_name("zig-cross.py") targets = runpy.run_path(str(adapter))["TARGETS"] + requested = json.loads(args.rids) + if not isinstance(requested, list) or any(rid not in targets for rid in requested): + raise ValueError("Expected a JSON array of supported RIDs") + if requested: + targets = {rid: targets[rid] for rid in requested} sdk = Path("/opt/macos-sdk/MacOSX15.5.sdk") if json.loads((sdk / "SDKSettings.json").read_text())["Version"] != "15.5": raise RuntimeError("Unexpected macOS SDK version")