One chain source to rule them all #1933
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
# Controls when the workflow will run | |
on: | |
# Triggers the workflow on push events but only for the "main" branch | |
push: | |
branches: [ main ] | |
pull_request: | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
fmt: | |
name: Cargo Format | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check Rust Formatting | |
run: | | |
cd lib | |
cargo fmt -- --check | |
cd ../cli | |
cargo fmt -- --check | |
clippy: | |
name: Cargo Clippy | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
lib -> target | |
cli -> target | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "27.2" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Check Rust Clippy | |
run: | | |
cd lib | |
cargo clippy -- -D warnings | |
cd ../cli | |
cargo clippy -- -D warnings | |
tests: | |
name: Test sdk-core | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
lib -> target | |
cli -> target | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "27.2" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run sdk-core tests | |
working-directory: lib/core | |
run: cargo test | |
build-bindings: | |
name: Test bindings | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
lib -> target | |
cli -> target | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "27.2" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build bindings | |
working-directory: lib/bindings | |
run: cargo build | |
- name: Build C# bindings | |
working-directory: lib/bindings | |
run: | | |
cargo install uniffi-bindgen-cs --git https://github.com/NordSecurity/uniffi-bindgen-cs --tag v0.8.0+v0.25.0 | |
uniffi-bindgen-cs src/breez_sdk_liquid.udl -o ffi/csharp -c ./uniffi.toml | |
cp ../target/debug/libbreez_sdk_liquid_bindings.so ffi/csharp | |
- name: Build golang bindings | |
working-directory: lib/bindings | |
run: | | |
cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0 | |
uniffi-bindgen-go src/breez_sdk_liquid.udl -o ffi/golang -c ./uniffi.toml | |
cp ../target/debug/libbreez_sdk_liquid_bindings.so ffi/golang | |
cp -r ffi/golang/breez_sdk_liquid tests/bindings/golang/ | |
- name: Setup go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '1.19.9' | |
- name: Setup python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
- name: Run bindings tests | |
run: | | |
curl -o jna-5.12.1.jar https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.12.1/jna-5.12.1.jar | |
export CLASSPATH=$(pwd)/jna-5.12.1.jar; | |
cd lib/bindings | |
cargo test | |
notification-plugin: | |
name: Check notification plugin | |
runs-on: macOS-14 | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
lib -> target | |
cli -> target | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "27.2" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Java 17 | |
uses: actions/setup-java@v2 | |
with: | |
distribution: "temurin" | |
java-version: 17 | |
- name: Build bindings | |
working-directory: lib/bindings | |
run: cargo build | |
- name: Build Android bindings | |
working-directory: lib/bindings | |
run: | | |
cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_sdk_liquid.udl --no-format --language kotlin -o langs/android/lib/src/main/kotlin | |
- name: Run Android build | |
working-directory: lib/bindings/langs/android | |
run: | | |
./gradlew build | |
- name: Build Swift bindings | |
working-directory: lib/bindings | |
run: | | |
cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_sdk_liquid.udl --no-format --language swift -o langs/swift/Sources/BreezSDKLiquid | |
mv langs/swift/Sources/BreezSDKLiquid/breez_sdk_liquid.swift langs/swift/Sources/BreezSDKLiquid/BreezSDKLiquid.swift | |
cp langs/swift/Sources/BreezSDKLiquid/breez_sdk_liquidFFI.h langs/swift/breez_sdk_liquidFFI.xcframework/ios-arm64/breez_sdk_liquidFFI.framework/Headers | |
cp langs/swift/Sources/BreezSDKLiquid/breez_sdk_liquidFFI.h langs/swift/breez_sdk_liquidFFI.xcframework/ios-arm64_x86_64-simulator/breez_sdk_liquidFFI.framework/Headers | |
cp langs/swift/Sources/BreezSDKLiquid/breez_sdk_liquidFFI.h langs/swift/breez_sdk_liquidFFI.xcframework/macos-arm64_x86_64/breez_sdk_liquidFFI.framework/Headers | |
cp langs/swift/Sources/BreezSDKLiquid/breez_sdk_liquidFFI.h langs/flutter/breez_sdk_liquidFFI/include/ | |
rm langs/swift/Sources/BreezSDKLiquid/breez_sdk_liquidFFI.h | |
rm langs/swift/Sources/BreezSDKLiquid/breez_sdk_liquidFFI.modulemap | |
- name: Run Swift build | |
working-directory: lib/bindings/langs/swift | |
run: | | |
swift build | |
react-native: | |
name: Check react native bindings | |
runs-on: macOS-14 | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
- name: React native codegen | |
working-directory: packages/react-native | |
run: | | |
yarn global add tslint typescript | |
brew install kotlin ktlint swiftformat | |
make react-native | |
- name: Check git status | |
env: | |
GIT_PAGER: cat | |
run: | | |
status=$(git status --porcelain) | |
if [[ -n "$status" ]]; then | |
echo "Git status has changes" | |
echo "$status" | |
git diff | |
exit 1 | |
else | |
echo "No changes in git status" | |
fi | |
flutter: | |
name: Check Dart/Flutter bindings | |
runs-on: macOS-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: stable | |
flutter-version: 3.22.3 # Pinned until resource linking issues on Android is resolved with 3.24 | |
- run: flutter --version | |
- name: Set up just | |
uses: extractions/setup-just@v2 | |
- name: Set up Melos | |
uses: bluefireteam/melos-action@v3 | |
with: | |
run-bootstrap: false | |
- name: Initialize the workspace | |
working-directory: lib/bindings/langs/flutter/ | |
run: | | |
just clean | |
just init | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "27.2" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install flutter_rust_bridge_codegen dependencies | |
working-directory: lib/bindings/langs/flutter/ | |
run: just frb | |
- name: Generate Dart/Flutter bindings & Softlink C Headers | |
working-directory: lib/bindings/langs/flutter/ | |
run: just codegen | |
- name: Build iOS Framework & Softlink C Headers | |
working-directory: lib/bindings/langs/flutter/ | |
if: ${{ success() || failure() }} | |
run: just build-ios-framework | |
- name: Generate FFI bindings | |
working-directory: lib/bindings/langs/flutter/ | |
if: ${{ success() || failure() }} | |
run: just ffigen | |
- name: Static Analysis | |
working-directory: lib/bindings/langs/flutter/ | |
if: ${{ success() || failure() }} | |
run: melos analyze | |
- name: Check Formatting | |
working-directory: lib/bindings/langs/flutter/ | |
run: melos check-format | |
# This step is added to ensure version recipe was run to update podspec files & CMake script. | |
# It does not catch the case where 'packages/flutter/pubspec.yaml' wasn't updated properly. | |
- name: Update version number on podspec files & CMake scripts | |
working-directory: lib/bindings/langs/flutter/ | |
run: just version | |
- name: Check git status | |
env: | |
GIT_PAGER: cat | |
run: | | |
status=$(git status --porcelain) | |
if [[ -n "$status" ]]; then | |
echo "Git status has changes" | |
echo "$status" | |
git diff | |
exit 1 | |
else | |
echo "No changes in git status" | |
fi | |
# Create a new plain Rust project, add the Liquid SDK as single dependency and try to compile it. | |
# This tests whether the SDK compiles with the latest version of the dependencies that can be updated. | |
# | |
# See discussion at https://github.com/breez/breez-sdk/pull/971 | |
check-sdk-as-dependency: | |
name: Check SDK as Rust dependency in fresh project | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
- name: Install rust | |
run: | | |
rustup set auto-self-update disable | |
rustup toolchain install stable --profile minimal | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
lib -> target | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v3 | |
with: | |
version: "27.2" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: test-new-project-with-sdk-dependency | |
run: | | |
mkdir new-project | |
cd new-project | |
cargo init --name test_project --vcs none | |
# A project might reference our SDK as a git repository | |
# cargo add --git https://github.com/breez/breez-sdk-liquid breez-sdk-liquid | |
# In this test, we reference the checked out repo (e.g. this PR branch) | |
cargo add --path ../lib/core breez-sdk-liquid | |
# Add the secp256k1-zkp patch: https://github.com/BlockstreamResearch/rust-secp256k1-zkp/pull/48/commits | |
echo "[patch.crates-io]" >> Cargo.toml | |
echo "secp256k1-zkp = {git = 'https://github.com/sanket1729/rust-secp256k1-zkp.git', rev = '60e631c24588a0c9e271badd61959294848c665d'}" >> Cargo.toml | |
# Propagate the patch in Cargo.lock | |
rm Cargo.lock | |
cargo update --package secp256k1-zkp | |
cargo clippy -- -D warnings |