Skip to content

Commit 9bc5c21

Browse files
authored
chore(RID): add musl-arm-64 RID build support #597 (#598)
1 parent a0a70a1 commit 9bc5c21

3 files changed

Lines changed: 33 additions & 9 deletions

File tree

.github/workflows/package.yml

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ jobs:
1818
ubuntu-latest,
1919
ubuntu-arm,
2020
alpine-latest,
21+
alpine-arm,
2122
macos-intel,
2223
macos-arm,
2324
windows-latest,
@@ -44,6 +45,13 @@ jobs:
4445
container: mcr.microsoft.com/dotnet/sdk:10.0-alpine
4546
protobuf-url: https://github.com/protocolbuffers/protobuf/releases/download/v22.3/protoc-22.3-linux-x86_64.zip
4647
runsOn: ubuntu-latest
48+
- os: alpine-arm
49+
out-file: libtemporalio_sdk_core_c_bridge.so
50+
out-prefix: linux-musl-arm64
51+
# Need Alpine container since GH runner doesn't have one
52+
container: mcr.microsoft.com/dotnet/sdk:10.0-alpine
53+
protobuf-url: https://github.com/protocolbuffers/protobuf/releases/download/v22.3/protoc-22.3-linux-aarch_64.zip
54+
runsOn: ubuntu-24.04-arm64-2-core
4755
- os: macos-intel
4856
out-file: libtemporalio_sdk_core_c_bridge.dylib
4957
out-prefix: osx-x64
@@ -92,7 +100,7 @@ jobs:
92100
run: cargo build --manifest-path src/Temporalio/Bridge/sdk-core/crates/sdk-core-c-bridge/Cargo.toml --profile release-lto
93101

94102
- name: Build (Docker non-Alpine)
95-
if: ${{ matrix.container && matrix.os != 'alpine-latest' }}
103+
if: ${{ matrix.container && matrix.os != 'alpine-latest' && matrix.os != 'alpine-arm' }}
96104
run: |
97105
docker run --rm -v "$(pwd):/workspace" -w /workspace \
98106
${{ matrix.container }} \
@@ -106,7 +114,7 @@ jobs:
106114
'
107115
108116
- name: Build (Docker Alpine)
109-
if: ${{ matrix.container && matrix.os == 'alpine-latest' }}
117+
if: ${{ matrix.container && (matrix.os == 'alpine-latest' || matrix.os == 'alpine-arm') }}
110118
run: |
111119
docker run --rm -v "$(pwd):/workspace" -w /workspace \
112120
${{ matrix.container }} \
@@ -175,6 +183,7 @@ jobs:
175183
ubuntu-latest,
176184
ubuntu-arm,
177185
alpine-latest,
186+
alpine-arm,
178187
macos-intel,
179188
macos-arm,
180189
windows-latest,
@@ -184,16 +193,17 @@ jobs:
184193
- os: ubuntu-arm
185194
runsOn: ubuntu-24.04-arm64-2-core
186195
- os: alpine-latest
187-
container: mcr.microsoft.com/dotnet/sdk:10.0-alpine
188196
runsOn: ubuntu-latest
197+
- os: alpine-arm
198+
# Run in Docker manually to avoid JS action limitations on ARM64
199+
runsOn: ubuntu-24.04-arm64-2-core
189200
- os: macos-intel
190201
runsOn: macos-15-intel
191202
- os: macos-arm
192203
runsOn: macos-14
193204
- os: windows-arm
194205
runsOn: windows-11-arm
195206
runs-on: ${{ matrix.runsOn || matrix.os }}
196-
container: ${{ matrix.container }}
197207
steps:
198208
- name: Checkout repository
199209
uses: actions/checkout@v4
@@ -208,20 +218,31 @@ jobs:
208218

209219
- name: Setup .NET (non-Alpine)
210220
uses: actions/setup-dotnet@v4
211-
if: ${{ matrix.os != 'alpine-latest' }}
221+
if: ${{ !contains(matrix.os, 'alpine') }}
212222
with:
213223
# Specific .NET version required because GitHub macos ARM image has
214224
# bad pre-installed .NET version
215225
dotnet-version: 10.x
216226

217-
- name: Run smoke test (non-Windows)
218-
if: ${{ matrix.os != 'windows-latest' && matrix.os != 'windows-arm' }}
227+
- name: Run smoke test (Alpine)
228+
if: ${{ contains(matrix.os, 'alpine') }}
229+
# Use Docker specifically for Alpine ARM 64 to avoid JS action limitations
230+
run: |
231+
docker run --rm -v "$(pwd):/workspace" -w /workspace \
232+
mcr.microsoft.com/dotnet/sdk:10.0-alpine \
233+
sh -c ' \
234+
dotnet add tests/Temporalio.SmokeTest package Temporalio -s "/workspace/nuget-package/Temporalio/bin/Release;https://api.nuget.org/v3/index.json" --prerelease \
235+
&& dotnet run --project tests/Temporalio.SmokeTest \
236+
'
237+
238+
- name: Run smoke test (Linux/macOS)
239+
if: ${{ !contains(matrix.os, 'alpine') && !contains(matrix.os, 'windows') }}
219240
run: |
220241
dotnet add tests/Temporalio.SmokeTest package Temporalio -s "$GITHUB_WORKSPACE/nuget-package/Temporalio/bin/Release;https://api.nuget.org/v3/index.json" --prerelease
221242
dotnet run --project tests/Temporalio.SmokeTest
222243
223244
- name: Run smoke test (Windows)
224-
if: ${{ matrix.os == 'windows-latest' || matrix.os == 'windows-arm' }}
245+
if: ${{ contains(matrix.os, 'windows') }}
225246
run: |
226247
dotnet add tests/Temporalio.SmokeTest package Temporalio -s "$env:GITHUB_WORKSPACE/nuget-package/Temporalio/bin/Release;https://api.nuget.org/v3/index.json" --prerelease
227248
dotnet run --project tests/Temporalio.SmokeTest

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1210,7 +1210,7 @@ on a common platform. If you are using .NET framework, you may have to explicitl
12101210
because `AnyCPU` will not choose the proper library.
12111211

12121212
Currently we only support [RIDs](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog)
1213-
`linux-arm64`, `linux-x64`, `linux-musl-x64`, `osx-arm64`, `osx-x64`, `win-arm64`, and `win-x64`.
1213+
`linux-arm64`, `linux-x64`, `linux-musl-arm64`, `linux-musl-x64`, `osx-arm64`, `osx-x64`, `win-arm64`, and `win-x64`.
12141214
Any other platforms needed will require a custom build.
12151215

12161216
The native shared library on Windows does require a Visual C++ runtime. Some containers, such as Windows Nano Server, do

src/Temporalio/Temporalio.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@
9494
<Content Include="$(BridgeLibraryRoot)/linux-musl-x64-bridge/libtemporalio_sdk_core_c_bridge.so">
9595
<PackagePath>runtimes/linux-musl-x64/native/libtemporalio_sdk_core_c_bridge.so</PackagePath>
9696
</Content>
97+
<Content Include="$(BridgeLibraryRoot)/linux-musl-arm64-bridge/libtemporalio_sdk_core_c_bridge.so">
98+
<PackagePath>runtimes/linux-musl-arm64/native/libtemporalio_sdk_core_c_bridge.so</PackagePath>
99+
</Content>
97100
<Content Include="$(BridgeLibraryRoot)/osx-x64-bridge/libtemporalio_sdk_core_c_bridge.dylib">
98101
<PackagePath>runtimes/osx-x64/native/libtemporalio_sdk_core_c_bridge.dylib</PackagePath>
99102
</Content>

0 commit comments

Comments
 (0)