Skip to content

Commit

Permalink
Merge pull request #161 from breez/flutter_ci
Browse files Browse the repository at this point in the history
CI: Check Dart/Flutter bindings & run static code analysis for Dart/Flutter packages
  • Loading branch information
erdemyerebasmaz authored May 6, 2024
2 parents 5815e7e + 0568929 commit cc85881
Show file tree
Hide file tree
Showing 31 changed files with 1,070 additions and 136 deletions.
68 changes: 67 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
# Triggers the workflow on push events but only for the "main" branch
push:
branches: [ main ]
pull_request:
pull_request:

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
Expand Down Expand Up @@ -78,6 +78,72 @@ jobs:
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
- 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/bindings-flutter/
run: |
just clean
just init
- name: Install flutter_rust_bridge_codegen dependencies
working-directory: lib/bindings/bindings-flutter/
run: just frb

- name: Generate Dart/Flutter bindings
working-directory: lib/bindings/bindings-flutter/
continue-on-error: true
run: |
just codegen
- name: Generate FFI bindings
working-directory: lib/bindings/bindings-flutter/
continue-on-error: true
run: |
just ffigen
- name: Static Analysis
working-directory: lib/bindings/bindings-flutter/
run: melos analyze

- name: Check Formatting
working-directory: lib/bindings/bindings-flutter/
run: melos check-format

- name: Check git status
env:
GIT_PAGER: cat
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
**/.dart_tool
# fenv
**/.flutter-version
# symlink headers
packages/flutter/ios/Classes/breez_liquid_sdk.h
packages/flutter/macos/Classes/breez_liquid_sdk.h
# Miscellaneous
.DS_Store
.idea/
Expand Down
8 changes: 4 additions & 4 deletions cli/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions lib/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 12 additions & 11 deletions lib/bindings/bindings-flutter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@

Binding generation & build scripts for Dart/Flutter packages of Breez Liquid SDK.

Prerequisites:
- [just](https://github.com/casey/just) command runner.
- [Melos](https://github.com/invertase/melos) CLI tool.

```
just clean
just init
just gen
just link
just build
```
## Prerequisites
- [just](https://github.com/casey/just?tab=readme-ov-file#installation) command runner.

## Getting Started
Run `just bootstrap` to initialize your workspace.

To see all available recipes, run `just`.

## Troubleshooting
- [flutter_rust_bridge > Troubleshooting](https://cjycode.com/flutter_rust_bridge/manual/troubleshooting)
- [flutter_rust_bridge > Ffigen Troubleshooting](https://cjycode.com/flutter_rust_bridge/manual/ffigen-troubleshooting)


## License

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
// EXTRA BEGIN
typedef struct DartCObject *WireSyncRust2DartDco;
typedef struct WireSyncRust2DartSse {
uint8_t *ptr;
int32_t len;
} WireSyncRust2DartSse;

typedef int64_t DartPort;
typedef bool (*DartPostCObjectFnType)(DartPort port_id, void *message);
void store_dart_post_cobject(DartPostCObjectFnType ptr);
// EXTRA END
typedef struct _Dart_Handle* Dart_Handle;

/**
* Claim tx feerate for Receive, in sats per vbyte.
* Since the Liquid blocks are consistently empty for now, we hardcode the minimum feerate.
*/
#define LIQUID_CLAIM_TX_FEERATE 0.1

typedef struct wire_cst_list_prim_u_8_strict {
uint8_t *ptr;
int32_t len;
} wire_cst_list_prim_u_8_strict;

typedef struct wire_cst_connect_request {
struct wire_cst_list_prim_u_8_strict *mnemonic;
struct wire_cst_list_prim_u_8_strict *data_dir;
int32_t network;
} wire_cst_connect_request;

typedef struct wire_cst_get_info_request {
bool with_scan;
} wire_cst_get_info_request;

typedef struct wire_cst_prepare_receive_request {
uint64_t payer_amount_sat;
} wire_cst_prepare_receive_request;

typedef struct wire_cst_prepare_send_request {
struct wire_cst_list_prim_u_8_strict *invoice;
} wire_cst_prepare_send_request;

typedef struct wire_cst_prepare_receive_response {
struct wire_cst_list_prim_u_8_strict *pair_hash;
uint64_t payer_amount_sat;
uint64_t fees_sat;
} wire_cst_prepare_receive_response;

typedef struct wire_cst_restore_request {
struct wire_cst_list_prim_u_8_strict *backup_path;
} wire_cst_restore_request;

typedef struct wire_cst_prepare_send_response {
struct wire_cst_list_prim_u_8_strict *id;
uint64_t payer_amount_sat;
uint64_t receiver_amount_sat;
uint64_t total_fees;
struct wire_cst_list_prim_u_8_strict *funding_address;
struct wire_cst_list_prim_u_8_strict *invoice;
} wire_cst_prepare_send_response;

typedef struct wire_cst_payment {
struct wire_cst_list_prim_u_8_strict *id;
uint32_t *timestamp;
uint64_t amount_sat;
uint64_t *fees_sat;
int32_t payment_type;
struct wire_cst_list_prim_u_8_strict *invoice;
} wire_cst_payment;

typedef struct wire_cst_list_payment {
struct wire_cst_payment *ptr;
int32_t len;
} wire_cst_list_payment;

typedef struct wire_cst_get_info_response {
uint64_t balance_sat;
struct wire_cst_list_prim_u_8_strict *pubkey;
} wire_cst_get_info_response;

typedef struct wire_cst_PaymentError_Generic {
struct wire_cst_list_prim_u_8_strict *err;
} wire_cst_PaymentError_Generic;

typedef struct wire_cst_PaymentError_LwkError {
struct wire_cst_list_prim_u_8_strict *err;
} wire_cst_PaymentError_LwkError;

typedef struct wire_cst_PaymentError_SendError {
struct wire_cst_list_prim_u_8_strict *err;
} wire_cst_PaymentError_SendError;

typedef struct wire_cst_PaymentError_SignerError {
struct wire_cst_list_prim_u_8_strict *err;
} wire_cst_PaymentError_SignerError;

typedef union PaymentErrorKind {
struct wire_cst_PaymentError_Generic Generic;
struct wire_cst_PaymentError_LwkError LwkError;
struct wire_cst_PaymentError_SendError SendError;
struct wire_cst_PaymentError_SignerError SignerError;
} PaymentErrorKind;

typedef struct wire_cst_payment_error {
int32_t tag;
union PaymentErrorKind kind;
} wire_cst_payment_error;

typedef struct wire_cst_receive_payment_response {
struct wire_cst_list_prim_u_8_strict *id;
struct wire_cst_list_prim_u_8_strict *invoice;
} wire_cst_receive_payment_response;

typedef struct wire_cst_send_payment_response {
struct wire_cst_list_prim_u_8_strict *txid;
} wire_cst_send_payment_response;

void frbgen_breez_liquid_wire_backup(int64_t port_);

void frbgen_breez_liquid_wire_connect(int64_t port_, struct wire_cst_connect_request *req);

void frbgen_breez_liquid_wire_empty_wallet_cache(int64_t port_);

void frbgen_breez_liquid_wire_get_info(int64_t port_, struct wire_cst_get_info_request *req);

void frbgen_breez_liquid_wire_list_payments(int64_t port_, bool with_scan, bool include_pending);

void frbgen_breez_liquid_wire_prepare_receive_payment(int64_t port_,
struct wire_cst_prepare_receive_request *req);

void frbgen_breez_liquid_wire_prepare_send_payment(int64_t port_,
struct wire_cst_prepare_send_request *req);

void frbgen_breez_liquid_wire_receive_payment(int64_t port_,
struct wire_cst_prepare_receive_response *req);

void frbgen_breez_liquid_wire_recover_funds(int64_t port_, uintptr_t recovery);

void frbgen_breez_liquid_wire_restore(int64_t port_, struct wire_cst_restore_request *req);

void frbgen_breez_liquid_wire_send_payment(int64_t port_,
struct wire_cst_prepare_send_response *req);

void frbgen_breez_liquid_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerLBtcReverseRecovery(const void *ptr);

void frbgen_breez_liquid_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerLBtcReverseRecovery(const void *ptr);

struct wire_cst_connect_request *frbgen_breez_liquid_cst_new_box_autoadd_connect_request(void);

struct wire_cst_get_info_request *frbgen_breez_liquid_cst_new_box_autoadd_get_info_request(void);

struct wire_cst_prepare_receive_request *frbgen_breez_liquid_cst_new_box_autoadd_prepare_receive_request(void);

struct wire_cst_prepare_receive_response *frbgen_breez_liquid_cst_new_box_autoadd_prepare_receive_response(void);

struct wire_cst_prepare_send_request *frbgen_breez_liquid_cst_new_box_autoadd_prepare_send_request(void);

struct wire_cst_prepare_send_response *frbgen_breez_liquid_cst_new_box_autoadd_prepare_send_response(void);

struct wire_cst_restore_request *frbgen_breez_liquid_cst_new_box_autoadd_restore_request(void);

uint32_t *frbgen_breez_liquid_cst_new_box_autoadd_u_32(uint32_t value);

uint64_t *frbgen_breez_liquid_cst_new_box_autoadd_u_64(uint64_t value);

struct wire_cst_list_payment *frbgen_breez_liquid_cst_new_list_payment(int32_t len);

struct wire_cst_list_prim_u_8_strict *frbgen_breez_liquid_cst_new_list_prim_u_8_strict(int32_t len);
static int64_t dummy_method_to_enforce_bundling(void) {
int64_t dummy_var = 0;
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_connect_request);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_get_info_request);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_prepare_receive_request);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_prepare_receive_response);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_prepare_send_request);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_prepare_send_response);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_restore_request);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_u_32);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_box_autoadd_u_64);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_list_payment);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_cst_new_list_prim_u_8_strict);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerLBtcReverseRecovery);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerLBtcReverseRecovery);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_backup);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_connect);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_empty_wallet_cache);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_get_info);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_list_payments);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_prepare_receive_payment);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_prepare_send_payment);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_receive_payment);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_recover_funds);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_restore);
dummy_var ^= ((int64_t) (void*) frbgen_breez_liquid_wire_send_payment);
dummy_var ^= ((int64_t) (void*) store_dart_post_cobject);
return dummy_var;
}
3 changes: 1 addition & 2 deletions lib/bindings/bindings-flutter/flutter_rust_bridge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ rust_input: ../../core/src/bindings.rs
dart_output: ../../../packages/dart/lib/src
rust_output: ../../core/src/frb/bridge.rs
c_output: breez_liquid_sdk/include/breez_liquid_sdk.h
duplicated_c_output: [../../../packages/flutter/macos/Classes/breez_liquid_sdk.h, ../../../packages/flutter/ios/Classes/breez_liquid_sdk.h]
web: false
full_dep: true
add_mod_to_lib: false
deps_check: false
dart_format_line_length: 80
Loading

0 comments on commit cc85881

Please sign in to comment.