Update Rust dependencies #108
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Package | |
on: | |
push: | |
branches: | |
- main | |
- "releases/*" | |
jobs: | |
build-bridge-libraries: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, ubuntu-arm, macos-intel, macos-arm, windows-latest] | |
include: | |
- os: ubuntu-latest | |
out-file: libtemporal_sdk_bridge.so | |
out-prefix: linux-x64 | |
# We use the Python manylinux image for glibc compatibility | |
container: quay.io/pypa/manylinux2014_x86_64 | |
protobuf-url: https://github.com/protocolbuffers/protobuf/releases/download/v22.3/protoc-22.3-linux-x86_64.zip | |
curl-download: https://github.com/stunnel/static-curl/releases/download/8.8.0/curl-linux-x86_64-8.8.0.tar.xz | |
- os: ubuntu-arm | |
out-file: libtemporal_sdk_bridge.so | |
out-prefix: linux-arm64 | |
runsOn: buildjet-4vcpu-ubuntu-2204-arm | |
# We use the Python manylinux image for glibc compatibility | |
container: quay.io/pypa/manylinux2014_aarch64 | |
protobuf-url: https://github.com/protocolbuffers/protobuf/releases/download/v22.3/protoc-22.3-linux-aarch_64.zip | |
curl-download: https://github.com/stunnel/static-curl/releases/download/8.8.0/curl-linux-aarch64-8.8.0.tar.xz | |
- os: macos-intel | |
out-file: libtemporal_sdk_bridge.dylib | |
out-prefix: osx-x64 | |
runsOn: macos-12 | |
- os: macos-arm | |
out-file: libtemporal_sdk_bridge.dylib | |
out-prefix: osx-arm64 | |
runsOn: macos-14 | |
- os: windows-latest | |
out-file: temporal_sdk_bridge.dll | |
out-prefix: win-x64 | |
runs-on: ${{ matrix.runsOn || matrix.os }} | |
container: ${{ matrix.container }} | |
env: | |
# This is required to allow continuing usage of Node 16 for actions, | |
# as Node 20 won't run on the docker image we use for linux builds | |
# (Node 20 require glibc 2.28+, but container image has glibc 2.17). | |
# https://github.blog/changelog/2024-05-17-updated-dates-for-actions-runner-using-node20-instead-of-node16-by-default/ | |
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true | |
steps: | |
- name: Checkout repository | |
# FIXME: v4+ requires Node 20 | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
# Need to update cURL on Linux for the Rust install step | |
- name: Update cURL | |
if: ${{ matrix.curl-download }} | |
run: | | |
curl --fail -L "${{ matrix.curl-download }}" -o curl.tar.xz | |
tar -xJvf curl.tar.xz -C /usr/local/bin | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: stable | |
- name: Setup Rust cache | |
# FIXME: v2.7.2+ requires Node 20 | |
# Fixed version due to https://github.com/Swatinem/rust-cache/issues/183#issuecomment-1893979126 | |
uses: Swatinem/rust-cache@v2.7.1 | |
with: | |
workspaces: src/Temporalio/Bridge | |
key: ${{ matrix.os }} | |
- name: Install protoc | |
# FIXME: v3+ requires Node 20 | |
uses: arduino/setup-protoc@v2 | |
with: | |
version: "23.x" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build | |
run: cargo build --manifest-path src/Temporalio/Bridge/Cargo.toml --release | |
- name: Upload bridge library | |
# FIXME: v4+ requires Node 20 | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.out-prefix }}-bridge | |
path: src/Temporalio/Bridge/target/release/${{ matrix.out-file }} | |
build-nuget-package: | |
needs: | |
- build-bridge-libraries | |
runs-on: windows-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Download bridge libraries | |
# Need v3 here to stay compatible with the compile-native-binaries job. | |
uses: actions/download-artifact@v3-node20 | |
with: | |
path: bridge-libraries | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
- name: Build package | |
run: dotnet pack -c Release /p:BridgeLibraryRoot=${{ github.workspace }}/bridge-libraries | |
- name: Upload NuGet artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: nuget-package | |
path: | | |
src/Temporalio/bin/Release/*.nupkg | |
src/Temporalio/bin/Release/*.snupkg | |
src/Temporalio.Extensions.DiagnosticSource/bin/Release/*.nupkg | |
src/Temporalio.Extensions.DiagnosticSource/bin/Release/*.snupkg | |
src/Temporalio.Extensions.Hosting/bin/Release/*.nupkg | |
src/Temporalio.Extensions.Hosting/bin/Release/*.snupkg | |
src/Temporalio.Extensions.OpenTelemetry/bin/Release/*.nupkg | |
src/Temporalio.Extensions.OpenTelemetry/bin/Release/*.snupkg | |
run-smoke-test: | |
needs: | |
- build-nuget-package | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, ubuntu-arm, macos-intel, macos-arm, windows-latest] | |
include: | |
- os: ubuntu-arm | |
runsOn: buildjet-4vcpu-ubuntu-2204-arm | |
- os: macos-intel | |
runsOn: macos-12 | |
- os: macos-arm | |
runsOn: macos-14 | |
runs-on: ${{ matrix.runsOn || matrix.os }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Download NuGet artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: nuget-package | |
path: nuget-package | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
# Specific .NET version required because GitHub macos ARM image has | |
# bad pre-installed .NET version | |
dotnet-version: 6.x | |
- name: Run smoke test | |
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: Setup msbuild (Windows only) | |
if: ${{ matrix.os == 'windows-latest' }} | |
uses: microsoft/setup-msbuild@v2 | |
- name: Run .NET framework smoke test (Windows only) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
dotnet add tests/Temporalio.SmokeTestDotNetFramework package Temporalio -s "${{ github.workspace }}/nuget-package/Temporalio/bin/Release;https://api.nuget.org/v3/index.json" --prerelease | |
msbuild tests/Temporalio.SmokeTestDotNetFramework -t:restore,build -p:Platform=x64 | |
tests/Temporalio.SmokeTestDotNetFramework/bin/x64/Debug/Temporalio.SmokeTestDotNetFramework.exe |