@@ -17,11 +17,16 @@ jobs:
17
17
include :
18
18
- toolchain : stable
19
19
build-net-tokio : true
20
+ build-bindings : true
20
21
- toolchain : beta
21
22
build-net-tokio : true
23
+ build-bindings : true
22
24
- toolchain : 1.39.0
23
25
build-net-tokio : true
26
+ build-bindings : true
24
27
coverage : true
28
+ - toolchain : 1.34.2
29
+ build-bindings : true
25
30
runs-on : ubuntu-latest
26
31
steps :
27
32
- name : Checkout source code
38
43
- name : Build on Rust ${{ matrix.toolchain }}
39
44
if : " ! matrix.build-net-tokio"
40
45
run : RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always -p lightning
46
+ - name : Build bindings on Rust ${{ matrix.toolchain }}
47
+ if : matrix.build-bindings
48
+ run : RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always -p lightning-c-bindings
41
49
- name : Test on Rust ${{ matrix.toolchain }} with net-tokio
42
50
if : matrix.build-net-tokio
43
51
run : RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always
@@ -98,3 +106,48 @@ jobs:
98
106
run : cd fuzz && cargo test --verbose --color always
99
107
- name : Run fuzzers
100
108
run : cd fuzz && ./ci-fuzz.sh
109
+
110
+ check_bindings :
111
+ runs-on : ubuntu-latest
112
+ # Ubuntu's version of rustc uses its own LLVM instead of being a real native package.
113
+ # This leaves us with an incompatible LLVM version when linking. Instead, use a real OS.
114
+ # We further (temporarily) use Debian experimental since testing links rustc against the
115
+ # brand-new llvm-10, but clang/llvm still default to LLVM 9.
116
+ container : debian:experimental
117
+ env :
118
+ TOOLCHAIN : stable
119
+ steps :
120
+ - name : Install native Rust toolchain, Valgrind, and build utilitis
121
+ run : |
122
+ echo 'Package: llvm llvm-runtime clang lld' > /etc/apt/preferences.d/99-llvm10
123
+ echo 'Pin: release n=experimental' >> /etc/apt/preferences.d/99-llvm10
124
+ echo 'Pin-Priority: 995' >> /etc/apt/preferences.d/99-llvm10
125
+ apt-get update
126
+ apt-get -y dist-upgrade
127
+ apt-get -y install cargo valgrind lld git g++ clang
128
+ - name : Checkout source code
129
+ uses : actions/checkout@v2
130
+ - name : Install cbindgen
131
+ run : cargo install --force cbindgen
132
+ - name : Rebuild bindings, and check the sample app builds + links
133
+ run : ./genbindings.sh
134
+ - name : Check that the latest bindings are in git
135
+ run : |
136
+ if [ "$(git diff)" != "" ]; then
137
+ # cbindgen's bindings output order can be FS-dependant, so check that the lines are all the same:
138
+ mv lightning-c-bindings/include/lightning.h lightning-c-bindings/include/lightning.h.new
139
+ git checkout lightning-c-bindings/include/lightning.h
140
+ cat lightning-c-bindings/include/lightning.h | sort > lightning-c-bindings/include/lightning.h.sorted
141
+ cat lightning-c-bindings/include/lightning.h.new | sort > lightning-c-bindings/include/lightning.h.new.sorted
142
+ diff lightning-c-bindings/include/lightning.h.sorted lightning-c-bindings/include/lightning.h.new.sorted
143
+ #
144
+ mv lightning-c-bindings/include/lightningpp.hpp lightning-c-bindings/include/lightningpp.hpp.new
145
+ git checkout lightning-c-bindings/include/lightningpp.hpp
146
+ cat lightning-c-bindings/include/lightningpp.hpp | sort > lightning-c-bindings/include/lightningpp.hpp.sorted
147
+ cat lightning-c-bindings/include/lightningpp.hpp.new | sort > lightning-c-bindings/include/lightningpp.hpp.new.sorted
148
+ diff lightning-c-bindings/include/lightningpp.hpp.sorted lightning-c-bindings/include/lightningpp.hpp.new.sorted
149
+ #
150
+ [ "$(diff lightning-c-bindings/include/lightning.h.sorted lightning-c-bindings/include/lightning.h.new.sorted)" != "" ] && exit 2
151
+ [ "$(diff lightning-c-bindings/include/lightningpp.hpp.sorted lightning-c-bindings/include/lightningpp.hpp.new.sorted)" != "" ] && exit 3
152
+ git diff --exit-code
153
+ fi
0 commit comments