diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a6a7d947..96b278e0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,6 +55,31 @@ jobs: run: gradle test working-directory: ./java + - name: Publish Java release + run: gradle publish + working-directory: ./java + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # Release fs-storage NDK binaries + - name: Install cargo-ndk + run: cargo install cargo-ndk + + - name: Add Rust Toolchain + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + targets: aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android + + - name: Build fs-storage + run: cargo ndk -o ./target/release/fs-storage/jniLibs --target aarch64-linux-android --target armv7-linux-androideabi --target i686-linux-android --target x86_64-linux-android build -p fs-storage --release + + - name: Upload fs-storage + uses: actions/upload-artifact@v4 + with: + name: fs-storage + path: ./target/release/fs-storage/jniLibs + windows: name: Test on Windows runs-on: windows-latest diff --git a/java/lib/build.gradle.kts b/java/lib/build.gradle.kts index 96541a60..e345b32b 100644 --- a/java/lib/build.gradle.kts +++ b/java/lib/build.gradle.kts @@ -1,24 +1,20 @@ plugins { - // Apply the java-library plugin for API and implementation separation. - `java-library` + `maven-publish` // Apply the maven-publish plugin before java-library for publishing to GitHub Packages. + `java-library` // Apply the java-library plugin for API and implementation separation. } +group = "dev.arkbuilders" +version = "1.0-SNAPSHOT" + repositories { - // Use Maven Central for resolving dependencies. - mavenCentral() + mavenCentral() // Use Maven Central for resolving dependencies. } dependencies { - // Use JUnit Jupiter for testing. - testImplementation(libs.junit.jupiter) - + testImplementation(libs.junit.jupiter) // Use JUnit Jupiter for testing. testRuntimeOnly("org.junit.platform:junit-platform-launcher") - - // This dependency is exported to consumers, that is to say found on their compile classpath. - api(libs.commons.math3) - - // This dependency is used internally, and not exposed to consumers on their own compile classpath. - implementation(libs.guava) + api(libs.commons.math3) // This dependency is exported to consumers, that is to say found on their compile classpath. + implementation(libs.guava) // This dependency is used internally, and not exposed to consumers on their own compile classpath. } // Apply a specific Java toolchain to ease working on different environments. @@ -29,10 +25,8 @@ java { } tasks.named("test") { - // Use JUnit Platform for unit tests. - useJUnitPlatform() - // Set the JVM argument for the java.library.path (To import rust compiled library) - val rustLibPath = projectDir.resolve("../../target/release").absolutePath + val rustLibPath = projectDir.resolve("../../target/release").absolutePath // Set the JVM argument for the java.library.path (To import rust compiled library) + useJUnitPlatform() // Use JUnit Platform for unit tests. jvmArgs = listOf("-Djava.library.path=$rustLibPath") } @@ -40,3 +34,22 @@ tasks.named("javadoc") { options.encoding = "UTF-8" options.memberLevel = JavadocMemberLevel.PUBLIC } + +publishing { + // Define a Maven publication for the 'maven' repository + publications { + create("Maven") { + from(components["java"]) + } + } + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/ARK-Builders/ark-core") + credentials { + username = System.getenv("GITHUB_ACTOR") + password = System.getenv("GITHUB_TOKEN") + } + } + } +}