mirror of
https://github.com/aljazceru/breez-sdk-liquid.git
synced 2026-01-23 07:54:22 +01:00
Flutter uniFFI (#510)
* Flutter uniffi * Set on-demand resources * Do not build non-uniffi libraries * Change iosLibName * Add BreezSDKLiquid as on demand resources * Use downloaded framework * Add Sources to published flutter package * Set OTHER_LDFLAGS * Add logging * Refactor library initialization logic and throw an error if initialization fails * Do not statically link framework on production * Use uniFFI headers to generate FlutterBreezLiquidBindings * Re add frb header * Correct the library name * Remove static_framework * Move source header files * Copy iOS podspecs to macOS folder * Update version of macOS podspecs * Remove Windows & Linux support * Remove CMake scripts * Remove breez_sdk_liquid.podspec from version script * Cleanup older build scripts used by melos & just recipes * Remove softlink & copy recipes Add recipe descriptions * Rename link-uniffi recipe to link-headers Make sure headers are linked after uniffi is built - Remove just gen recipe Add recipe descriptions * Set package versions on production files as well when publishing * Include bindings project on melos script hooks * Flutter uniffi * Set on-demand resources * Do not build non-uniffi libraries * Change iosLibName * Add BreezSDKLiquid as on demand resources * Use downloaded framework * Add Sources to published flutter package * Set OTHER_LDFLAGS * Add logging * Refactor library initialization logic and throw an error if initialization fails * Do not statically link framework on production * Use uniFFI headers to generate FlutterBreezLiquidBindings * Re add frb header * Correct the library name * Remove static_framework * Move source header files * Copy iOS podspecs to macOS folder * Update version of macOS podspecs * Remove Windows & Linux support * Remove CMake scripts * Remove breez_sdk_liquid.podspec from version script * Cleanup older build scripts used by melos & just recipes * Remove softlink & copy recipes Add recipe descriptions * Rename link-uniffi recipe to link-headers Make sure headers are linked after uniffi is built - Remove just gen recipe Add recipe descriptions * Set package versions on production files as well when publishing * Include bindings project on melos script hooks * chore: just version * fix: remove unused files on "Set package version" step * copy FFI header files * [WIP] Add macOS support * remove example app on Flutter plugin * Link headers before running ffigen on CI workflow * macOS: add macos/Sources folder to .gitignore . * macOS: Copy iOS sources to macOS sources after downloading bindings * macOS: copy sources & framework file to macos folder on build-uniffi-swift script * import breez_sdk_liquidFFI header on plugin file Update flutter_breez_liquid.c * cleanup header file artifacts --------- Co-authored-by: Ross Savage <hello@satimoto.com>
This commit is contained in:
133
.github/workflows/build-bindings-flutter.yml
vendored
133
.github/workflows/build-bindings-flutter.yml
vendored
@@ -1,133 +0,0 @@
|
||||
name: Build bindings for Flutter
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
ref:
|
||||
description: 'commit/tag/branch reference'
|
||||
required: true
|
||||
type: string
|
||||
workflow_call:
|
||||
inputs:
|
||||
repository:
|
||||
description: 'sdk repository, defaults to current repository'
|
||||
required: false
|
||||
type: string
|
||||
ref:
|
||||
description: 'commit/tag/branch reference'
|
||||
required: true
|
||||
type: string
|
||||
use-dummy-binaries:
|
||||
description: 'If true, creates dummy binaries rather than real binaries'
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
setup:
|
||||
if: ${{ !inputs.use-dummy-binaries }}
|
||||
runs-on: macOS-latest
|
||||
name: Setup
|
||||
steps:
|
||||
- name: Disk Cleanup
|
||||
run: |
|
||||
echo "::group::Free space before cleanup"
|
||||
df -hI
|
||||
echo "::endgroup::"
|
||||
echo "::group::Cleaned Files"
|
||||
sudo rm -rf /Applications/Xcode_14.3.1.app
|
||||
sudo rm -rf /Applications/Xcode_15.0.1.app
|
||||
sudo rm -rf /Applications/Xcode_15.1.app
|
||||
sudo rm -rf /Applications/Xcode_15.2.app
|
||||
sudo rm -rf /Applications/Xcode_15.3.app
|
||||
echo "::endgroup::"
|
||||
echo "::group::Free space after cleanup"
|
||||
df -hI
|
||||
echo "::endgroup::"
|
||||
|
||||
build:
|
||||
if: ${{ !inputs.use-dummy-binaries }}
|
||||
needs: setup
|
||||
runs-on: macOS-latest
|
||||
name: Build Flutter bindings
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.ref }}
|
||||
repository: ${{ inputs.repository || github.repository }}
|
||||
|
||||
- name: Install Protoc
|
||||
uses: arduino/setup-protoc@v3
|
||||
with:
|
||||
version: "27.2"
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install Zig
|
||||
uses: goto-bus-stop/setup-zig@v2
|
||||
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: lib
|
||||
|
||||
- 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 flutter_rust_bridge_codegen dependencies
|
||||
working-directory: lib/bindings/langs/flutter/
|
||||
run: just frb
|
||||
|
||||
- name: Build bindings
|
||||
working-directory: lib/bindings/langs/flutter/
|
||||
run: just build
|
||||
|
||||
- name: Build language packages
|
||||
working-directory: lib/bindings/langs/flutter/
|
||||
run: |
|
||||
melos build-apple
|
||||
melos build-android
|
||||
|
||||
- name: Copy build output
|
||||
run: |
|
||||
mkdir -p dist
|
||||
cp lib/bindings/langs/flutter/platform-build/android.tar.gz dist
|
||||
cp lib/bindings/langs/flutter/platform-build/breez_sdk_liquid.xcframework.zip dist
|
||||
|
||||
- name: Archive Flutter bindings
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: bindings-flutter
|
||||
path: dist/*
|
||||
|
||||
build-dummies:
|
||||
if: ${{ inputs.use-dummy-binaries }}
|
||||
runs-on: macOS-latest
|
||||
name: Build Flutter dummy bindings
|
||||
steps:
|
||||
- name: Create dummy files
|
||||
run: |
|
||||
touch android.tar.gz
|
||||
touch breez_sdk_liquid.xcframework.zip
|
||||
|
||||
- name: Archive Flutter dummy bindings
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: bindings-flutter
|
||||
path: ./*
|
||||
5
.github/workflows/main.yml
vendored
5
.github/workflows/main.yml
vendored
@@ -200,6 +200,11 @@ jobs:
|
||||
working-directory: lib/bindings/langs/flutter/
|
||||
run: just codegen
|
||||
|
||||
- name: Link C Headers
|
||||
working-directory: lib/bindings/langs/flutter/
|
||||
if: ${{ success() || failure() }}
|
||||
run: just link-headers
|
||||
|
||||
- name: Generate FFI bindings
|
||||
working-directory: lib/bindings/langs/flutter/
|
||||
if: ${{ success() || failure() }}
|
||||
|
||||
14
.github/workflows/publish-all-platforms.yml
vendored
14
.github/workflows/publish-all-platforms.yml
vendored
@@ -98,11 +98,10 @@ jobs:
|
||||
bindings-windows: ${{ !!needs.pre-setup.outputs.csharp-package-version || !!needs.pre-setup.outputs.golang-package-version || !!needs.pre-setup.outputs.python-package-version }}
|
||||
bindings-darwin: ${{ !!needs.pre-setup.outputs.csharp-package-version || !!needs.pre-setup.outputs.golang-package-version || !!needs.pre-setup.outputs.python-package-version || !!needs.pre-setup.outputs.swift-package-version }}
|
||||
bindings-linux: ${{ !!needs.pre-setup.outputs.csharp-package-version || !!needs.pre-setup.outputs.golang-package-version || !!needs.pre-setup.outputs.python-package-version }}
|
||||
bindings-flutter: ${{ !!needs.pre-setup.outputs.flutter-package-version }}
|
||||
bindings-android: ${{ !!needs.pre-setup.outputs.kotlin-multiplatform-package-version || !!needs.pre-setup.outputs.maven-package-version || !!needs.pre-setup.outputs.golang-package-version }}
|
||||
bindings-ios: ${{ !!needs.pre-setup.outputs.kotlin-multiplatform-package-version || !!needs.pre-setup.outputs.maven-package-version || !!needs.pre-setup.outputs.swift-package-version }}
|
||||
kotlin: ${{ !!needs.pre-setup.outputs.kotlin-multiplatform-package-version || !!needs.pre-setup.outputs.maven-package-version }}
|
||||
swift: ${{ !!needs.pre-setup.outputs.swift-package-version }}
|
||||
swift: ${{ !!needs.pre-setup.outputs.swift-package-version || !!needs.pre-setup.outputs.flutter-package-version }}
|
||||
python: ${{ !!needs.pre-setup.outputs.python-package-version }}
|
||||
csharp: ${{ !!needs.pre-setup.outputs.csharp-package-version }}
|
||||
golang: ${{ !!needs.pre-setup.outputs.golang-package-version }}
|
||||
@@ -152,15 +151,6 @@ jobs:
|
||||
ref: ${{ needs.setup.outputs.ref }}
|
||||
use-dummy-binaries: ${{ needs.setup.outputs.use-dummy-binaries == 'true' }}
|
||||
|
||||
build-bindings-flutter:
|
||||
needs: setup
|
||||
if: ${{ needs.setup.outputs.bindings-flutter == 'true' }}
|
||||
uses: ./.github/workflows/build-bindings-flutter.yml
|
||||
with:
|
||||
repository: ${{ needs.setup.outputs.repository }}
|
||||
ref: ${{ needs.setup.outputs.ref }}
|
||||
use-dummy-binaries: ${{ needs.setup.outputs.use-dummy-binaries == 'true' }}
|
||||
|
||||
build-bindings-android:
|
||||
needs: setup
|
||||
if: ${{ needs.setup.outputs.bindings-android == 'true' }}
|
||||
@@ -275,7 +265,7 @@ jobs:
|
||||
publish-flutter:
|
||||
needs:
|
||||
- setup
|
||||
- build-bindings-flutter
|
||||
- build-language-bindings
|
||||
- publish-dart
|
||||
if: ${{ needs.setup.outputs.flutter == 'true' }}
|
||||
uses: ./.github/workflows/publish-flutter.yml
|
||||
|
||||
41
.github/workflows/publish-flutter.yml
vendored
41
.github/workflows/publish-flutter.yml
vendored
@@ -57,14 +57,19 @@ jobs:
|
||||
run: |
|
||||
rm -rf android
|
||||
rm -rf ios
|
||||
rm -rf macos
|
||||
rm -rf lib
|
||||
cp -r ../build/packages/flutter/android .
|
||||
cp -r ../build/packages/flutter/ios .
|
||||
cp -r ../build/packages/flutter/macos .
|
||||
mv android/build.gradle.production android/build.gradle
|
||||
mv ios/flutter_breez_liquid.podspec.production ios/flutter_breez_liquid.podspec
|
||||
rm ios/breez_sdk_liquid.podspec
|
||||
mv macos/flutter_breez_liquid.podspec.production macos/flutter_breez_liquid.podspec
|
||||
cp -r ../build/packages/flutter/lib .
|
||||
cp -r ../build/lib/bindings/langs/flutter/breez_sdk_liquid/include/breez_sdk_liquid.h ios/Classes
|
||||
cp -r ../build/lib/bindings/langs/flutter/breez_sdk_liquid/include/breez_sdk_liquid.h macos/Classes
|
||||
cp -r ../build/lib/bindings/langs/flutter/breez_sdk_liquidFFI/include/breez_sdk_liquidFFI.h ios/Classes
|
||||
cp -r ../build/lib/bindings/langs/flutter/breez_sdk_liquidFFI/include/breez_sdk_liquidFFI.h macos/Classes
|
||||
cp ../build/packages/flutter/analysis_options.yaml .
|
||||
cp ../build/packages/flutter/pubspec.yaml .
|
||||
cp ../build/packages/flutter/pubspec_overrides.yaml .
|
||||
@@ -78,8 +83,19 @@ jobs:
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: bindings-flutter
|
||||
path: bindings/
|
||||
name: bindings-swift
|
||||
path: dist/ios/Sources/BreezSDKLiquid/
|
||||
|
||||
- name: Cleanup header file artifacts
|
||||
working-directory: dist/ios/Sources/BreezSDKLiquid/
|
||||
run: |
|
||||
rm breez_sdk_liquidFFI.h
|
||||
rm breez_sdk_liquidFFI.modulemap
|
||||
|
||||
- name: Copy iOS sources to macOS sources
|
||||
working-directory: dist
|
||||
run: |
|
||||
cp -r ios/Sources/ macos/Sources/
|
||||
|
||||
- name: Set package version
|
||||
working-directory: dist
|
||||
@@ -87,15 +103,15 @@ jobs:
|
||||
sed -i.bak -e 's/version:.*/version: ${{ inputs.package-version }}/' pubspec.yaml
|
||||
sed -i.bak -e 's/path:.*/git:\n url: git@github.com:breez\/breez-sdk-liquid-dart.git\n ref: ${{ inputs.package-version }}/' pubspec_overrides.yaml
|
||||
sed -i.bak -e "s/^version .*/version '${{ inputs.package-version }}'/" android/build.gradle
|
||||
sed -i.bak -e 's/set(TagName.*/set(TagName "v${{ inputs.package-version }}")/' android/CMakeLists.txt
|
||||
sed -i.bak -e "s/^version = .*/version = '${{ inputs.package-version }}'/" ios/flutter_breez_liquid.podspec
|
||||
sed -i.bak -e "s/^version = .*/version = '${{ inputs.package-version }}'/" macos/flutter_breez_liquid.podspec
|
||||
rm pubspec.yaml.bak
|
||||
rm pubspec_overrides.yaml.bak
|
||||
rm android/build.gradle.bak
|
||||
rm android/CMakeLists.txt.bak
|
||||
rm ios/flutter_breez_liquid.podspec.bak
|
||||
rm macos/flutter_breez_liquid.podspec.bak
|
||||
|
||||
- name: Update version number on podspec files & CMake scripts
|
||||
- name: Update version number on podspec & gradle files
|
||||
working-directory: build/lib/bindings/langs/flutter/
|
||||
run: bash scripts/version.sh
|
||||
|
||||
@@ -118,16 +134,3 @@ jobs:
|
||||
git push
|
||||
git tag v${{ inputs.package-version }} -m "v${{ inputs.package-version }}"
|
||||
git push --tags
|
||||
|
||||
- name: Release and attach binary artifacts
|
||||
if: ${{ inputs.publish }}
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
repository: breez/breez-sdk-liquid-flutter
|
||||
files: |
|
||||
bindings/android.tar.gz
|
||||
bindings/breez_sdk_liquid.xcframework.zip
|
||||
tag_name: v${{ inputs.package-version || '0.0.1' }}
|
||||
generate_release_notes: false
|
||||
token: ${{ secrets.SWIFT_RELEASE_TOKEN }}
|
||||
prerelease: true
|
||||
|
||||
Reference in New Issue
Block a user