From da42e2986d18ab4bcac9967990fc634e032a10f3 Mon Sep 17 00:00:00 2001 From: Maciej Dudkowski Date: Mon, 20 Oct 2025 14:16:01 -0400 Subject: [PATCH] Support Windows ARM --- .github/workflows/ci.yml | 4 +++- .github/workflows/package.yml | 18 ++++++++++++------ README.md | 6 +++--- src/Temporalio/Temporalio.csproj | 3 +++ 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 26d033eb7..1b0615beb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, ubuntu-arm, macos-intel, macos-arm, windows-latest] + os: [ubuntu-latest, ubuntu-arm, macos-intel, macos-arm, windows-latest, windows-arm] include: - os: windows-latest checkTarget: true @@ -29,6 +29,8 @@ jobs: runsOn: macos-15-intel - os: macos-arm runsOn: macos-14 + - os: windows-arm + runsOn: windows-11-arm runs-on: ${{ matrix.runsOn || matrix.os }} steps: - name: Checkout repository diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 7600ce85c..bcb42c59c 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, ubuntu-arm, alpine-latest, macos-intel, macos-arm, windows-latest] + os: [ubuntu-latest, ubuntu-arm, alpine-latest, macos-intel, macos-arm, windows-latest, windows-arm] include: - os: ubuntu-latest out-file: libtemporal_sdk_core_c_bridge.so @@ -44,6 +44,10 @@ jobs: - os: windows-latest out-file: temporal_sdk_core_c_bridge.dll out-prefix: win-x64 + - os: windows-arm + out-file: temporal_sdk_core_c_bridge.dll + out-prefix: win-arm64 + runsOn: windows-11-arm runs-on: ${{ matrix.runsOn || matrix.os }} steps: - name: Checkout repository @@ -153,7 +157,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, ubuntu-arm, alpine-latest, macos-intel, macos-arm, windows-latest] + os: [ubuntu-latest, ubuntu-arm, alpine-latest, macos-intel, macos-arm, windows-latest, windows-arm] include: - os: ubuntu-arm runsOn: ubuntu-24.04-arm64-2-core @@ -164,6 +168,8 @@ jobs: runsOn: macos-13 - os: macos-arm runsOn: macos-14 + - os: windows-arm + runsOn: windows-11-arm runs-on: ${{ matrix.runsOn || matrix.os }} container: ${{ matrix.container }} steps: @@ -191,22 +197,22 @@ jobs: run: apk add dotnet6-sdk - name: Run smoke test (non-Windows) - if: ${{ matrix.os != 'windows-latest' }} + if: ${{ matrix.os != 'windows-latest' && matrix.os != 'windows-arm' }} run: | dotnet add tests/Temporalio.SmokeTest package Temporalio -s "$GITHUB_WORKSPACE/nuget-package/Temporalio/bin/Release;https://api.nuget.org/v3/index.json" --prerelease dotnet run --project tests/Temporalio.SmokeTest - name: Run smoke test (Windows) - if: ${{ matrix.os == 'windows-latest' }} + if: ${{ matrix.os == 'windows-latest' || matrix.os == 'windows-arm' }} run: | dotnet add tests/Temporalio.SmokeTest package Temporalio -s "$env:GITHUB_WORKSPACE/nuget-package/Temporalio/bin/Release;https://api.nuget.org/v3/index.json" --prerelease dotnet run --project tests/Temporalio.SmokeTest - - name: Setup msbuild (Windows only) + - name: Setup msbuild (Windows x64 only) if: ${{ matrix.os == 'windows-latest' }} uses: microsoft/setup-msbuild@v2 - - name: Run .NET framework smoke test (Windows only) + - name: Run .NET framework smoke test (Windows x64 only) if: ${{ matrix.os == 'windows-latest' }} run: | dotnet add tests/Temporalio.SmokeTestDotNetFramework package Temporalio -s "$env:GITHUB_WORKSPACE/nuget-package/Temporalio/bin/Release;https://api.nuget.org/v3/index.json" --prerelease diff --git a/README.md b/README.md index 30771a05a..d0a8d3250 100644 --- a/README.md +++ b/README.md @@ -1203,9 +1203,9 @@ This SDK requires a built-in unmanaged, native shared library built in Rust. It on a common platform. If you are using .NET framework, you may have to explicitly set the platform to `x64` or `arm64` because `AnyCPU` will not choose the proper library. -Currently we only support [RIDs](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog) `linux-arm64`, -`linux-x64`, `linux-musl-x64`, `osx-arm64`, `osx-x64`, and `win-x64`. Any other platforms needed (e.g. `linux-musl-x64` -on Alpine) will require a custom build. +Currently we only support [RIDs](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog) +`linux-arm64`, `linux-x64`, `linux-musl-x64`, `osx-arm64`, `osx-x64`, `win-arm64`, and `win-x64`. +Any other platforms needed will require a custom build. The native shared library on Windows does require a Visual C++ runtime. Some containers, such as Windows Nano Server, do not include this runtime. If not available, users may have to manually copy this runtime (usually just diff --git a/src/Temporalio/Temporalio.csproj b/src/Temporalio/Temporalio.csproj index a714cb98b..df5b15d27 100644 --- a/src/Temporalio/Temporalio.csproj +++ b/src/Temporalio/Temporalio.csproj @@ -103,6 +103,9 @@ runtimes/win-x64/native/temporal_sdk_core_c_bridge.dll + + runtimes/win-arm64/native/temporal_sdk_core_c_bridge.dll +