From d757e9db85fb6c8652bb7750cc3308dba48a59e0 Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Mon, 23 Feb 2026 00:08:09 +0100 Subject: [PATCH 1/2] fix: switch Kotlin publishing to GitHub Packages --- .github/workflows/publish-android.yml | 52 +++++++++++++++++++ .github/workflows/publish-jvm.yml | 52 +++++++++++++++++++ .gitignore | 10 ---- AGENTS.md | 4 +- bindings/README.md | 2 +- bindings/kotlin/ldk-node-android/README.md | 24 ++++----- .../kotlin/ldk-node-android/build.gradle.kts | 6 +-- .../kotlin/ldk-node-android/gradle.properties | 3 +- .../ldk-node-android/lib/build.gradle.kts | 48 ++++++++--------- bindings/kotlin/ldk-node-jvm/build.gradle.kts | 6 +-- .../kotlin/ldk-node-jvm/gradle.properties | 2 +- .../kotlin/ldk-node-jvm/lib/build.gradle.kts | 47 ++++++++--------- jitpack.yml | 4 -- scripts/uniffi_bindgen_generate_kotlin.sh | 6 ++- .../uniffi_bindgen_generate_kotlin_android.sh | 8 +-- 15 files changed, 177 insertions(+), 97 deletions(-) create mode 100644 .github/workflows/publish-android.yml create mode 100644 .github/workflows/publish-jvm.yml delete mode 100644 jitpack.yml diff --git a/.github/workflows/publish-android.yml b/.github/workflows/publish-android.yml new file mode 100644 index 000000000..c315efc55 --- /dev/null +++ b/.github/workflows/publish-android.yml @@ -0,0 +1,52 @@ +name: Android Publish + +on: + release: + types: [published] + workflow_dispatch: + inputs: + version: + description: "Version to publish (e.g., v0.1.0)" + required: true + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + server-id: github + settings-path: ${{ github.workspace }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Extract version from input or tag + id: version + shell: bash + run: | + VERSION="${{ inputs.version }}" + if [[ -z "$VERSION" ]]; then + VERSION="$GITHUB_REF_NAME" + fi + echo "version=${VERSION#v}" >> $GITHUB_OUTPUT + + - name: Build with Gradle + working-directory: bindings/kotlin/ldk-node-android + run: ./gradlew build -Pversion=${{ steps.version.outputs.version }} + + - name: Publish to GitHub Packages + working-directory: bindings/kotlin/ldk-node-android + env: + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.ORG_PACKAGES_TOKEN }} + GITHUB_REPO: ${{ github.repository }} + run: ./gradlew publish -Pversion=${{ steps.version.outputs.version }} diff --git a/.github/workflows/publish-jvm.yml b/.github/workflows/publish-jvm.yml new file mode 100644 index 000000000..34624e5b4 --- /dev/null +++ b/.github/workflows/publish-jvm.yml @@ -0,0 +1,52 @@ +name: JVM Publish + +on: + release: + types: [published] + workflow_dispatch: + inputs: + version: + description: "Version to publish (e.g., v0.1.0)" + required: true + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + server-id: github + settings-path: ${{ github.workspace }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Extract version from input or tag + id: version + shell: bash + run: | + VERSION="${{ inputs.version }}" + if [[ -z "$VERSION" ]]; then + VERSION="$GITHUB_REF_NAME" + fi + echo "version=${VERSION#v}" >> $GITHUB_OUTPUT + + - name: Build with Gradle + working-directory: bindings/kotlin/ldk-node-jvm + run: ./gradlew build -x test -Pversion=${{ steps.version.outputs.version }} + + - name: Publish to GitHub Packages + working-directory: bindings/kotlin/ldk-node-jvm + env: + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.ORG_PACKAGES_TOKEN }} + GITHUB_REPO: ${{ github.repository }} + run: ./gradlew publish -Pversion=${{ steps.version.outputs.version }} diff --git a/.gitignore b/.gitignore index dfe51a623..eafe12832 100644 --- a/.gitignore +++ b/.gitignore @@ -23,16 +23,6 @@ swift.swiftdoc # Ignore LDKNodeFFI.xcframework files /bindings/swift/LDKNodeFFI.xcframework -/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs -/bindings/kotlin/ldk-node-android/lib/src/main/kotlin/org/lightningdevkit/ldknode/ldk_node.kt -/bindings/kotlin/ldk-node-jvm/lib/src/main/kotlin/org/lightningdevkit/ldknode/ldk_node.kt -/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/ - -# fork -!/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs -!/bindings/kotlin/ldk-node-android/lib/src/main/kotlin/org/lightningdevkit/ldknode/ldk_node.kt -!/bindings/kotlin/ldk-node-jvm/lib/src/main/kotlin/org/lightningdevkit/ldknode/ldk_node.kt -!/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/ # IDE and local files .idea diff --git a/AGENTS.md b/AGENTS.md index 52aafcc52..6565785ea 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -207,8 +207,8 @@ RUSTFLAGS="--cfg no_download" cargo build && ./scripts/uniffi_bindgen_generate.s ## Version Bumping Checklist When bumping the version, ALWAYS update ALL of these files: 1. `Cargo.toml` - main crate version -2. `bindings/kotlin/ldk-node-android/gradle.properties` - Android libraryVersion -3. `bindings/kotlin/ldk-node-jvm/gradle.properties` - JVM libraryVersion +2. `bindings/kotlin/ldk-node-android/gradle.properties` - Android version +3. `bindings/kotlin/ldk-node-jvm/gradle.properties` - JVM version 4. `bindings/python/pyproject.toml` - Python version 5. `Package.swift` - Swift tag (and checksum after building) 6. `CHANGELOG.md` - Add release notes section at top diff --git a/bindings/README.md b/bindings/README.md index 28d580bf2..a0d18a036 100644 --- a/bindings/README.md +++ b/bindings/README.md @@ -11,7 +11,7 @@ RUSTFLAGS="--cfg no_download" cargo build && ./scripts/uniffi_bindgen_generate.s Detailed instructions for publishing a new version of the bindings. 1. Update `Cargo.toml` -2. Update `libraryVersion` in: +2. Update `version` in: - `bindings/kotlin/ldk-node-android/gradle.properties` - `bindings/kotlin/ldk-node-jvm/gradle.properties` 3. Run the above command to build all bindings diff --git a/bindings/kotlin/ldk-node-android/README.md b/bindings/kotlin/ldk-node-android/README.md index 1787da017..68f1b2955 100644 --- a/bindings/kotlin/ldk-node-android/README.md +++ b/bindings/kotlin/ldk-node-android/README.md @@ -4,36 +4,32 @@ Publishing new version guide. 1. Run in root dir `sh scripts/uniffi_bindgen_generate_kotlin_android.sh` -1. Update `libraryVersion` in `bindings/kotlin/ldk-node-android/gradle.properties`. +1. Update `version` in `bindings/kotlin/ldk-node-android/gradle.properties`. 1. Commit 1. Push new branch (or new tag) -1. Go to [Jitpack repo url](https://jitpack.io/#synonymdev/ldk-node), - choose the build type by tab (ie. releases, branch, etc.), and tap 'Get it' - for the required version. - - - If a build already exists, tap the file icon under 'Log' to check the status. - 1. In the android project: - - in `settings.gradle.kts` add jitpack repository using `maven("https://jitpack.io")`: + - in `settings.gradle.kts` add GitHub Packages repository: ```kt dependencyResolutionManagement { repositories { google() mavenCentral() - maven("https://jitpack.io") + maven { + url = uri("https://maven.pkg.github.com/synonymdev/ldk-node") + credentials { + username = providers.gradleProperty("gpr.user").orNull ?: System.getenv("GITHUB_ACTOR") + password = providers.gradleProperty("gpr.key").orNull ?: System.getenv("GITHUB_TOKEN") + } + } } ``` - add dependency in `libs.versions.toml`: ```toml - # by tag - ldk-node-android = { module = "com.github.synonymdev:ldk-node", version = "v0.6.0-rc.4" - - # or by branch - ldk-node-android = { module = "com.github.synonymdev:ldk-node", version = "main-SNAPSHOT" + ldk-node-android = { module = "com.synonym:ldk-node-android", version = "0.7.0-rc.26" } ``` - Run `Sync project with gradle files` action in android studio diff --git a/bindings/kotlin/ldk-node-android/build.gradle.kts b/bindings/kotlin/ldk-node-android/build.gradle.kts index 5520553e3..76bf5e6d3 100644 --- a/bindings/kotlin/ldk-node-android/build.gradle.kts +++ b/bindings/kotlin/ldk-node-android/build.gradle.kts @@ -13,8 +13,4 @@ plugins { kotlin("plugin.serialization") version "2.2.0" apply false } -// library version is defined in gradle.properties -val libraryVersion: String by project - -group = "org.lightningdevkit" -version = libraryVersion +// group and version are defined in gradle.properties diff --git a/bindings/kotlin/ldk-node-android/gradle.properties b/bindings/kotlin/ldk-node-android/gradle.properties index c7596b3d8..f1ac84414 100644 --- a/bindings/kotlin/ldk-node-android/gradle.properties +++ b/bindings/kotlin/ldk-node-android/gradle.properties @@ -2,4 +2,5 @@ org.gradle.jvmargs=-Xmx1536m android.useAndroidX=true android.enableJetifier=true kotlin.code.style=official -libraryVersion=0.7.0-rc.25 +group=com.synonym +version=0.7.0-rc.25 diff --git a/bindings/kotlin/ldk-node-android/lib/build.gradle.kts b/bindings/kotlin/ldk-node-android/lib/build.gradle.kts index d55a4aa4d..71fe96176 100644 --- a/bindings/kotlin/ldk-node-android/lib/build.gradle.kts +++ b/bindings/kotlin/ldk-node-android/lib/build.gradle.kts @@ -1,6 +1,3 @@ -// library version is defined in gradle.properties -val libraryVersion: String by project - plugins { id("com.android.library") kotlin("android") @@ -65,39 +62,42 @@ afterEvaluate { publishing { publications { create("maven") { - groupId = "org.lightningdevkit" - artifactId = "ldk-node-android" - version = libraryVersion + val mavenArtifactId = "ldk-node-android" + groupId = providers.gradleProperty("group").orNull ?: "com.synonym" + artifactId = mavenArtifactId + version = providers.gradleProperty("version").orNull ?: "0.0.0" from(components["release"]) pom { - name.set("ldk-node-android") - description.set( - "LDK Node, a ready-to-go Lightning node library built using LDK and BDK." - ) - url.set("https://lightningdevkit.org") + name.set(mavenArtifactId) + description.set("LDK Node Android bindings (Synonym fork).") + url.set("https://github.com/synonymdev/ldk-node") licenses { - license { - name.set("APACHE 2.0") - url.set("https://github.com/lightningdevkit/ldk-node/blob/main/LICENSE-APACHE") - } license { name.set("MIT") - url.set("https://github.com/lightningdevkit/ldk-node/blob/main/LICENSE-MIT") + url.set("https://github.com/synonymdev/ldk-node/blob/main/LICENSE-MIT") } } developers { developer { - id.set("tnull") - name.set("Elias Rohrer") - email.set("dev@tnull.de") + id.set("synonymdev") + name.set("Synonym") + email.set("noreply@synonym.to") } } - scm { - connection.set("scm:git:github.com/lightningdevkit/ldk-node.git") - developerConnection.set("scm:git:ssh://github.com/lightningdevkit/ldk-node.git") - url.set("https://github.com/lightningdevkit/ldk-node/tree/main") - } + } + } + } + repositories { + maven { + val repo = System.getenv("GITHUB_REPO") + ?: providers.gradleProperty("gpr.repo").orNull + ?: "synonymdev/ldk-node" + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/$repo") + credentials { + username = System.getenv("GITHUB_ACTOR") ?: providers.gradleProperty("gpr.user").orNull + password = System.getenv("GITHUB_TOKEN") ?: providers.gradleProperty("gpr.key").orNull } } } diff --git a/bindings/kotlin/ldk-node-jvm/build.gradle.kts b/bindings/kotlin/ldk-node-jvm/build.gradle.kts index faf316ef0..b4bff75c2 100644 --- a/bindings/kotlin/ldk-node-jvm/build.gradle.kts +++ b/bindings/kotlin/ldk-node-jvm/build.gradle.kts @@ -10,8 +10,4 @@ buildscript { plugins { } -// library version is defined in gradle.properties -val libraryVersion: String by project - -group = "org.lightningdevkit" -version = libraryVersion +// version is defined in gradle.properties diff --git a/bindings/kotlin/ldk-node-jvm/gradle.properties b/bindings/kotlin/ldk-node-jvm/gradle.properties index 3169dc7fd..375e9a606 100644 --- a/bindings/kotlin/ldk-node-jvm/gradle.properties +++ b/bindings/kotlin/ldk-node-jvm/gradle.properties @@ -1,3 +1,3 @@ org.gradle.jvmargs=-Xmx1536m kotlin.code.style=official -libraryVersion=0.7.0-rc.25 +version=0.7.0-rc.25 diff --git a/bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts b/bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts index 2ad609c3d..2f4f51994 100644 --- a/bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts +++ b/bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts @@ -17,11 +17,8 @@ plugins { id("org.jlleitschuh.gradle.ktlint") version "11.6.1" } -// library version is defined in gradle.properties -val libraryVersion: String by project - group = "org.lightningdevkit" -version = libraryVersion +// version is read from gradle.properties automatically repositories { // Use Maven Central for resolving dependencies. @@ -94,39 +91,39 @@ afterEvaluate { create("maven") { groupId = "org.lightningdevkit" artifactId = "ldk-node-jvm" - version = libraryVersion + version = providers.gradleProperty("version").orNull ?: "0.0.0" from(components["java"]) pom { name.set("ldk-node-jvm") - description.set( - "LDK Node, a ready-to-go Lightning node library built using LDK and BDK." - ) - url.set("https://lightningdevkit.org") + description.set("LDK Node JVM bindings (Synonym fork).") + url.set("https://github.com/synonymdev/ldk-node") licenses { - license { - name.set("APACHE 2.0") - url.set("https://github.com/lightningdevkit/ldk-node/blob/main/LICENSE-APACHE") - } license { name.set("MIT") - url.set("https://github.com/lightningdevkit/ldk-node/blob/main/LICENSE-MIT") + url.set("https://github.com/synonymdev/ldk-node/blob/main/LICENSE-MIT") } } developers { - developers { - developer { - id.set("tnull") - name.set("Elias Rohrer") - email.set("dev@tnull.de") - } + developer { + id.set("synonymdev") + name.set("Synonym") + email.set("noreply@synonym.to") } } - scm { - connection.set("scm:git:github.com/lightningdevkit/ldk-node.git") - developerConnection.set("scm:git:ssh://github.com/lightningdevkit/ldk-node.git") - url.set("https://github.com/lightningdevkit/ldk-node/tree/main") - } + } + } + } + repositories { + maven { + val repo = System.getenv("GITHUB_REPO") + ?: providers.gradleProperty("gpr.repo").orNull + ?: "synonymdev/ldk-node" + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/$repo") + credentials { + username = System.getenv("GITHUB_ACTOR") ?: providers.gradleProperty("gpr.user").orNull + password = System.getenv("GITHUB_TOKEN") ?: providers.gradleProperty("gpr.key").orNull } } } diff --git a/jitpack.yml b/jitpack.yml deleted file mode 100644 index be1c0b44e..000000000 --- a/jitpack.yml +++ /dev/null @@ -1,4 +0,0 @@ -jdk: openjdk17 -install: - - bindings/kotlin/ldk-node-android/gradlew -p bindings/kotlin/ldk-node-android publishToMavenLocal - - bindings/kotlin/ldk-node-jvm/gradlew -p bindings/kotlin/ldk-node-jvm publishToMavenLocal diff --git a/scripts/uniffi_bindgen_generate_kotlin.sh b/scripts/uniffi_bindgen_generate_kotlin.sh index 2777a74f6..6ac4f1b04 100755 --- a/scripts/uniffi_bindgen_generate_kotlin.sh +++ b/scripts/uniffi_bindgen_generate_kotlin.sh @@ -54,7 +54,7 @@ fi # Sync version from Cargo.toml echo "Syncing version from Cargo.toml..." CARGO_VERSION=$(grep '^version = ' Cargo.toml | sed 's/version = "\(.*\)"/\1/' | head -1) -sed -i.bak "s/^libraryVersion=.*/libraryVersion=$CARGO_VERSION/" "$JVM_LIB_DIR/gradle.properties" +sed -i.bak "s/^version=.*/version=$CARGO_VERSION/" "$JVM_LIB_DIR/gradle.properties" rm -f "$JVM_LIB_DIR/gradle.properties.bak" echo "JVM version synced: $CARGO_VERSION" @@ -62,4 +62,8 @@ echo "JVM version synced: $CARGO_VERSION" echo "Testing JVM library build..." $JVM_LIB_DIR/gradlew --project-dir "$JVM_LIB_DIR" clean build -x test || exit 1 +# Verify JVM library publish task graph +echo "Verifying JVM library publish task graph..." +$JVM_LIB_DIR/gradlew --project-dir "$JVM_LIB_DIR" clean publish --dry-run || exit 1 + echo "JVM build process completed successfully!" diff --git a/scripts/uniffi_bindgen_generate_kotlin_android.sh b/scripts/uniffi_bindgen_generate_kotlin_android.sh index 3c153efe6..c6a68e9bb 100755 --- a/scripts/uniffi_bindgen_generate_kotlin_android.sh +++ b/scripts/uniffi_bindgen_generate_kotlin_android.sh @@ -74,12 +74,12 @@ rm -f "$KOTLIN_BINDINGS_FILE.bak" # Sync version from Cargo.toml echo "Syncing version from Cargo.toml..." CARGO_VERSION=$(grep '^version = ' Cargo.toml | sed 's/version = "\(.*\)"/\1/' | head -1) -sed -i.bak "s/^libraryVersion=.*/libraryVersion=$CARGO_VERSION/" "$ANDROID_LIB_DIR/gradle.properties" +sed -i.bak "s/^version=.*/version=$CARGO_VERSION/" "$ANDROID_LIB_DIR/gradle.properties" rm -f "$ANDROID_LIB_DIR/gradle.properties.bak" echo "Version synced: $CARGO_VERSION" -# Verify android library publish -echo "Testing android library publish to Maven Local..." -$ANDROID_LIB_DIR/gradlew --project-dir "$ANDROID_LIB_DIR" clean publishToMavenLocal +# Verify android library publish task graph +echo "Verifying android library publish task graph..." +$ANDROID_LIB_DIR/gradlew --project-dir "$ANDROID_LIB_DIR" clean publish --dry-run echo "Android build process completed successfully!" From 6a45f08faad09720c25ab2c157cdebb29723a60a Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Mon, 23 Feb 2026 11:51:51 +0100 Subject: [PATCH 2/2] fix: use com.synonym groupId for JVM publishing The JVM groupId was still hardcoded to org.lightningdevkit while Android correctly used com.synonym. This aligns both by reading group from gradle.properties, matching the Android pattern. Co-Authored-By: Claude Opus 4.6 --- bindings/kotlin/ldk-node-jvm/build.gradle.kts | 2 +- bindings/kotlin/ldk-node-jvm/gradle.properties | 1 + bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts | 5 ++--- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bindings/kotlin/ldk-node-jvm/build.gradle.kts b/bindings/kotlin/ldk-node-jvm/build.gradle.kts index b4bff75c2..aa82ba6fb 100644 --- a/bindings/kotlin/ldk-node-jvm/build.gradle.kts +++ b/bindings/kotlin/ldk-node-jvm/build.gradle.kts @@ -10,4 +10,4 @@ buildscript { plugins { } -// version is defined in gradle.properties +// group and version are defined in gradle.properties diff --git a/bindings/kotlin/ldk-node-jvm/gradle.properties b/bindings/kotlin/ldk-node-jvm/gradle.properties index 375e9a606..cc08292e6 100644 --- a/bindings/kotlin/ldk-node-jvm/gradle.properties +++ b/bindings/kotlin/ldk-node-jvm/gradle.properties @@ -1,3 +1,4 @@ org.gradle.jvmargs=-Xmx1536m kotlin.code.style=official +group=com.synonym version=0.7.0-rc.25 diff --git a/bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts b/bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts index 2f4f51994..79f13475e 100644 --- a/bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts +++ b/bindings/kotlin/ldk-node-jvm/lib/build.gradle.kts @@ -17,8 +17,7 @@ plugins { id("org.jlleitschuh.gradle.ktlint") version "11.6.1" } -group = "org.lightningdevkit" -// version is read from gradle.properties automatically +// group and version are read from gradle.properties automatically repositories { // Use Maven Central for resolving dependencies. @@ -89,7 +88,7 @@ afterEvaluate { publishing { publications { create("maven") { - groupId = "org.lightningdevkit" + groupId = providers.gradleProperty("group").orNull ?: "com.synonym" artifactId = "ldk-node-jvm" version = providers.gradleProperty("version").orNull ?: "0.0.0"