-
Notifications
You must be signed in to change notification settings - Fork 5
219 lines (219 loc) · 8.03 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
name: CI
on:
push:
branches:
- main
pull_request:
jobs:
# Run the unit tests on Windows, Linux, and MacOS
test:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
rust:
- stable
- beta
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust ${{ matrix.rust }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- name: Run Rust unit tests
run: cargo test
# Check formatting and run clippy lints
linting:
strategy:
fail-fast: false
matrix:
rust:
- stable
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust ${{ matrix.rust }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: rustfmt, clippy
- name: Format
run: cargo fmt --all --check
- name: Clippy
run: cargo clippy -- -D warnings
# Build documentation
documentation:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install doxygen 1.9.3
run: wget -q https://www.doxygen.nl/files/doxygen-1.9.5.linux.bin.tar.gz -O- | sudo tar --strip-components=1 -C /usr -xz doxygen-1.9.5
- name: Build FFI and JNI shared libraries
run: cargo build --release -p foo-ffi -p foo-ffi-java
- name: C bindings
run: cargo run --bin foo-bindings -- --doxygen --c --no-tests -a ./target/release
- name: .NET bindings
run: cargo run --bin foo-bindings -- --doxygen --dotnet --no-tests -a ./target/release
- name: Java bindings
run: cargo run --bin foo-bindings -- --java -a ./target/release
- name: Extract documentation
run: |
mkdir -p ~/doc
cp -a tests/bindings/c/generated/doc/c ~/doc/c
cp -a tests/bindings/c/generated/doc/cpp ~/doc/cpp
cp -a tests/bindings/dotnet/foo/doc ~/doc/dotnet
cp -a tests/bindings/java/foo/target/apidocs ~/doc/java
rm tests/bindings/c/generated/logo.png tests/bindings/c/generated/doxygen-awesome.css
- name: Upload documentation
uses: actions/upload-artifact@v2
with:
name: doc
path: ~/doc
# Build bindings on Windows x64 [64-bit MSVC (Windows 7+) (x86_64-pc-windows-msvc)] and x86 [32-bit MSVC (Windows 7+) (i686-pc-windows-msvc)]
bindings-windows:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-pc-windows-msvc # 64-bit MSVC (Windows 7+)
test: true
- target: i686-pc-windows-msvc # 32-bit MSVC (Windows 7+)
test: false
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
target: ${{ matrix.target }}
- name: Build FFI and JNI
run: cargo build -p foo-ffi -p foo-ffi-java --release --target ${{ matrix.target }}
- name: Copy the FFI and JNI libs
shell: pwsh
run: |
New-Item .\ffi-modules\${{ matrix.target }} -ItemType Directory
Copy-Item -Path ./target/${{ matrix.target }}/release/foo_ffi.dll -Destination ffi-modules/${{ matrix.target }}
Copy-Item -Path ./target/${{ matrix.target }}/release/foo_ffi.dll.lib -Destination ffi-modules/${{ matrix.target }}
Copy-Item -Path ./target/${{ matrix.target }}/release/foo_ffi_java.dll -Destination ffi-modules/${{ matrix.target }}
- name: Upload compiled FFI modules
uses: actions/upload-artifact@v2
with:
name: ffi-modules
path: ffi-modules
- name: C Bindings Tests
if: ${{ matrix.test }}
run: cargo run --bin foo-bindings -- --c -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release
- name: .NET Bindings Tests
if: ${{ matrix.test }}
run: cargo run --bin foo-bindings -- --dotnet -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release
- name: Java Bindings Tests
if: ${{ matrix.test }}
run: cargo run --bin foo-bindings -- --java -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release
# Build bindings on MacOS
bindings-macos:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: aarch64_64-apple-darwin
runner: macos-14-arm
- target: x86_64-apple-darwin
runner: macos-13
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
target: ${{ matrix.target }}
- name: Build FFI and JNI
run: cargo build -p foo-ffi -p foo-ffi-java --release
- name: Copy the FFI and JNI libs
run: |
mkdir -p ./ffi-modules/${{ matrix.target }}
cp ./target/release/libfoo_ffi.dylib ./ffi-modules/${{ matrix.target }}
cp ./target/release/libfoo_ffi_java.dylib ./ffi-modules/${{ matrix.target }}
- name: Upload compiled FFI modules
uses: actions/upload-artifact@v2
with:
name: ffi-modules
path: ffi-modules
- name: .NET Bindings Tests
run: cargo run --bin foo-bindings -- --dotnet
- name: Java Bindings Tests
run: cargo run --bin foo-bindings -- --java
# Cross-compilation for ARM devices and produce C bindings
cross:
strategy:
fail-fast: false
matrix:
target:
- arm-unknown-linux-gnueabi # ARMv6 Linux (kernel 3.2, glibc 2.17)
- arm-unknown-linux-gnueabihf # ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17)
- armv7-unknown-linux-gnueabihf # ARMv7 Linux, hardfloat (kernel 3.2, glibc 2.17)
- aarch64-unknown-linux-gnu # ARM64 Linux (kernel 4.2, glibc 2.17+)
- x86_64-unknown-linux-gnu # 64-bit Linux (kernel 2.6.32+, glibc 2.11+)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
target: ${{ matrix.target }}
- name: Install Rust Cross
run: cargo install cross
- name: Build FFI and JNI shared libraries
run: cross build -p foo-ffi -p foo-ffi-java --release --target ${{ matrix.target }}
- name: Copy the FFI and JNI libs
run: |
mkdir -p ./ffi-modules/${{ matrix.target }}
cp ./target/${{ matrix.target }}/release/libfoo_ffi.so ./ffi-modules/${{ matrix.target }}
cp ./target/${{ matrix.target }}/release/libfoo_ffi_java.so ./ffi-modules/${{ matrix.target }}
- name: Upload compiled FFI modules
uses: actions/upload-artifact@v2
with:
name: ffi-modules
path: ffi-modules
# Package all the generated bindings
packaging:
needs: [documentation, bindings-windows, bindings-macos, cross]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Download compiled FFI
uses: actions/download-artifact@v2
with:
name: ffi-modules
path: ffi-modules
- name: Package all bindings
run: cargo run --bin foo-bindings -- --package ./ffi-modules --options ./packaging.json
- name: Upload C/C++ bindings
uses: actions/upload-artifact@v2
with:
name: c-bindings
path: tests/bindings/c/generated/*
- name: Upload .NET bindings
uses: actions/upload-artifact@v2
with:
name: dotnet-bindings
path: tests/bindings/dotnet/nupkg/*
- name: Upload Java bindings
uses: actions/upload-artifact@v2
with:
name: java-bindings
path: tests/bindings/java/foo/target/*.jar