Update CI references to 0.0.117
[ldk-java] / .github / workflows / build.yml
1 name: Continuous Integration Checks
2
3 on: [push, pull_request]
4
5 jobs:
6   wasm_bindings:
7     runs-on: ubuntu-latest
8     # Ubuntu's version of clang doesn't support....anything that should work.
9     # Ubuntu is an utter trash OS and should generally never be used for anything.
10     # We also require at least rustc 1.51 (ie https://github.com/rust-lang/rust/pull/79998),
11     # so we use debian testing
12     container: debian:bookworm
13     strategy:
14       fail-fast: false
15     steps:
16       - name: Install build utilities and test that clang can build for wasm
17         run: |
18           apt-get update
19           apt-get -y dist-upgrade
20           apt-get -y install cargo libstd-rust-dev-wasm32 lld git g++ clang curl node-typescript npm python3 wasi-libc
21           echo "int main() {}" > genbindings_wasm_test_file.c
22           clang -nostdlib -o /dev/null --target=wasm32-wasi -Wl,--no-entry genbindings_wasm_test_file.c
23           rm genbindings_wasm_test_file.c
24       - name: Checkout source code
25         uses: actions/checkout@v2
26         with:
27           fetch-depth: 0
28       - name: Install cbindgen
29         run: |
30           git clone https://github.com/eqrion/cbindgen
31           cd cbindgen/
32           git checkout v0.20.0
33           cargo update -p indexmap --precise "1.6.2" --verbose
34           cargo install --locked --path .
35       - name: Checkout Rust-Lightning and LDK-C-Bindings git
36         run: |
37           git config --global safe.directory '*'
38           git config --global user.email "ldk-ci@example.com"
39           git config --global user.name "LDK CI"
40           # Note this is a different endpoint, as we need one non-upstream commit!
41           git clone https://github.com/lightningdevkit/rust-lightning
42           cd rust-lightning
43           git checkout origin/0.0.117-bindings
44           cd ..
45           git clone https://github.com/lightningdevkit/ldk-c-bindings
46           cd ldk-c-bindings
47           git checkout 0.0.117
48       - name: Rebuild C bindings without STD
49         run: |
50           cd ldk-c-bindings
51           git config --global safe.directory "*"
52           ./genbindings.sh ../rust-lightning false
53       - name: Build and Test TS Debug Bindings for Node
54         run: |
55           # We need FinalizationRegistry and top-level await support, which requires node 14.6/8,
56           # however Debian ships with Node 12
57           # Thus, we install the binary nodejs from nodejs.org and test with that.
58           curl https://nodejs.org/dist/v16.13.1/node-v16.13.1-linux-x64.tar.xz > nodejs.tar.xz
59           tar xvvf nodejs.tar.xz
60           export PATH=$(pwd)/$(echo node-*/bin):$PATH
61           ./genbindings.sh ./ldk-c-bindings/ wasm true false
62       - name: Build and Test TS Release Bindings for Node
63         run: |
64           export PATH=$(pwd)/$(echo node-*/bin):$PATH
65           ./genbindings.sh ./ldk-c-bindings/ wasm false false
66       - name: Install Playwright for Web Tests
67         run: |
68           export HOME=/root/ # Github actions is apparently broken
69           export PATH=$(pwd)/$(echo node-*/bin):$PATH
70           # npx playwright install-deps is broken so we do it manually, see https://github.com/microsoft/playwright/issues/11165
71           apt-get install -y --no-install-recommends fonts-liberation libenchant-2-2 libicu72 libjpeg62-turbo libasound2 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 libcairo2 libcups2 libdbus-1-3 libdrm2 libegl1 libgbm1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 libxshmfence1 xvfb fonts-noto-color-emoji fonts-unifont libfontconfig libfreetype6 xfonts-scalable fonts-ipafont-gothic fonts-wqy-zenhei fonts-tlwg-loma-otf ffmpeg libcairo-gobject2 libdbus-glib-1-2 libfontconfig1 libgdk-pixbuf2.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libxcb-shm0 libxcursor1 libxi6 libxrender1 libxt6 gstreamer1.0-libav gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good libepoxy0 libevdev2 libgl1 libgles2 libgstreamer-gl1.0-0 libgstreamer1.0-0 libharfbuzz-icu0 libharfbuzz0b libhyphen0 libnotify4 libopenjp2-7 libopus0 libpng16-16 libsecret-1-0 libsoup2.4-1 libwayland-client0 libwayland-egl1 libwayland-server0 libwebp7 libwebpdemux2 libwoff1 libxkbcommon0 libxml2 libxslt1.1
72           mkdir -p $HOME/.cache/ms-playwright # `playwright install` is too dumb to create this for us
73           chmod -R 777 $HOME/
74           npm i -D playwright@1.37.0-alpha-jul-31-2023
75           npx playwright@1.37.0-alpha-jul-31-2023 install
76       - name: Build and Test TS Debug Bindings for Web
77         run: |
78           export HOME=/root/ # Github actions is apparently broken
79           export PATH=$(pwd)/$(echo node-*/bin):$PATH
80           git config --global safe.directory "*"
81           ./genbindings.sh ./ldk-c-bindings/ wasm true true
82           cd ts
83           rm liblightningjs.wasm && ln -s $(pwd)/../liblightningjs_debug.wasm ./liblightningjs.wasm
84           python3 -m http.server &
85           SERVER_PID=$!
86           node test/browser.mjs
87           kill $SERVER_PID
88       - name: Build and Test TS Release Bindings for Web
89         run: |
90           export HOME=/root/ # Github actions is apparently broken
91           export PATH=$(pwd)/$(echo node-*/bin):$PATH
92           ./genbindings.sh ./ldk-c-bindings/ wasm false true
93           cd ts
94           rm liblightningjs.wasm && ln -s $(pwd)/../liblightningjs_release.wasm ./liblightningjs.wasm
95           python3 -m http.server &
96           SERVER_PID=$!
97           node test/browser.mjs
98           kill $SERVER_PID
99       - name: Check latest TS files are in git
100         run: |
101           git checkout ts/package.json
102           git checkout node-net/package.json
103           git diff --exit-code
104
105   java_bindings:
106     runs-on: ubuntu-latest
107     # Ubuntu's version of rustc uses its own LLVM instead of being a real native package.
108     # This leaves us with an incompatible LLVM version when linking. Instead, use a real OS.
109     container: debian:bullseye
110     strategy:
111       fail-fast: false
112     steps:
113       - name: Install native Rust toolchain, Valgrind, and build utilitis
114         run: |
115           apt-get update
116           apt-get -y dist-upgrade
117           apt-get -y install cargo valgrind lld git g++ clang openjdk-11-jdk maven faketime zip unzip llvm curl
118       - name: Checkout source code
119         uses: actions/checkout@v2
120         with:
121           fetch-depth: 0
122       - name: Install cbindgen
123         run: |
124           git config --global safe.directory '*'
125           git clone https://github.com/eqrion/cbindgen
126           cd cbindgen/
127           git checkout v0.20.0
128           cargo update -p indexmap --precise "1.6.2" --verbose
129           cargo install --locked --path .
130       - name: Checkout Rust-Lightning and LDK-C-Bindings git
131         run: |
132           git config --global user.email "ldk-ci@example.com"
133           git config --global user.name "LDK CI"
134           # Note this is a different endpoint, as we need one non-upstream commit!
135           git clone https://github.com/lightningdevkit/rust-lightning
136           cd rust-lightning
137           git checkout origin/0.0.117-bindings
138           cd ..
139           git clone https://github.com/lightningdevkit/ldk-c-bindings
140           cd ldk-c-bindings
141           git checkout 0.0.117
142       - name: Pin proc-macro and quote to meet MSRV
143         run: |
144           cd ldk-c-bindings/c-bindings-gen
145           cargo update -p quote --precise "1.0.30" --verbose
146           cargo update -p proc-macro2 --precise "1.0.65" --verbose
147       - name: Rebuild C bindings, and check the sample app builds + links
148         run: |
149           cd ldk-c-bindings
150           ./genbindings.sh ../rust-lightning true
151       - name: Build Java Debug Bindings
152         run: ./genbindings.sh ./ldk-c-bindings/ "-I/usr/lib/jvm/java-11-openjdk-amd64/include/ -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux/" true false
153       - name: Run Java Tests against Debug Bindings
154         run: |
155           mv liblightningjni_debug_Linux-amd64.so liblightningjni.so
156           export ASAN_OPTIONS=detect_leaks=0
157           LD_PRELOAD=/usr/lib/llvm-11/lib/clang/11.0.1/lib/linux/libclang_rt.asan-x86_64.so LD_LIBRARY_PATH=. mvn test
158       - name: Build Java Release Bindings
159         run: |
160           ./genbindings.sh ./ldk-c-bindings/ "-I/usr/lib/jvm/java-11-openjdk-amd64/include/ -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux/" false false
161       - name: Check latest headers are in git
162         run: |
163           git checkout pom.xml
164           git diff --exit-code
165
166   java_determinism:
167     runs-on: ubuntu-latest
168     # Ubuntu's version of rustc uses its own LLVM instead of being a real native package.
169     # This leaves us with an incompatible LLVM version when linking. Instead, use a real OS.
170     container: debian:bullseye
171     strategy:
172       fail-fast: false
173     steps:
174       - name: Install native Rust toolchain, Valgrind, and build utilitis
175         run: |
176           apt-get update
177           apt-get -y dist-upgrade
178           apt-get -y install cargo valgrind lld git g++ clang openjdk-11-jdk maven faketime zip unzip llvm curl
179       - name: Checkout source code
180         uses: actions/checkout@v2
181         with:
182           fetch-depth: 0
183       - name: Install cbindgen
184         run: |
185           git config --global safe.directory '*'
186           git clone https://github.com/eqrion/cbindgen
187           cd cbindgen/
188           git checkout v0.20.0
189           cargo update -p indexmap --precise "1.6.2" --verbose
190           cargo install --locked --path .
191       - name: Checkout Rust-Lightning and LDK-C-Bindings git
192         run: |
193           git config --global user.email "ldk-ci@example.com"
194           git config --global user.name "LDK CI"
195           # Note this is a different endpoint, as we need one non-upstream commit!
196           git clone https://github.com/lightningdevkit/rust-lightning
197           cd rust-lightning
198           git checkout origin/0.0.117-bindings
199           cd ..
200           git clone https://github.com/lightningdevkit/ldk-c-bindings
201           cd ldk-c-bindings
202           git checkout 0.0.117
203       - name: Pin proc-macro and quote to meet MSRV
204         run: |
205           cd ldk-c-bindings/c-bindings-gen
206           cargo update -p quote --precise "1.0.30" --verbose
207           cargo update -p proc-macro2 --precise "1.0.65" --verbose
208       - name: Rebuild C bindings, and check the sample app builds + links
209         run: |
210           cd ldk-c-bindings
211           ./genbindings.sh ../rust-lightning true
212       - name: Checkout latest MacOS binaries
213         shell: bash
214         run: |
215           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
216           echo "Fetching deterministic binaries for LDK-GC ${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
217           # Gitweb only allows snapshots of folders by providing the object hash, which we have to extract:
218           SNAPSHOT_LINK="$(curl "https://git.bitcoin.ninja/index.cgi?p=ldk-java-bins;a=tree;f=${LDK_GARBAGECOLLECTED_GIT_OVERRIDE};hb=refs/heads/main" | grep snapshot | grep -o 'href="[a-zA-Z0-9/?\.=;\-]*"' | sed 's/href="//' | tr -d '"' | grep snapshot)"
219           curl -o bins-snapshot.tgz "https://git.bitcoin.ninja${SNAPSHOT_LINK}"
220           mkdir -p ldk-java-bins/"${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
221           cd ldk-java-bins/"${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
222           tar xvvf ../../bins-snapshot.tgz
223           mv ldk-java-bins-*/* ./
224           rm -r ldk-java-bins-*
225           cd ../..
226           mkdir -p src/main/resources/
227       - name: Copy latest MacOS leaktracking libs
228         run: |
229           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
230           cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/"liblightningjni_MacOSX-aarch64-leaktracking.nativelib src/main/resources/liblightningjni_MacOSX-aarch64.nativelib
231           cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/"liblightningjni_MacOSX-x86_64-leaktracking.nativelib src/main/resources/liblightningjni_MacOSX-x86_64.nativelib
232       - name: Build Leaktracking Java Release Bindings
233         run: |
234           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
235           ./genbindings.sh ./ldk-c-bindings/ "-I/usr/lib/jvm/java-11-openjdk-amd64/include/ -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux/" leaks false
236       - name: Build deterministic release jar
237         run: |
238           ./build-release-jar.sh
239           mv ldk-java.jar ldk-java-leaktracking.jar
240       - name: Copy latest MacOS libs
241         shell: bash
242         run: |
243           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
244           cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/liblightningjni_MacOSX-"{aarch64,x86_64}.nativelib src/main/resources/
245       - name: Build Java Release Bindings
246         run: |
247           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
248           ./genbindings.sh ./ldk-c-bindings/ "-I/usr/lib/jvm/java-11-openjdk-amd64/include/ -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux/" false false
249       - name: Build deterministic release jar
250         run: ./build-release-jar.sh
251       - name: Check latest library and jars are in bins repo
252         run: |
253           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
254           mkdir ldk-java-bins/new/
255           cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/"liblightningjni_Mac*.nativelib ldk-java-bins/new/
256           cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/"LDK-release.aar ldk-java-bins/new/
257           cp src/main/resources/liblightningjni_Linux-amd64.nativelib ldk-java-bins/new/
258           cp ldk-java-sources.jar ldk-java-bins/new/
259           cp ldk-java.jar ldk-java-bins/new/
260           cp ldk-java-leaktracking.jar ldk-java-bins/new/
261           cp ldk-java-classes.jar ldk-java-bins/new/
262           cp ldk-java-javadoc.jar ldk-java-bins/new/
263           cd ldk-java-bins
264           rm "${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/liblightningjs.wasm" # TODO: Test this
265           if ! diff -r "${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/" new/; then
266             apt-get -y install diffoscope
267             diffoscope new/ldk-java-sources.jar "${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/ldk-java-sources.jar" || echo
268             diffoscope new/ldk-java-javadoc.jar "${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/ldk-java-javadoc.jar" || echo
269             diffoscope new/ldk-java-classes.jar "${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/ldk-java-classes.jar" || echo
270             diffoscope new/ldk-java.jar "${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/ldk-java.jar" || echo
271             diffoscope new/ldk-java-leaktracking.jar "${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/ldk-java-leaktracking.jar" || echo
272             exit 1
273           fi
274       - name: Run Java Tests against built release jar
275         run: |
276           mvn install:install-file -Dfile=ldk-java.jar -DgroupId=org.lightningdevkit -DartifactId=ldk-java -Dversion=1.0-SNAPSHOT -Dpackaging=jar
277           cd javatester
278           mvn package
279           java -ea -jar target/ldk-java-tests-1.0-SNAPSHOT-jar-with-dependencies.jar
280
281   macos_determinism:
282     runs-on: ubuntu-latest
283     # Ubuntu's version of rustc uses its own LLVM instead of being a real native package.
284     # This leaves us with an incompatible LLVM version when linking. Instead, use a real OS.
285     container: debian:bookworm
286     strategy:
287       fail-fast: false
288     steps:
289       - name: Install native Rust toolchain, Valgrind, and build utilitis
290         run: |
291           apt-get update
292           apt-get -y dist-upgrade
293           apt-get -y install cargo valgrind openjdk-17-jdk lld git g++ clang llvm curl rust-src
294       - name: Checkout source code
295         uses: actions/checkout@v2
296         with:
297           fetch-depth: 0
298       - name: Install cbindgen
299         run: |
300           git config --global safe.directory '*'
301           git clone https://github.com/eqrion/cbindgen
302           cd cbindgen/
303           git checkout v0.20.0
304           cargo update -p indexmap --precise "1.6.2" --verbose
305           cargo install --locked --path .
306       - name: Checkout Rust-Lightning and LDK-C-Bindings git
307         run: |
308           git config --global user.email "ldk-ci@example.com"
309           git config --global user.name "LDK CI"
310           # Note this is a different endpoint, as we need one non-upstream commit!
311           git clone https://github.com/lightningdevkit/rust-lightning
312           cd rust-lightning
313           git checkout origin/0.0.117-bindings
314           cd ..
315           git clone https://github.com/lightningdevkit/ldk-c-bindings
316           cd ldk-c-bindings
317           git checkout 0.0.117
318       - name: Fetch MacOS SDK
319         run: |
320           curl -o Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz https://bitcoincore.org/depends-sources/sdks/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz
321           tar xvvf Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz
322       - name: Rebuild C bindings, and check the sample app builds + links
323         run: |
324           # rust-src doesn't distribute the rustlib Cargo.lock, but an empty
325           # file seems to suffice to make `-Zbuild-std` happy.
326           touch /usr/lib/rustlib/src/rust/Cargo.lock
327           export MACOS_SDK="$PWD/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers"
328           cd ldk-c-bindings
329           ./genbindings.sh ../rust-lightning true
330       - name: Fetch MacOS OpenJDK 18 for x86_64
331         run: |
332           curl -o openjdk-18.0.1.1_macos-x64_bin.tar.gz https://download.java.net/java/GA/jdk18.0.1.1/65ae32619e2f40f3a9af3af1851d6e19/2/GPL/openjdk-18.0.1.1_macos-x64_bin.tar.gz
333           if [ "$(shasum -a 256 openjdk-18.0.1.1_macos-x64_bin.tar.gz | awk '{ print $1 }')" != "f02d17ec5a387555f8489abc352d973b6c10364409b597046025938e2266d72a" ]; then
334             echo "Bad hash"
335             exit 1
336           fi
337           mkdir jdk-x86_64
338           cd jdk-x86_64
339           tar xvvf ../openjdk-18.0.1.1_macos-x64_bin.tar.gz
340       - name: Fetch MacOS OpenJDK 18 for aarch64
341         run: |
342           curl -o openjdk-18.0.1.1_macos-aarch64_bin.tar.gz https://download.java.net/java/GA/jdk18.0.1.1/65ae32619e2f40f3a9af3af1851d6e19/2/GPL/openjdk-18.0.1.1_macos-aarch64_bin.tar.gz
343           if [ "$(shasum -a 256 openjdk-18.0.1.1_macos-aarch64_bin.tar.gz | awk '{ print $1 }')" != "29773ad68063bdad7fbaeb762cd873d3f243e86de380d3ac5335cdb929371fb5" ]; then
344             echo "Bad hash"
345             exit 1
346           fi
347           mkdir jdk-aarch64
348           cd jdk-aarch64
349           tar xvvf ../openjdk-18.0.1.1_macos-aarch64_bin.tar.gz
350       - name: Build MacOS aarch64 Java leaktracking Release Bindings
351         run: |
352           MACOS_SDK="$PWD/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers"
353           JAVA_HOME=jdk-aarch64/jdk-18.0.1.1.jdk/Contents/Home
354           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
355           CC=clang LDK_TARGET=aarch64-apple-darwin LDK_TARGET_CPU=apple-a14 ./genbindings.sh ./ldk-c-bindings/ "-I$JAVA_HOME/include/ -I$JAVA_HOME/include/darwin -isysroot$MACOS_SDK" leaks false
356           mv src/main/resources/liblightningjni_MacOSX-aarch64.nativelib src/main/resources/liblightningjni_MacOSX-aarch64-leaktracking.nativelib
357       - name: Build MacOS x86_64 Java leaktracking Release Bindings
358         run: |
359           MACOS_SDK="$PWD/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers"
360           JAVA_HOME=jdk-x86_64/jdk-18.0.1.1.jdk/Contents/Home
361           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
362           CC=clang LDK_TARGET=x86_64-apple-darwin LDK_TARGET_CPU=sandybridge ./genbindings.sh ./ldk-c-bindings/ "-I$JAVA_HOME/include/ -I$JAVA_HOME/include/darwin -isysroot$MACOS_SDK" leaks false
363           mv src/main/resources/liblightningjni_MacOSX-x86_64.nativelib src/main/resources/liblightningjni_MacOSX-x86_64-leaktracking.nativelib
364       - name: Build MacOS aarch64 Java Release Bindings
365         run: |
366           MACOS_SDK="$PWD/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers"
367           JAVA_HOME=jdk-aarch64/jdk-18.0.1.1.jdk/Contents/Home
368           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
369           CC=clang LDK_TARGET=aarch64-apple-darwin LDK_TARGET_CPU=apple-a14 ./genbindings.sh ./ldk-c-bindings/ "-I$JAVA_HOME/include/ -I$JAVA_HOME/include/darwin -isysroot$MACOS_SDK" false false
370       - name: Build MacOS x86_64 Java Release Bindings
371         run: |
372           MACOS_SDK="$PWD/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers"
373           JAVA_HOME=jdk-x86_64/jdk-18.0.1.1.jdk/Contents/Home
374           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
375           CC=clang LDK_TARGET=x86_64-apple-darwin LDK_TARGET_CPU=sandybridge ./genbindings.sh ./ldk-c-bindings/ "-I$JAVA_HOME/include/ -I$JAVA_HOME/include/darwin -isysroot$MACOS_SDK" false false
376       - name: Checkout latest binaries
377         run: |
378           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
379           echo "Fetching deterministic binaries for LDK-GC ${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
380           # Gitweb only allows snapshots of folders by providing the object hash, which we have to extract:
381           SNAPSHOT_LINK="$(curl "https://git.bitcoin.ninja/index.cgi?p=ldk-java-bins;a=tree;f=${LDK_GARBAGECOLLECTED_GIT_OVERRIDE};hb=refs/heads/main" | grep snapshot | grep -o 'href="[a-zA-Z0-9/?\.=;\-]*"' | sed 's/href="//' | tr -d '"' | grep snapshot)"
382           curl -o bins-snapshot.tgz "https://git.bitcoin.ninja${SNAPSHOT_LINK}"
383           mkdir -p ldk-java-bins/"${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
384           cd ldk-java-bins/"${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
385           tar xvvf ../../bins-snapshot.tgz
386           mv ldk-java-bins-*/* ./
387           rm -r ldk-java-bins-*
388           cd ../..
389       - name: Check latest MacOS libraries are in the bins repo
390         shell: bash
391         run: |
392           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
393           for F in liblightningjni_MacOSX-{x86_64,aarch64}{,-leaktracking}.nativelib; do
394             if ! diff "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/$F" "src/main/resources/$F"; then
395               apt-get -y install diffoscope
396               # Sadly these binaries are still non-deterministic, but only due
397               # to a few-byte tag, thus we use diffoscope to ensure there
398               # aren't any "real" differences and move on.
399               diffoscope "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/$F" "src/main/resources/$F" || echo
400             fi
401           done
402
403   android:
404     runs-on: ubuntu-latest
405     # Frankly, I'm not really sure why debian and ubuntu differ in the results here, they really shouldn't
406     container: debian:bullseye
407     strategy:
408       fail-fast: false
409     steps:
410       - name: Install rust targets
411         run: |
412           apt-get update
413           apt-get -y dist-upgrade
414           apt-get -y install git g++ clang faketime zip unzip curl openjdk-11-jdk
415           curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh
416           chmod +x ./rustup.sh
417           ./rustup.sh -y
418           . $HOME/.cargo/env
419           # Temporarily use 1.67.1 to fix https://github.com/rust-lang/rust/issues/108943
420           rustup install 1.67.1
421           rustup default 1.67.1
422           rustup target add armv7-linux-androideabi
423           rustup target add aarch64-linux-android
424           rustup target add i686-linux-android
425           rustup target add x86_64-linux-android
426       - name: Checkout source code
427         uses: actions/checkout@v2
428         with:
429           fetch-depth: 0
430       - name: Install android NDK compilers
431         run: |
432           git config --global safe.directory '*'
433           curl https://dl.google.com/android/repository/android-ndk-r22b-linux-x86_64.zip > android-ndk-r22b-linux-x86_64.zip
434           if [ "$(sha256sum android-ndk-r22b-linux-x86_64.zip | awk '{ print $1 }')" != "ac3a0421e76f71dd330d0cd55f9d99b9ac864c4c034fc67e0d671d022d4e806b" ]; then
435             echo "Bad hash"
436             exit 1
437           fi
438           unzip android-ndk-r22b-linux-x86_64.zip
439       - name: Install cbindgen
440         run: |
441           . $HOME/.cargo/env
442           cargo install cbindgen
443       - name: Checkout Rust-Lightning and LDK-C-Bindings git
444         run: |
445           git config --global user.email "ldk-ci@example.com"
446           git config --global user.name "LDK CI"
447           # Note this is a different endpoint, as we need one non-upstream commit!
448           git clone https://github.com/lightningdevkit/rust-lightning
449           cd rust-lightning
450           git checkout origin/0.0.117-bindings
451           cd ..
452           git clone https://github.com/lightningdevkit/ldk-c-bindings
453           cd ldk-c-bindings
454           git checkout 0.0.117
455       - name: Checkout Android AAR binaries and artifacts
456         run: |
457           # Gitweb only allows snapshots of folders by providing the object hash, which we have to extract:
458           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
459           echo "Fetching deterministic binaries for LDK-GC ${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
460           RELEASE_PAGE="https://git.bitcoin.ninja/index.cgi?p=ldk-java-bins;a=tree;f=${LDK_GARBAGECOLLECTED_GIT_OVERRIDE};hb=refs/heads/main"
461           SNAPSHOT_LINK="$(curl "$RELEASE_PAGE" | grep snapshot | grep -o 'href="[a-zA-Z0-9/?\.=;\-]*"' | sed 's/href="//' | tr -d '"' | grep snapshot)"
462           curl -o bins-snapshot.tgz "https://git.bitcoin.ninja${SNAPSHOT_LINK}"
463
464           ANDROID_PAGE="https://git.bitcoin.ninja/index.cgi?p=ldk-java-bins;a=tree;f=android-artifacts;hb=refs/heads/main"
465           SNAPSHOT_LINK="$(curl "$ANDROID_PAGE" | grep snapshot | grep -o 'href="[a-zA-Z0-9/?\.=;\-]*"' | sed 's/href="//' | tr -d '"' | grep snapshot)"
466           curl -o android-snapshot.tgz "https://git.bitcoin.ninja${SNAPSHOT_LINK}"
467
468           mkdir -p ldk-java-bins/"${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
469           cd ldk-java-bins/"${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
470           tar xvvf ../../bins-snapshot.tgz
471           mv ldk-java-bins-*/* ./
472           rm -r ldk-java-bins-*
473
474           mkdir -p ../android-artifacts
475           cd ../android-artifacts
476           tar xvvf ../../android-snapshot.tgz
477           mv ldk-java-bins-*/* ./
478           rm -r ldk-java-bins-*
479       - name: Build Android aar
480         run: |
481           . $HOME/.cargo/env
482           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
483           cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/ldk-java-classes.jar" ./
484           export ANDROID_TOOLCHAIN="$(pwd)/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64"
485           export PATH="$PATH:$ANDROID_TOOLCHAIN/bin"
486           ./android-build.sh ./rust-lightning ./ldk-c-bindings/ ./ldk-java-bins/android-artifacts
487       - name: Check latest library and jars are in bins repo
488         run: |
489           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
490           if ! diff LDK-release.aar "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/"LDK-release.aar; then
491             apt-get -y install diffoscope
492             diffoscope LDK-release.aar "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/LDK-release.aar"
493             exit 1
494           fi
495
496   osx:
497     strategy:
498       matrix:
499         include:
500           - platform: macos-11
501           - platform: macos-12
502           - platform: macos-13
503       fail-fast: false
504     runs-on: ${{ matrix.platform }}
505     steps:
506       - name: Install Rust components
507         run: |
508           rustup target install aarch64-apple-darwin
509           rustup component add rust-src
510       - name: Checkout source code
511         uses: actions/checkout@v2
512         with:
513           fetch-depth: 0
514       - name: Install cbindgen
515         run: cargo install cbindgen
516       - name: Checkout Rust-Lightning and LDK-C-Bindings git
517         run: |
518           git config --global user.email "ldk-ci@example.com"
519           git config --global user.name "LDK CI"
520           # Note this is a different endpoint, as we need one non-upstream commit!
521           git clone https://github.com/rghtningdevkit/ust-lightning
522           cd rust-lightning
523           git checkout origin/0.0.117-bindings
524           cd ..
525           git clone https://github.com/lightningdevkit/ldk-c-bindings
526           cd ldk-c-bindings
527           git checkout 0.0.117
528       - name: Rebuild C bindings and check the sample app builds + links
529         run: |
530           cd ldk-c-bindings
531           CC=clang ./genbindings.sh ../rust-lightning true
532       - name: Fetch OpenJDK 18
533         run: |
534           if [ "$(uname -m)" = "arm64" ]; then
535             wget -O openjdk-18.0.1.1_macos-aarch64_bin.tar.gz https://download.java.net/java/GA/jdk18.0.1.1/65ae32619e2f40f3a9af3af1851d6e19/2/GPL/openjdk-18.0.1.1_macos-aarch64_bin.tar.gz
536             if [ "$(shasum -a 256 openjdk-18.0.1.1_macos-aarch64_bin.tar.gz | awk '{ print $1 }')" != "29773ad68063bdad7fbaeb762cd873d3f243e86de380d3ac5335cdb929371fb5" ]; then
537               echo "Bad hash"
538               exit 1
539             fi
540             tar xvvf openjdk-18.0.1.1_macos-aarch64_bin.tar.gz
541           else
542             wget -O openjdk-18.0.1.1_macos-x64_bin.tar.gz https://download.java.net/java/GA/jdk18.0.1.1/65ae32619e2f40f3a9af3af1851d6e19/2/GPL/openjdk-18.0.1.1_macos-x64_bin.tar.gz
543             if [ "$(shasum -a 256 openjdk-18.0.1.1_macos-x64_bin.tar.gz | awk '{ print $1 }')" != "f02d17ec5a387555f8489abc352d973b6c10364409b597046025938e2266d72a" ]; then
544               echo "Bad hash"
545               exit 1
546             fi
547             tar xvvf openjdk-18.0.1.1_macos-x64_bin.tar.gz
548           fi
549       - name: Checkout latest Linux binaries
550         run: |
551           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
552           echo "Fetching deterministic binaries for LDK-GC ${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
553           # Gitweb only allows snapshots of folders by providing the object hash, which we have to extract:
554           SNAPSHOT_LINK="$(wget -O /dev/stdout "https://git.bitcoin.ninja/index.cgi?p=ldk-java-bins;a=tree;f=${LDK_GARBAGECOLLECTED_GIT_OVERRIDE};hb=refs/heads/main" | grep snapshot | grep -o 'href="[a-zA-Z0-9/?\.=;\-]*"' | sed 's/href="//' | tr -d '"' | grep snapshot)"
555           wget -O bins-snapshot.tgz "https://git.bitcoin.ninja${SNAPSHOT_LINK}"
556           mkdir -p ldk-java-bins/"${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
557           cd ldk-java-bins/"${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}"
558           tar xvvf ../../bins-snapshot.tgz
559           mv ldk-java-bins-*/* ./
560           cd ../..
561           mkdir -p src/main/resources/
562           cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/liblightningjni_Linux-"* src/main/resources/
563       - name: Build Java Release Bindings
564         run: |
565           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
566           export JAVA_HOME=`pwd`/jdk-18.0.1.1.jdk/Contents/Home
567           export PATH=$JAVA_HOME/bin:$PATH
568           ./genbindings.sh ./ldk-c-bindings/ "-I$JAVA_HOME/include/ -I$JAVA_HOME/include/darwin -isysroot$(xcrun --show-sdk-path)" false false
569
570           if [ "${{ matrix.platform }}" = "macos-11" ]; then
571             export CC="clang --target=aarch64-apple-darwin"
572             export LDK_TARGET=aarch64-apple-darwin
573             export LDK_TARGET_CPU=apple-a14
574             ./genbindings.sh ./ldk-c-bindings/ "-I$JAVA_HOME/include/ -I$JAVA_HOME/include/darwin -isysroot$(xcrun --show-sdk-path)" false false
575             cat src/main/resources/liblightningjni_MacOSX-aarch64.nativelib > /dev/null
576
577           fi
578       - name: Fetch Maven 3.8.4
579         run: |
580           # We don't bother using the upstream mirrors as they remove prior
581           # releases aggressively, causing spurious CI failures when we don't
582           # care about the version used.
583           wget -O apache-maven-3.8.4-bin.tar.gz https://bitcoin.ninja/apache-maven-3.8.4-bin.tar.gz
584           if [ "$(shasum -a 256 apache-maven-3.8.4-bin.tar.gz | awk '{ print $1 }')" != "2cdc9c519427bb20fdc25bef5a9063b790e4abd930e7b14b4e9f4863d6f9f13c" ]; then
585             echo "Bad hash"
586             exit 1
587           fi
588           tar xvvf apache-maven-3.8.4-bin.tar.gz
589           export PATH=apache-maven-3.8.4/bin:$PATH
590       - name: Run Java Tests against built jar
591         run: |
592           export JAVA_HOME=`pwd`/jdk-18.0.1.1.jdk/Contents/Home
593           export PATH=$JAVA_HOME/bin:$PATH
594           mvn -DskipTests=true package
595           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
596           JAR_VERSION=${LDK_GARBAGECOLLECTED_GIT_OVERRIDE:1:100}
597           mvn install:install-file -Dfile=target/ldk-java-${JAR_VERSION}.jar -DgroupId=org.lightningdevkit -DartifactId=ldk-java -Dversion=1.0-SNAPSHOT -Dpackaging=jar
598           cd javatester
599           mvn -q -B package
600           java -ea -jar target/ldk-java-tests-1.0-SNAPSHOT-jar-with-dependencies.jar
601       - name: Run Java Tests against release bins
602         run: |
603           export LDK_GARBAGECOLLECTED_GIT_OVERRIDE="$(git describe --tag HEAD)"
604           export JAVA_HOME=`pwd`/jdk-18.0.1.1.jdk/Contents/Home
605           export PATH=$JAVA_HOME/bin:$PATH
606           cp "ldk-java-bins/${LDK_GARBAGECOLLECTED_GIT_OVERRIDE}/ldk-java.jar" ./
607           mvn install:install-file -Dfile=ldk-java.jar -DgroupId=org.lightningdevkit -DartifactId=ldk-java -Dversion=1.0-SNAPSHOT -Dpackaging=jar
608           cd javatester
609           mvn clean
610           mvn -q -B package
611           java -ea -jar target/ldk-java-tests-1.0-SNAPSHOT-jar-with-dependencies.jar