Skip to content

Commit 5b38f3c

Browse files
committed
feat: linux arm64 support & musl detection
## Rationale pact-reference has introduced musl and arm64 based ffi libraries for linux - pact-foundation/pact-reference#416 Tracking Issue - pact-foundation/roadmap#30 ## Issues Resolved fixes pact-foundation#498 fixes pact-foundation#496 fixes pact-foundation#500 fixes pact-foundation#374 fixes pact-foundation#387 ## Backwards Compatibility Linux glibc based hosts take precedence, so if any error occurs during musl detection. I do not anticipate breaking changes for users ## Implementation notes ### .NET notes - Docs - [Uses MSBuild Exec task](https://learn.microsoft.com/en-us/visualstudio/msbuild/exec-task?view=vs-2022) - MSBuild Blog Posts - [Cross-Platform Build Events in .NET Core using MSBuild](https://jeremybytes.blogspot.com/2020/05/cross-platform-build-events-in-net-core.html) - [MSBuild 101: Using the exit code from a command](https://www.creepingcoder.com/2020/06/01/msbuild-101-using-the-exit-code-from-a-command/) - Stack OverFlow - [Set PropertyGroup property to Exec output](https://stackoverflow.com/questions/76583824/set-propertygroup-property-to-exec-output) - .NET runtime musl detection code - https://github.com/dotnet/runtime/blob/a50ba0669353893ca8ade8568b0a7d210b5a425f/src/mono/llvm/llvm-init.proj\#L7 - https://github.com/dotnet/runtime/blob/a50ba0669353893ca8ade8568b0a7d210b5a425f/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Unix.cs\#L78t ### Conditions for execution musl detection will run if - if linux - if /lib/ld-musl-(x86_64|aarch64).so.1 exists - if ldd bin/sh | grep musl is true (musl lib is loaded, rather than glibc) will continue on error, reverting back to glibc based libaries. ### Supported musl targets should work for multiple musl based distroes if - /lib/ld-musl-(x86_64|aarch64).so.1 exists - ldd is available (available by default in alpine images) Tested on Alpine ARM64 / AMD64. ## Caveats - [.NET does not run under QEMU](https://github.com/dotnet/core/blob/main/release-notes/8.0/supported-os.md#qemu) affecting the ability to test multi-arch from a single system - .NET restore can take a long time when running under containers. - [Workaround](NuGet/Home#13062 (comment)): Set `DOTNET_NUGET_SIGNATURE_VERIFICATION` to `false` ## Compatibility ### Operating System Due to using a shared native library instead of C# for the main Pact logic only certain OSs are supported: | OS | Arch | Support | | ------------ | ----------- | -------------------------------------------------------------------| | Windows | x86 | ❌ No | | Windows | x64 | ✔️ Yes | | Linux (libc) | x86 | ❌ No | | Linux (libc) | x64 | ✔️ Yes | | Linux (musl) | x64 | ✔️ Yes (Tier 2)* | | Linux (libc) | ARM | ✔️ Yes (Tier 3)* | | Linux (musl) | ARM | ✔️ Yes (Tier 3)* | | OSX | x64 | ✔️ Yes | | OSX | ARM (M1/M2) | ✔️ Yes | #### Support - Tier 1 - Established - Full CI/CD support. - Users should not encounter issues - Full reproducible examples running in CI, should be provided by users raising issues - If using musl targets, users should attempt the same test on a libc target (such as debian) - Tier 2 - Recently introduced - Full CI/CD support. - Users may encounter issues - Full reproducible examples running in CI, should be provided by users raising issues - If using musl targets, users should attempt the same test on a libc target (such as debian) - Tier 3 - Recently introduced, No/limited CI/CD support. - Users may encounter issues - Full reproducible examples which can be run by maintainers locally, should be provided by users raising issues
1 parent 09ee818 commit 5b38f3c

14 files changed

+221
-66
lines changed

.cirrus.yml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
BUILD_TEST_TASK_TEMPLATE: &BUILD_TEST_TASK_TEMPLATE
2+
arch_check_script: |
3+
uname -m
4+
ffi_download_script: |
5+
chmod +x build/download-native-libs.sh
6+
build/download-native-libs.sh
7+
restore_script: |
8+
dotnet restore
9+
build_script: |
10+
dotnet build --no-restore
11+
test_script: |
12+
dotnet test --no-build --verbosity normal
13+
pack_script: |
14+
dotnet pack --verbosity normal -c Release --no-restore --include-source --version-suffix alpha.123 -o ./dist
15+
16+
linux_arm64_task:
17+
arm_container:
18+
image: mcr.microsoft.com/dotnet/sdk:8.0
19+
<< : *BUILD_TEST_TASK_TEMPLATE
20+
21+
linux_arm64_alpine_task:
22+
arm_container:
23+
image: mcr.microsoft.com/dotnet/sdk:8.0-alpine
24+
setup_alpine_script: apk add curl bash gzip
25+
<< : *BUILD_TEST_TASK_TEMPLATE

.github/workflows/ci.yml

+52-3
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ env:
1010

1111
jobs:
1212
build-dotnet:
13-
name: "Build and Test (dotnet)"
13+
name: ${{ matrix.arch }}-${{ matrix.os }}-build-dotnet
1414
strategy:
15+
fail-fast: false
1516
matrix:
1617
os:
1718
- windows-latest
@@ -43,8 +44,8 @@ jobs:
4344
build/windows
4445
4546
- name: Pull interop dependencies
46-
run: bash -c "build/download-native-libs.sh"
4747
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
48+
run: bash -c "build/download-native-libs.sh"
4849

4950
- name: Restore
5051
run: dotnet restore
@@ -66,8 +67,56 @@ jobs:
6667
name: nupkgs
6768
path: ./dist/*.*
6869

70+
build-dotnet-containers:
71+
runs-on: ubuntu-latest
72+
name: ${{ matrix.arch }}-${{ matrix.distro }}-build-dotnet-container
73+
strategy:
74+
fail-fast: false
75+
matrix:
76+
arch:
77+
- amd64
78+
# - arm64
79+
distro:
80+
- "mcr.microsoft.com/dotnet/sdk:8.0"
81+
- "mcr.microsoft.com/dotnet/sdk:8.0-alpine"
82+
83+
steps:
84+
- uses: actions/checkout@v4
85+
- name: Set up QEMU
86+
if: matrix.arch != 'amd64'
87+
uses: docker/setup-qemu-action@v1
88+
with:
89+
platforms: ${{ matrix.arch }}
90+
91+
- name: Docker dependencies
92+
id: docker_commands
93+
shell: bash
94+
run: |
95+
if [[ ${{ matrix.distro }} == *"alpine"* ]]; then
96+
echo "deps=apk add --no-cache curl bash gzip && " >> "$GITHUB_OUTPUT"
97+
else
98+
echo "deps=" >> "$GITHUB_OUTPUT"
99+
fi
100+
101+
- name: Restore, Build & Test
102+
run: |
103+
docker run \
104+
--rm \
105+
-v $(pwd):/${{ github.workspace }} \
106+
-w ${{ github.workspace }} \
107+
--platform linux/${{ matrix.arch }} \
108+
--entrypoint /bin/sh \
109+
${{ matrix.distro }} \
110+
-c '${{ steps.docker_commands.outputs.deps }} \
111+
build/download-native-libs.sh && \
112+
dotnet restore && dotnet build --no-restore && \
113+
dotnet test --no-build --verbosity normal'
114+
69115
release:
70-
needs: build-dotnet
116+
needs: [
117+
build-dotnet,
118+
build-dotnet-containers
119+
]
71120
if: github.ref_type == 'tag'
72121
runs-on: ubuntu-latest
73122
steps:

README.md

+27-7
Original file line numberDiff line numberDiff line change
@@ -235,14 +235,34 @@ Due to using a shared native library instead of C# for the main Pact logic only
235235
| OS | Arch | Support |
236236
| ------------ | ----------- | -------------------------------------------------------------------|
237237
| Windows | x86 | ❌ No |
238-
| Windows | x64 | ✔️ Yes |
239-
| Linux (libc) | ARM | ❌ No |
238+
| Windows | x64 | ✔️ Yes |
240239
| Linux (libc) | x86 | ❌ No |
241-
| Linux (libc) | x64 | ✔️ Yes |
242-
| Linux (musl) | Any |[No](https://github.com/pact-foundation/pact-net/issues/374) |
243-
| OSX | x64 | ✔️ Yes |
244-
| OSX | ARM (M1/M2) | ✔️ Yes |
245-
240+
| Linux (libc) | x64 | ✔️ Yes |
241+
| Linux (musl) | x64 | ✔️ Yes (Tier 2)* |
242+
| Linux (libc) | ARM | ✔️ Yes (Tier 3)* |
243+
| Linux (musl) | ARM | ✔️ Yes (Tier 3)* |
244+
| OSX | x64 | ✔️ Yes |
245+
| OSX | ARM (M1/M2) | ✔️ Yes |
246+
247+
#### Support
248+
249+
- Tier 1
250+
- Established
251+
- Full CI/CD support.
252+
- Users should not encounter issues
253+
- Full reproducible examples running in CI, should be provided by users raising issues
254+
- If using musl targets, users should attempt the same test on a libc target (such as debian)
255+
- Tier 2
256+
- Recently introduced
257+
- Full CI/CD support.
258+
- Users may encounter issues
259+
- Full reproducible examples running in CI, should be provided by users raising issues
260+
- If using musl targets, users should attempt the same test on a libc target (such as debian)
261+
- Tier 3
262+
- Recently introduced, No/limited CI/CD support.
263+
- Users may encounter issues
264+
- Full reproducible examples which can be run by maintainers locally, should be provided by users raising issues
265+
246266
### Pact Specification
247267

248268
| Version | Status | [Spec] Compatibility | Install |

build/download-native-libs.sh

+23-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env bash
22
set -euo pipefail
33

4-
FFI_VERSION="0.4.16"
4+
FFI_VERSION="0.4.17"
55
FFI_BASE_URL="https://github.com/pact-foundation/pact-reference/releases/download/libpact_ffi-v$FFI_VERSION"
66

77
GREEN="\e[32m"
@@ -42,11 +42,27 @@ download_native() {
4242

4343
if [[ "$OSTYPE" == "darwin"* ]]; then
4444
# OSX requires an empty arg passed to -i, but this doesn't work on Lin/Win
45-
sed -Ei '' "s|../release_artifacts/.+$|$path/$dest_file|" "$path/$dest_file.sha256"
45+
sed -Ei '' "s|\*(.*)$|\*$path/$dest_file|" "$path/$dest_file.sha256"
4646
shasum -a 256 --check --quiet "$path/$dest_file.sha256"
4747
else
48-
sed -Ei "s|../release_artifacts/.+$|$path/$dest_file|" "$path/$dest_file.sha256"
49-
sha256sum --check --quiet "$path/$dest_file.sha256"
48+
sed -Ei "s|\*(.*)$|\*$path/$dest_file|" "$path/$dest_file.sha256"
49+
if [[ "$OSTYPE" == "linux"* ]]; then
50+
if ldd /bin/ls >/dev/null 2>&1; then
51+
ldd_output=$(ldd /bin/ls)
52+
case "$ldd_output" in
53+
*musl*)
54+
sha256sum -c -s "$path/$dest_file.sha256"
55+
;;
56+
*)
57+
sha256sum --check --quiet "$path/$dest_file.sha256"
58+
;;
59+
esac
60+
else
61+
sha256sum --check --quiet "$path/$dest_file.sha256"
62+
fi
63+
else
64+
sha256sum --check --quiet "$path/$dest_file.sha256"
65+
fi
5066
fi
5167

5268
rm "$path/$dest_file.sha256"
@@ -60,5 +76,8 @@ download_native() {
6076

6177
download_native "pact_ffi" "windows" "x86_64" "dll"
6278
download_native "libpact_ffi" "linux" "x86_64" "so"
79+
download_native "libpact_ffi" "linux" "aarch64" "so"
80+
download_native "libpact_ffi" "linux" "x86_64-musl" "so"
81+
download_native "libpact_ffi" "linux" "aarch64-musl" "so"
6382
download_native "libpact_ffi" "osx" "x86_64" "dylib"
6483
download_native "libpact_ffi" "osx" "aarch64-apple-darwin" "dylib"

samples/OrdersApi/Consumer.Tests/pacts/Fulfilment API-Orders API.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@
158158
],
159159
"metadata": {
160160
"pactRust": {
161-
"ffi": "0.4.16",
161+
"ffi": "0.4.17",
162162
"models": "1.1.19"
163163
},
164164
"pactSpecification": {

src/PactNet/PactNet.csproj

+85-43
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk" InitialTargets="build_libs">
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
@@ -9,49 +9,91 @@
99
</PropertyGroup>
1010

1111
<Import Project="../NuGet.targets" />
12+
<Target Name="build_libs">
13+
<!-- musl detection notes -->
14+
<!-- Main fallback behaviour is to default to glibc flavour, ensuring miminal impact on existing supported targets -->
15+
<!-- ContinueOnError True and Fallback to IsLinuxX64 / IsLinuxArm64 -->
16+
<!-- 1. Check host is Linux - IsLinux -->
17+
<!-- 2. Check if supported arch specific musl lib exists - IsLinuxMuslX64LibFound/IsLinuxMuslArm64LibFound -->
18+
<!-- 3. Check if musl is the loaded libc -->
19+
<!-- 3a. glibc hosts could have musl cross libs installed, in the standard musl location -->
20+
<!-- 3b. use ldd on a well known binary such as /bin/sh and grep for musl -->
21+
<!-- 3c. note ldd may not be available on all musl targets -->
22+
<PropertyGroup>
23+
<IsLinux>False</IsLinux>
24+
<IsLinux Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'True'">True</IsLinux>
25+
<IsLinuxMuslX64LibFound Condition="$([System.IO.File]::Exists('/lib/ld-musl-x86_64.so.1')) == 'True'">True</IsLinuxMuslX64LibFound>
26+
<IsLinuxMuslArm64LibFound Condition="$([System.IO.File]::Exists('/lib/ld-musl-aarch64.so.1')) == 'True'">True</IsLinuxMuslArm64LibFound>
27+
</PropertyGroup>
28+
<!-- only run this check if linux and the musl shared libs were found -->
29+
<Exec Command="ldd /bin/sh | grep musl" ConsoleToMSBuild="true" StandardOutputImportance="low" ContinueOnError="true" Condition="$(IsLinux) == 'True' And ($(IsLinuxMuslX64LibFound) == 'True' Or $(IsLinuxMuslArm64LibFound) == 'True')">
30+
<Output TaskParameter="ExitCode" PropertyName="IsLinuxMuslLoaded"/>
31+
</Exec>
32+
<PropertyGroup>
33+
<IsWindows>False</IsWindows>
34+
<IsOSX>False</IsOSX>
35+
<IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'True'">True</IsWindows>
36+
<IsOSX Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'True'">True</IsOSX>
37+
<IsArm64>False</IsArm64>
38+
<IsArm64 Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'Arm64'">True</IsArm64>
39+
<IsLinuxX64 Condition="'$(IsLinux)' == 'True' And '$(IsArm64)' == 'False'">True</IsLinuxX64>
40+
<IsLinuxArm64 Condition="'$(IsLinux)' == 'True' And '$(IsArm64)' == 'True'">True</IsLinuxArm64>
41+
<IsLinuxMuslX64 Condition="'$(IsLinux)' == 'True' And '$(IsLinuxMuslLoaded)' == '0' And '$(IsArm64)' == 'False'">True</IsLinuxMuslX64>
42+
<IsLinuxMuslArm64 Condition="'$(IsLinux)' == 'True' And '$(IsLinuxMuslLoaded)' == '0' And '$(IsArm64)' == 'True'">True</IsLinuxMuslArm64>
43+
</PropertyGroup>
1244

13-
<PropertyGroup>
14-
<IsWindows>False</IsWindows>
15-
<IsLinux>False</IsLinux>
16-
<IsOSX>False</IsOSX>
17-
<IsArm64>False</IsArm64>
18-
<IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'True'">True</IsWindows>
19-
<IsLinux Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'True'">True</IsLinux>
20-
<IsOSX Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'True'">True</IsOSX>
21-
<IsArm64 Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)' == 'Arm64'">True</IsArm64>
22-
</PropertyGroup>
23-
24-
<ItemGroup>
25-
<Content Include="$(MSBuildProjectDirectory)\..\..\build\windows\x86_64\pact_ffi.dll">
26-
<Link>pact_ffi.dll</Link>
27-
<PackagePath>runtimes/win-x64/native</PackagePath>
28-
<Pack>true</Pack>
29-
<CopyToOutputDirectory Condition="'$(IsWindows)'">PreserveNewest</CopyToOutputDirectory>
30-
<Visible>false</Visible>
31-
</Content>
32-
<Content Include="$(MSBuildProjectDirectory)\..\..\build\linux\x86_64\libpact_ffi.so">
33-
<Link>libpact_ffi.so</Link>
34-
<PackagePath>runtimes/linux-x64/native</PackagePath>
35-
<Pack>true</Pack>
36-
<CopyToOutputDirectory Condition="'$(IsLinux)'">PreserveNewest</CopyToOutputDirectory>
37-
<Visible>false</Visible>
38-
</Content>
39-
<Content Include="$(MSBuildProjectDirectory)\..\..\build\osx\x86_64\libpact_ffi.dylib">
40-
<Link>libpact_ffi.dylib</Link>
41-
<PackagePath>runtimes/osx-x64/native</PackagePath>
42-
<Pack>true</Pack>
43-
<CopyToOutputDirectory Condition="'$(IsOSX)' == 'True' And '$(IsArm64)' == 'False'">PreserveNewest</CopyToOutputDirectory>
44-
<Visible>false</Visible>
45-
</Content>
46-
<Content Include="$(MSBuildProjectDirectory)\..\..\build\osx\aarch64-apple-darwin\libpact_ffi.dylib">
47-
<Link>libpact_ffi.dylib</Link>
48-
<PackagePath>runtimes/osx-arm64/native</PackagePath>
49-
<Pack>true</Pack>
50-
<CopyToOutputDirectory Condition="'$(IsOSX)' == 'True' And '$(IsArm64)' == 'True'">PreserveNewest</CopyToOutputDirectory>
51-
<Visible>false</Visible>
52-
</Content>
53-
</ItemGroup>
54-
45+
<ItemGroup>
46+
<Content Include="$(MSBuildProjectDirectory)\..\..\build\windows\x86_64\pact_ffi.dll">
47+
<Link>pact_ffi.dll</Link>
48+
<PackagePath>runtimes/win-x64/native</PackagePath>
49+
<Pack>true</Pack>
50+
<CopyToOutputDirectory Condition="'$(IsWindows)'">PreserveNewest</CopyToOutputDirectory>
51+
<Visible>false</Visible>
52+
</Content>
53+
<Content Include="$(MSBuildProjectDirectory)\..\..\build\linux\x86_64\libpact_ffi.so">
54+
<Link>libpact_ffi.so</Link>
55+
<PackagePath>runtimes/linux-x64/native</PackagePath>
56+
<Pack>true</Pack>
57+
<CopyToOutputDirectory Condition="'$(IsLinuxX64)' == 'True'">PreserveNewest</CopyToOutputDirectory>
58+
<Visible>false</Visible>
59+
</Content>
60+
<Content Include="$(MSBuildProjectDirectory)\..\..\build\linux\aarch64\libpact_ffi.so">
61+
<Link>libpact_ffi.so</Link>
62+
<PackagePath>runtimes/linux-arm64/native</PackagePath>
63+
<Pack>true</Pack>
64+
<CopyToOutputDirectory Condition="'$(IsLinuxArm64)' == 'True'">PreserveNewest</CopyToOutputDirectory>
65+
<Visible>false</Visible>
66+
</Content>
67+
<Content Include="$(MSBuildProjectDirectory)\..\..\build\linux\x86_64-musl\libpact_ffi.so">
68+
<Link>libpact_ffi.so</Link>
69+
<PackagePath>runtimes/linux-x64-musl/native</PackagePath>
70+
<Pack>true</Pack>
71+
<CopyToOutputDirectory Condition="'$(IsLinuxMuslX64)' == 'True'">PreserveNewest</CopyToOutputDirectory>
72+
<Visible>false</Visible>
73+
</Content>
74+
<Content Include="$(MSBuildProjectDirectory)\..\..\build\linux\aarch64-musl\libpact_ffi.so">
75+
<Link>libpact_ffi.so</Link>
76+
<PackagePath>runtimes/linux-arm64-musl/native</PackagePath>
77+
<Pack>true</Pack>
78+
<CopyToOutputDirectory Condition="'$(IsLinuxMuslArm64)' == 'True'">PreserveNewest</CopyToOutputDirectory>
79+
<Visible>false</Visible>
80+
</Content>
81+
<Content Include="$(MSBuildProjectDirectory)\..\..\build\osx\x86_64\libpact_ffi.dylib">
82+
<Link>libpact_ffi.dylib</Link>
83+
<PackagePath>runtimes/osx-x64/native</PackagePath>
84+
<Pack>true</Pack>
85+
<CopyToOutputDirectory Condition="'$(IsOSX)' == 'True' And '$(IsArm64)' == 'False'">PreserveNewest</CopyToOutputDirectory>
86+
<Visible>false</Visible>
87+
</Content>
88+
<Content Include="$(MSBuildProjectDirectory)\..\..\build\osx\aarch64-apple-darwin\libpact_ffi.dylib">
89+
<Link>libpact_ffi.dylib</Link>
90+
<PackagePath>runtimes/osx-arm64/native</PackagePath>
91+
<Pack>true</Pack>
92+
<CopyToOutputDirectory Condition="'$(IsOSX)' == 'True' And '$(IsArm64)' == 'True'">PreserveNewest</CopyToOutputDirectory>
93+
<Visible>false</Visible>
94+
</Content>
95+
</ItemGroup>
96+
</Target>
5597
<ItemGroup>
5698
<Content Include="$(MSBuildProjectDirectory)\..\..\build\PactNet.targets">
5799
<PackagePath>build/net462/</PackagePath>

tests/PactNet.Tests/data/v2-consumer-integration.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
],
7575
"metadata": {
7676
"pactRust": {
77-
"ffi": "0.4.16",
77+
"ffi": "0.4.17",
7878
"models": "1.1.19"
7979
},
8080
"pactSpecification": {

tests/PactNet.Tests/data/v3-consumer-integration.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
],
133133
"metadata": {
134134
"pactRust": {
135-
"ffi": "0.4.16",
135+
"ffi": "0.4.17",
136136
"models": "1.1.19"
137137
},
138138
"pactSpecification": {

tests/PactNet.Tests/data/v3-message-consumer-integration.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"language": "C#"
3737
},
3838
"pactRust": {
39-
"ffi": "0.4.16",
39+
"ffi": "0.4.17",
4040
"models": "1.1.19"
4141
},
4242
"pactSpecification": {

tests/PactNet.Tests/data/v3-message-integration.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
],
1717
"metadata": {
1818
"pactRust": {
19-
"ffi": "0.4.16",
19+
"ffi": "0.4.17",
2020
"models": "1.1.19"
2121
},
2222
"pactSpecification": {

tests/PactNet.Tests/data/v3-server-integration.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
],
4747
"metadata": {
4848
"pactRust": {
49-
"ffi": "0.4.16",
49+
"ffi": "0.4.17",
5050
"models": "1.1.19"
5151
},
5252
"pactSpecification": {

tests/PactNet.Tests/data/v4-combined-integration.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@
187187
"language": "C#"
188188
},
189189
"pactRust": {
190-
"ffi": "0.4.16",
190+
"ffi": "0.4.17",
191191
"models": "1.1.19"
192192
},
193193
"pactSpecification": {

0 commit comments

Comments
 (0)