Skip to content

Build Native Libraries #2

Build Native Libraries

Build Native Libraries #2

Workflow file for this run

name: Build Native Libraries
on:
workflow_dispatch:
inputs:
build-config:
description: 'Build configuration'
required: true
default: 'release'
type: choice
options:
- debug
- release
build-only-linux:
description: 'Build only for Linux'
required: true
default: false
type: boolean
update-unity-native:
description: 'Update pre-built libraries for Unity'
required: true
default: false
type: boolean
workflow_call:
inputs:
build-config:
required: true
type: string
build-only-linux:
required: true
type: boolean
update-unity-native:
required: true
type: boolean
env:
_RUST_BUILD_CONFIG: ${{ inputs.build-config == 'debug' && 'debug' || 'release' }}
_DOTNET_BUILD_CONFIG: ${{ inputs.build-config == 'debug' && 'Debug' || 'Release' }}
jobs:
build-win-x64:
name: Build Native library (win-x64)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: windows-2022
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- uses: Cysharp/Actions/.github/actions/setup-dotnet@main
- run: cargo build --target x86_64-pc-windows-msvc --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: win-x64
path: native/target/x86_64-pc-windows-msvc/${{ env._RUST_BUILD_CONFIG }}/yaha_native.dll
retention-days: 1
- name: Run tests
run: |
dotnet tool restore
dotnet retest -- -c ${{ env._DOTNET_BUILD_CONFIG }} ../test/YetAnotherHttpHandler.Test
build-win-arm64:
name: Build Native library (win-arm64)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: windows-2022
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- uses: Cysharp/Actions/.github/actions/setup-dotnet@main
- run: rustup target add aarch64-pc-windows-msvc
- run: |
$env:Path += ";C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\Llvm\bin"
cargo build --target aarch64-pc-windows-msvc --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: win-arm64
path: native/target/aarch64-pc-windows-msvc/${{ env._RUST_BUILD_CONFIG }}/yaha_native.dll
retention-days: 1
#- name: Run tests
# run: |
# dotnet tool restore
# dotnet retest -- -c ${{ env._DOTNET_BUILD_CONFIG }} ../test/YetAnotherHttpHandler.Test
build-win-arm64-uwp:
name: Build Native library (win-arm64-uwp)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: windows-2022
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- uses: Cysharp/Actions/.github/actions/setup-dotnet@main
- run: rustup toolchain install nightly-2024-07-10-x86_64-pc-windows-msvc
- run: rustup component add rust-src --toolchain nightly-2024-07-10-x86_64-pc-windows-msvc
- run: rustup default nightly-2024-07-10
- run: |
$env:Path += ";C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\Llvm\bin"
cargo -Z build-std build --target aarch64-uwp-windows-msvc --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: win-arm64-uwp
path: native/target/aarch64-uwp-windows-msvc/${{ env._RUST_BUILD_CONFIG }}/yaha_native.dll
retention-days: 1
#- name: Run tests
# run: |
# dotnet tool restore
# dotnet retest -- -c ${{ env._DOTNET_BUILD_CONFIG }} ../test/YetAnotherHttpHandler.Test
build-linux-x64:
name: Build Native library (linux-x64)
permissions:
contents: read
runs-on: ubuntu-24.04
container:
# Needs to lock glibc version to 2.31 (Issue #30)
image: ubuntu:20.04 # Use Ubuntu 20.04 based image
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
# .NET dependencies
# https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu-install?tabs=dotnet8&pivots=os-linux-ubuntu-2004#dependencies-3
- run: |
apt-get update
apt-get install -y \
unzip \
curl \
wget \
git \
autoconf \
build-essential \
ca-certificates \
libc6 \
libgcc-s1 \
libgssapi-krb5-2 \
libicu66 \
libssl1.1 \
libstdc++6 \
tzdata \
zlib1g
working-directory: /
env:
DEBIAN_FRONTEND: noninteractive
- uses: Cysharp/Actions/.github/actions/checkout@main
- uses: Cysharp/Actions/.github/actions/setup-dotnet@main
with:
dotnet-version: 8.0.x
- uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
- run: cargo build --target x86_64-unknown-linux-gnu --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: linux-x64
path: native/target/x86_64-unknown-linux-gnu/${{ env._RUST_BUILD_CONFIG }}/libyaha_native.so
retention-days: 1
- name: Run tests
run: |
dotnet tool restore
dotnet retest -- -c ${{ env._DOTNET_BUILD_CONFIG }} ../test/YetAnotherHttpHandler.Test
build-osx-x64:
name: Build Native library (osx-x64)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: macos-13 # Intel
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- uses: Cysharp/Actions/.github/actions/setup-dotnet@main
- run: rustup target add x86_64-apple-darwin
- run: cargo build --target x86_64-apple-darwin --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: osx-x64
path: native/target/x86_64-apple-darwin/${{ env._RUST_BUILD_CONFIG }}/libyaha_native.dylib
retention-days: 1
- name: Run tests
run: |
dotnet tool restore
dotnet retest -- -c ${{ env._DOTNET_BUILD_CONFIG }} ../test/YetAnotherHttpHandler.Test
build-osx-arm64:
name: Build Native library (osx-arm64)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: macos-15 # Apple Silicon
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- run: rustup target add aarch64-apple-darwin
- run: cargo build --target aarch64-apple-darwin --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: osx-arm64
path: native/target/aarch64-apple-darwin/${{ env._RUST_BUILD_CONFIG }}/libyaha_native.dylib
retention-days: 1
- name: Run tests
run: |
dotnet tool restore
dotnet retest -- -c ${{ env._DOTNET_BUILD_CONFIG }} ../test/YetAnotherHttpHandler.Test
build-osx-universal:
name: Build Native library (osx-universal)
if: ${{ !inputs.build-only-linux }}
needs: [ build-osx-x64, build-osx-arm64 ]
permissions:
contents: read
runs-on: macos-15
timeout-minutes: 30
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- uses: Cysharp/Actions/.github/actions/download-artifact@main
with:
path: native/artifacts
- run: lipo -create -output native/artifacts/yaha_native.bundle native/artifacts/osx-x64/libyaha_native.dylib native/artifacts/osx-arm64/libyaha_native.dylib
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: osx-universal
path: native/artifacts/yaha_native.bundle
retention-days: 1
build-ios-x64:
name: Build Native library (ios-x64)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: macos-15
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- run: rustup target add x86_64-apple-ios
- run: cargo build --target x86_64-apple-ios --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
env:
IPHONEOS_DEPLOYMENT_TARGET: 12.0
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: ios-x64
path: native/target/x86_64-apple-ios/${{ env._RUST_BUILD_CONFIG }}/libyaha_native.a
retention-days: 1
build-ios-arm64:
name: Build Native library (ios-arm64)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: macos-15
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- run: rustup target add aarch64-apple-ios
- run: cargo build --target aarch64-apple-ios --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
env:
IPHONEOS_DEPLOYMENT_TARGET: 12.0
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: ios-arm64
path: native/target/aarch64-apple-ios/${{ env._RUST_BUILD_CONFIG }}/libyaha_native.a
retention-days: 1
build-android-arm:
name: Build Native library (android-arm)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: ubuntu-24.04
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- name: Use latest Android NDK
run: |
echo "ANDROID_NDK=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
echo "ANDROID_NDK_HOME=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
echo "ANDROID_NDK_ROOT=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
- run: sudo apt update && sudo apt install gcc-multilib
- run: rustup target add armv7-linux-androideabi
- run: cargo install cargo-ndk
- run: cargo ndk -t armeabi-v7a build --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: android-arm
path: native/target/armv7-linux-androideabi/${{ env._RUST_BUILD_CONFIG }}/libyaha_native.so
retention-days: 1
build-android-arm64:
name: Build Native library (android-arm64)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: ubuntu-24.04
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- name: Use latest Android NDK
run: |
echo "ANDROID_NDK=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
echo "ANDROID_NDK_HOME=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
echo "ANDROID_NDK_ROOT=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
- run: sudo apt update && sudo apt install gcc-multilib
- run: rustup target add aarch64-linux-android
- run: cargo install cargo-ndk
- run: cargo ndk -t arm64-v8a build --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: android-arm64
path: native/target/aarch64-linux-android/${{ env._RUST_BUILD_CONFIG }}/libyaha_native.so
retention-days: 1
build-android-x64:
name: Build Native library (android-x64)
if: ${{ !inputs.build-only-linux }}
permissions:
contents: read
runs-on: ubuntu-24.04
timeout-minutes: 30
defaults:
run:
working-directory: native
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- name: Use latest Android NDK
run: |
echo "ANDROID_NDK=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
echo "ANDROID_NDK_HOME=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
echo "ANDROID_NDK_ROOT=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
- run: sudo apt update && sudo apt install gcc-multilib
- run: rustup target add x86_64-linux-android
- run: cargo install cargo-ndk
- run: cargo ndk -t x86_64 build --profile ${{ env._RUST_BUILD_CONFIG == 'debug' && 'dev' || env._RUST_BUILD_CONFIG }}
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: android-x64
path: native/target/x86_64-linux-android/${{ env._RUST_BUILD_CONFIG }}/libyaha_native.so
retention-days: 1
build-dotnet:
name: Build and pack .NET library
if: ${{ inputs.build-only-linux && needs.build-linux-x64.result == 'success' || success() }}
needs:
- build-win-x64
- build-win-arm64
- build-win-arm64-uwp
- build-linux-x64
- build-osx-x64
- build-osx-arm64
- build-osx-universal
- build-ios-x64
- build-ios-arm64
- build-android-arm
- build-android-arm64
- build-android-x64
permissions:
contents: read
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- uses: Cysharp/Actions/.github/actions/download-artifact@main
with:
path: native/artifacts
- run: ls -lFaR native/artifacts
- run: dotnet pack -c ${{ env._DOTNET_BUILD_CONFIG }} ./YetAnotherHttpHandler.sln --include-symbols --include-source -o ./publish
#- run: dotnet test -c ${{ env._DOTNET_BUILD_CONFIG }} ./test/YetAnotherHttpHandler.Packaging.Test
- uses: Cysharp/Actions/.github/actions/upload-artifact@main
with:
name: nuget-packages
path: ./publish/
retention-days: 7
update-unity-native:
name: Update pre-built libraries for Unity
if: ${{ inputs.update-unity-native && (inputs.build-only-linux && needs.build-dotnet.result == 'success' || success()) }}
needs: [ build-dotnet ]
permissions:
contents: write
runs-on: ubuntu-24.04
timeout-minutes: 15
steps:
- uses: Cysharp/Actions/.github/actions/checkout@main
- uses: Cysharp/Actions/.github/actions/download-artifact@main
with:
name: nuget-packages
path: ./publish/
- run: unzip -o ./publish/YetAnotherHttpHandler.*[0-9].nupkg 'runtimes/*' -d src/YetAnotherHttpHandler/Plugins/Cysharp.Net.Http.YetAnotherHttpHandler.Native/ || true
- run: |
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git commit -m "Update pre-built native libraries" src/YetAnotherHttpHandler/Plugins/**/*
git push origin ${{ github.ref_name }}