From 61e09f32bb467ba8ba1affc204728d34e23cd40d Mon Sep 17 00:00:00 2001 From: amackillop Date: Mon, 19 Jan 2026 08:20:13 -0800 Subject: [PATCH 1/2] Fix Android build by targeting API level 28 The aws-lc-sys crate uses getentropy() which was added in Android API level 28. The default NDK configuration was using API level 24, causing the build to fail with "call to undeclared function 'getentropy'". Explicitly configure the Android NDK toolchain environment variables to use android28 compilers and linker. --- .github/workflows/CI.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 4cb1c53..9d8133d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -95,7 +95,14 @@ jobs: yarn build --target aarch64-unknown-linux-gnu - host: ubuntu-latest target: aarch64-linux-android - build: yarn build --target aarch64-linux-android + build: | + export ANDROID_NDK_HOME="${ANDROID_NDK_ROOT:-$ANDROID_NDK_LATEST_HOME}" + export TOOLCHAIN="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64" + export CC_aarch64_linux_android="$TOOLCHAIN/bin/aarch64-linux-android28-clang" + export CXX_aarch64_linux_android="$TOOLCHAIN/bin/aarch64-linux-android28-clang++" + export AR_aarch64_linux_android="$TOOLCHAIN/bin/llvm-ar" + export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/aarch64-linux-android28-clang" + yarn build --target aarch64-linux-android - host: ubuntu-latest target: aarch64-unknown-linux-musl docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine From a8c5fee23504a0cb70845bdac0a1437dad69040c Mon Sep 17 00:00:00 2001 From: amackillop Date: Sun, 18 Jan 2026 07:06:19 -0800 Subject: [PATCH 2/2] Bump MSRV to 1.85 and adopt Rust edition 2024 Update to Rust edition 2024 and set MSRV to 1.85, which allows removing the temporary dependency pins that were needed to maintain 1.82 compat: - home 0.5.11 pin - ICU crate version pins (icu_collections, icu_locale_core, etc.) Update CI to install Rust 1.85 across all build targets. Docker images ship with older Rust versions, so each docker build now installs the required version. Non-docker builds use dtolnay/rust-toolchain with a centralized RUST_VERSION env variable. Also applies edition 2024 rustfmt import ordering to lib.rs. --- .github/workflows/CI.yml | 33 +++++++++++++++++++++------------ Cargo.toml | 11 ++--------- src/lib.rs | 14 +++++++------- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 9d8133d..dc68f8d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -4,6 +4,7 @@ env: APP_NAME: lightning-js MACOSX_DEPLOYMENT_TARGET: '10.13' CARGO_INCREMENTAL: '1' + RUST_VERSION: '1.85' permissions: contents: write id-token: write @@ -61,21 +62,28 @@ jobs: target: x86_64-apple-darwin build: yarn build --target x86_64-apple-darwin - host: windows-latest - build: yarn build --target x86_64-pc-windows-msvc target: x86_64-pc-windows-msvc + build: yarn build --target x86_64-pc-windows-msvc - host: windows-latest - build: yarn build --target i686-pc-windows-msvc target: i686-pc-windows-msvc + build: yarn build --target i686-pc-windows-msvc - host: ubuntu-latest target: x86_64-unknown-linux-gnu docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian - build: yarn build --target x86_64-unknown-linux-gnu + build: | + rustup install $RUST_VERSION + rustup default $RUST_VERSION + rustup target add x86_64-unknown-linux-gnu + yarn build --target x86_64-unknown-linux-gnu - host: ubuntu-latest target: x86_64-unknown-linux-musl docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine build: | export CC=gcc export CXX=g++ + rustup install $RUST_VERSION + rustup default $RUST_VERSION + rustup target add x86_64-unknown-linux-musl yarn build --target x86_64-unknown-linux-musl - host: macos-latest target: aarch64-apple-darwin @@ -92,6 +100,9 @@ jobs: export AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc export CFLAGS_aarch64_unknown_linux_gnu="-DAT_HWCAP2=26" + rustup install $RUST_VERSION + rustup default $RUST_VERSION + rustup target add aarch64-unknown-linux-gnu yarn build --target aarch64-unknown-linux-gnu - host: ubuntu-latest target: aarch64-linux-android @@ -106,11 +117,13 @@ jobs: - host: ubuntu-latest target: aarch64-unknown-linux-musl docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - build: |- - set -e && + build: | + set -e export CC=aarch64-linux-musl-gcc export CXX=aarch64-linux-musl-g++ - rustup target add aarch64-unknown-linux-musl && + rustup install $RUST_VERSION + rustup default $RUST_VERSION + rustup target add aarch64-unknown-linux-musl yarn build --target aarch64-unknown-linux-musl - host: windows-latest target: aarch64-pc-windows-msvc @@ -132,7 +145,7 @@ jobs: uses: dtolnay/rust-toolchain@stable if: ${{ !matrix.settings.docker }} with: - toolchain: stable + toolchain: ${{ env.RUST_VERSION }} targets: ${{ matrix.settings.target }} - name: Cache cargo uses: actions/cache@v4 @@ -144,10 +157,6 @@ jobs: .cargo-cache target/ key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} - - name: Setup toolchain - run: ${{ matrix.settings.setup }} - if: ${{ matrix.settings.setup }} - shell: bash - name: Install dependencies run: yarn install - name: Build in docker @@ -155,7 +164,7 @@ jobs: if: ${{ matrix.settings.docker }} with: image: ${{ matrix.settings.docker }} - options: '--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build' + options: '--user 0:0 -e RUST_VERSION=${{ env.RUST_VERSION }} -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build' run: ${{ matrix.settings.build }} - name: Build run: ${{ matrix.settings.build }} diff --git a/Cargo.toml b/Cargo.toml index ad3658e..61198c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,8 @@ [package] -edition = "2021" name = "lightning-js" version = "0.1.0" +edition = "2024" +rust-version = "1.85" [lib] crate-type = ["cdylib"] @@ -15,14 +16,6 @@ ldk-node = { default-features = false, git = "https://github.com/moneydevkit/ napi = { version = "2", features = ["napi4"] } napi-derive = "2" tokio = { version = "1", features = ["rt-multi-thread"] } -# Temporary pin: ldk-node pulls in home 0.5.12 which needs edition2024 cargo -home = "=0.5.11" -# Pin ICU crates to keep MSRV at 1.82.0 -icu_collections = "=2.0.0" -icu_locale_core = "=2.0.0" -icu_normalizer = "=2.0.0" -icu_properties = "=2.0.1" -icu_provider = "=2.0.0" writeable = { version = "=0.6.2", features = ["alloc"] } [build-dependencies] diff --git a/src/lib.rs b/src/lib.rs index 2038519..d5b9874 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,28 +6,29 @@ use std::{ fmt::{self, Write}, str::FromStr, sync::{ - atomic::{AtomicU8, Ordering}, Arc, OnceLock, RwLock, + atomic::{AtomicU8, Ordering}, }, time::{Duration, Instant}, }; use bitcoin_payment_instructions::{ - amount::Amount as InstructionAmount, hrn_resolution::HrnResolver, http_resolver::HTTPHrnResolver, - ParseError, PaymentInstructions, PaymentMethod, + ParseError, PaymentInstructions, PaymentMethod, amount::Amount as InstructionAmount, + hrn_resolution::HrnResolver, http_resolver::HTTPHrnResolver, }; use napi::{ - threadsafe_function::{ThreadsafeFunction, ThreadsafeFunctionCallMode}, Env, JsFunction, Status, + threadsafe_function::{ThreadsafeFunction, ThreadsafeFunctionCallMode}, }; use ldk_node::logger::{LogLevel, LogRecord, LogWriter}; use ldk_node::{ + Builder, Event, Node, bip39::Mnemonic, bitcoin::{ - hashes::{sha256, Hash}, - secp256k1::PublicKey, Network, + hashes::{Hash, sha256}, + secp256k1::PublicKey, }, config::Config, generate_entropy_mnemonic, @@ -38,7 +39,6 @@ use ldk_node::{ util::scid_utils, }, lightning_invoice::{Bolt11Invoice, Bolt11InvoiceDescription, Description}, - Builder, Event, Node, }; use tokio::runtime::Runtime;