# Copyright (c) Microsoft Corporation. All rights reserved. # name: bindings/csharp on: workflow_dispatch: push: branches: [ "main" ] pull_request: branches: [ "main" ] schedule: # Run at 8:00 AM every day - cron: "0 8 * * *" env: VersionSuffix: ${{ github.event_name == 'workflow_dispatch' && 'manualtrigger' || null }} jobs: build-ffi: name: 'Build Regorus FFI: (${{ matrix.runtime.target }})' runs-on: ${{ matrix.runtime.os }} strategy: # let us get failures from other jobs even if one fails fail-fast: false matrix: runtime: - os: windows-latest target: x86_64-pc-windows-msvc libpath: | **/release/regorus_ffi.dll **/release/regorus_ffi.pdb - os: ubuntu-latest target: x86_64-unknown-linux-gnu libpath: | **/release/libregorus_ffi.so - os: macos-latest target: aarch64-apple-darwin libpath: | **/release/libregorus_ffi.dylib steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - uses: ./.github/actions/toolchains/rust with: targets: ${{ matrix.runtime.target }} - name: Cache cargo uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 with: shared-key: ${{ runner.os }}-regorus - name: Fetch dependencies run: cargo fetch --locked - name: Fetch FFI crate dependencies run: cargo fetch --locked --manifest-path bindings/ffi/Cargo.toml --target ${{ matrix.runtime.target }} - name: Build Regorus FFI via xtask run: cargo xtask build-ffi --release --target ${{ matrix.runtime.target }} - name: Upload regorus ffi shared library uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: regorus-ffi-artifacts-${{ matrix.runtime.target }} # Note: The full path of each artifact relative to . is preserved. path: ${{ matrix.runtime.libpath }} if-no-files-found: error retention-days: 1 build-csharp: name: 'Build Regorus nuget' runs-on: ubuntu-latest needs: build-ffi steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - uses: ./.github/actions/toolchains/rust - uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0 with: global-json-file: ./bindings/csharp/global.json - run: echo '${{ steps.stepid.outputs.dotnet-version }}' - name: Cache cargo uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 with: shared-key: ${{ runner.os }}-regorus - name: Fetch dependencies run: cargo fetch --locked - name: Download regorus ffi shared libraries uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: pattern: regorus-ffi-artifacts-* merge-multiple: true path: ./bindings/csharp/Regorus/tmp - name: Display regorus ffi artifacts run: ls -R ./bindings/csharp/Regorus/tmp - name: Build Regorus nuget via xtask run: cargo xtask build-csharp --release --clean --artifacts-dir ./bindings/csharp/Regorus/tmp/bindings/ffi/target --enforce-artifacts --repository-commit ${{ github.sha }} --include-symbols - name: Upload Regorus nuget uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: regorus-nuget path: | bindings/csharp/Regorus/bin/Release/Microsoft.Regorus*.nupkg bindings/csharp/Regorus/bin/Release/Microsoft.Regorus*.snupkg if-no-files-found: error retention-days: 1 test-nuget: name: 'Test Regorus Nuget: (${{ matrix.runtime.target }})' needs: build-csharp runs-on: ${{ matrix.runtime.os }} strategy: # let us get failures from other jobs even if one fails fail-fast: false matrix: runtime: - os: windows-latest target: x86_64-pc-windows-msvc - os: ubuntu-latest target: x86_64-unknown-linux-gnu - os: macos-latest target: aarch64-apple-darwin steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - uses: ./.github/actions/toolchains/rust - uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0 with: global-json-file: ./bindings/csharp/global.json - run: echo '${{ steps.stepid.outputs.dotnet-version }}' - name: Cache cargo uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 with: shared-key: ${{ runner.os }}-regorus - name: Fetch dependencies run: cargo fetch --locked - name: Download regorus nuget uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: regorus-nuget path: ./bindings/csharp/Regorus/bin/Release - name: Display regorus nuget run: ls -R ./bindings/csharp/Regorus/bin/Release - name: Run C# tests via xtask run: cargo xtask test-csharp --release --clean --nuget-dir bindings/csharp/Regorus/bin/Release