diff --git a/.github/workflows/build-main.yml b/.github/workflows/build-main.yml index 15e4410..fc3871b 100644 --- a/.github/workflows/build-main.yml +++ b/.github/workflows/build-main.yml @@ -1,5 +1,6 @@ name: Build Main - +permissions: + contents: read on: push: branches: @@ -7,9 +8,13 @@ on: jobs: build: + strategy: + matrix: + tc: [ 8, 17, 21, 25 ] runs-on: ubuntu-latest env: BUILD_EVENT: ${{ github.event_name }} + TARGET_COMPATIBILITY: ${{ matrix.tc }} OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.OSSRH_TOKEN }} SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} @@ -19,12 +24,12 @@ jobs: - name: Setup JDK uses: actions/setup-java@v5 with: - java-version: '21' + java-version: 25 distribution: 'temurin' - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 + uses: gradle/actions/setup-gradle@v5 with: - gradle-version: '8.14' # Quotes required to prevent YAML converting to number + gradle-version: current - name: Setup GO uses: actions/setup-go@v5 with: @@ -48,8 +53,21 @@ jobs: uses: coverallsapp/github-action@v2 with: github-token: ${{ secrets.COVERALLS_REPO_TOKEN }} + parallel: true + flag-name: tc${{ matrix.tc }} - name: Publish Snapshot run: ./gradlew -i publishToSonatype - name: Clean up if: always() run: pkill -9 nats-server 2>/dev/null || true + + coveralls-finish: + needs: build + runs-on: ubuntu-latest + steps: + - name: Coveralls Finish + uses: coverallsapp/github-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel-finished: true + carryforward: "tc8" \ No newline at end of file diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 0d09dca..f47894e 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -1,25 +1,30 @@ name: Build Pull Request - +permissions: + contents: read on: pull_request: types: [opened, synchronize, edited, reopened] jobs: build: + strategy: + matrix: + tc: [ 8, 17, 21, 25 ] runs-on: ubuntu-latest env: BUILD_EVENT: ${{ github.event_name }} + TARGET_COMPATIBILITY: ${{ matrix.tc }} COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} steps: - name: Setup JDK uses: actions/setup-java@v5 with: - java-version: '21' + java-version: 25 distribution: 'temurin' - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 + uses: gradle/actions/setup-gradle@v5 with: - gradle-version: '8.14' # Quotes required to prevent YAML converting to number + gradle-version: current - name: Setup GO uses: actions/setup-go@v5 with: @@ -43,6 +48,19 @@ jobs: uses: coverallsapp/github-action@v2 with: github-token: ${{ secrets.COVERALLS_REPO_TOKEN }} + parallel: true + flag-name: tc${{ matrix.tc }} - name: Clean up if: always() run: pkill -9 nats-server 2>/dev/null || true + + coveralls-finish: + needs: build + runs-on: ubuntu-latest + steps: + - name: Coveralls Finish + uses: coverallsapp/github-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel-finished: true + carryforward: "tc8" \ No newline at end of file diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index d819efe..3e77e5d 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -1,5 +1,6 @@ name: Build Release - +permissions: + contents: read on: release: branches: @@ -8,9 +9,13 @@ on: jobs: build: + strategy: + matrix: + tc: [ 8, 17, 21, 25 ] runs-on: ubuntu-latest env: BUILD_EVENT: ${{ github.event_name }} + TARGET_COMPATIBILITY: ${{ matrix.tc }} OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.OSSRH_TOKEN }} SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} @@ -20,12 +25,12 @@ jobs: - name: Setup JDK uses: actions/setup-java@v5 with: - java-version: '21' + java-version: 25 distribution: 'temurin' - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 + uses: gradle/actions/setup-gradle@v5 with: - gradle-version: '8.14' # Quotes required to prevent YAML converting to number + gradle-version: current - name: Setup GO uses: actions/setup-go@v5 with: @@ -41,10 +46,10 @@ jobs: nats-server -v - name: Check out code uses: actions/checkout@v4 - - name: Build and Test - run: chmod +x gradlew && ./gradlew clean test - - name: Verify, Sign and Publish Release - run: ./gradlew -i publishToSonatype closeAndReleaseSonatypeStagingRepository + - name: Prepare Gradle Script + run: chmod +x gradlew && ./gradlew + - name: Build, Sign and Publish Release + run: ./gradlew clean compileJava publishToSonatype closeAndReleaseSonatypeStagingRepository - name: Clean up if: always() run: pkill -9 nats-server 2>/dev/null || true diff --git a/README.md b/README.md index cd33779..960a5b4 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,26 @@ Run the [NATS messaging system](https://nats.io) Server from your Java code. -**Current Release**: 3.0.1   **Current Snapshot**: 3.0.2-SNAPSHOT -[![License Apache 2](https://img.shields.io/badge/License-Apache2-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.nats/jnats-server-runner/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.nats/jnats-server-runner) -[![Javadoc](http://javadoc.io/badge/io.nats/jnats-server-runner.svg?branch=main)](http://javadoc.io/doc/io.nats/jnats-server-runner?branch=main) -[![Coverage Status](https://coveralls.io/repos/github/nats-io/java-nats-server-runner/badge.svg?branch=main)](https://coveralls.io/github/nats-io/java-nats-server-runner?branch=main) +![3.0.2](https://img.shields.io/badge/Current_Release-3.0.2-27AAE0?style=for-the-badge) +![3.0.3](https://img.shields.io/badge/Current_Snapshot-3.0.3--SNAPSHOT-27AAE0?style=for-the-badge) + [![Build Main Badge](https://github.com/nats-io/java-nats-server-runner/actions/workflows/build-main.yml/badge.svg?event=push)](https://github.com/nats-io/java-nats-server-runner/actions/workflows/build-main.yml) -[![Release Badge](https://github.com/nats-io/java-nats-server-runner/actions/workflows/build-release.yml/badge.svg?event=release)](https://github.com/nats-io/java-nats-server-runner/actions/workflows/build-release.yml) +[![Coverage Status](https://coveralls.io/repos/github/nats-io/java-nats-server-runner/badge.svg?branch=main)](https://coveralls.io/github/nats-io/java-nats-server-runner?branch=main) +[![Javadoc](http://javadoc.io/badge/io.nats/jnats-server-runner.svg?branch=main)](http://javadoc.io/doc/io.nats/jnats-server-runner?branch=main) +[![License Apache 2](https://img.shields.io/badge/License-Apache2-blue)](https://www.apache.org/licenses/LICENSE-2.0) + +### JDK Version + +This project uses Java 8 Language Level api, but builds jars compiled with and targeted for Java 8, 17, 21 and 25. +It creates different artifacts for each. All have the same group id `io.nats` and the same version but have different artifact names. + +| Java Target Level | Artifact Id | Maven Central | +|:-----------------:|-----------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| 1.8 | `jnats-server-runner` | [![Maven JDK 1_8](https://img.shields.io/maven-central/v/io.nats/jnats-server-runner?label=)](https://mvnrepository.com/artifact/io.nats/jnats-server-runner) | +| 17 | `jnats-server-runner-jdk17` | [![Maven JDK 17](https://img.shields.io/maven-central/v/io.nats/jnats-server-runner-jdk17?label=)](https://mvnrepository.com/artifact/io.nats/jnats-server-runner-jdk17) | +| 21 | `jnats-server-runner-jdk21` | [![Maven JDK 21](https://img.shields.io/maven-central/v/io.nats/jnats-server-runner-jdk21?label=)](https://mvnrepository.com/artifact/io.nats/jnats-server-runner-jdk21) | +| 25 | `jnats-server-runner-jdk25` | [![Maven JDK 25](https://img.shields.io/maven-central/v/io.nats/jnats-server-runner-jdk25?label=)](https://mvnrepository.com/artifact/io.nats/jnats-server-runner-jdk25) | Useful for running unit or integration tests on the localhost. @@ -78,6 +90,90 @@ static { } ``` +### Dependency Management + +The JNATS Server Runner is available in the Maven central repository, +and can be imported as a standard dependency in your `build.gradle` or `pom.xml` file, +The examples shown use the Jdk 8 version. To use other versions, change the artifact id. + +#### Gradle + +```groovy +dependencies { + implementation 'io.nats:jnats-server-runner:3.0.3' +} +``` + +If you need the latest and greatest before Maven central updates, you can use: + +```groovy +repositories { + mavenCentral() + maven { + url "https://repo1.maven.org/maven2/" + } +} +``` + +If you need a snapshot version, you must add the url for the snapshots and change your dependency. + +```groovy +repositories { + mavenCentral() + maven { + url "https://central.sonatype.com/repository/maven-snapshots" + } +} + +dependencies { + implementation 'io.nats:jnats-server-runner:3.0.4-SNAPSHOT' +} +``` + +#### Maven + +```xml + + io.nats + jnats-server-runner + 3.0.3 + +``` + +If you need the absolute latest, before it propagates to maven central, you can use the repository: + +```xml + + + sonatype releases + https://repo1.maven.org/maven2/ + + true + + + +``` + +If you need a snapshot version, you must enable snapshots and change your dependency. + +```xml + + + sonatype snapshots + https://central.sonatype.com/repository/maven-snapshots + + true + + + + + + io.nats + jnats-server-runner + 3.0.4-SNAPSHOT + +``` + ## License Unless otherwise noted, the NATS source files are distributed diff --git a/build.gradle b/build.gradle index ee823bf..6b2bf95 100644 --- a/build.gradle +++ b/build.gradle @@ -5,30 +5,33 @@ plugins { id("java-library") id("maven-publish") id("jacoco") - id("biz.aQute.bnd.builder") version "7.1.0" + id("biz.aQute.bnd.builder") version "7.2.1" id("org.gradle.test-retry") version "1.6.4" id("io.github.gradle-nexus.publish-plugin") version "2.0.0" id("signing") } -def jarVersion = "3.0.2" +def jarVersion = "3.0.3" group = 'io.nats' def isRelease = System.getenv("BUILD_EVENT") == "release" def tc = System.getenv("TARGET_COMPATIBILITY"); -def targetCompat = tc == "21" ? JavaVersion.VERSION_21 : (tc == "17" ? JavaVersion.VERSION_17 : JavaVersion.VERSION_1_8) -def jarEnd = tc == "21" ? "-jdk21" : (tc == "17" ? "-jdk17" : "") -def jarAndArtifactName = "jnats-server-runner" + jarEnd +def targetJavaVersion = tc == null ? JavaVersion.VERSION_1_8 : JavaVersion.toVersion(tc) +def targetId = targetJavaVersion.toString() +def artifact = "jnats-server-runner" + (targetJavaVersion == JavaVersion.VERSION_1_8 ? "" : "-jdk" + targetId) +def bundleName = "io.nats.jnats.server.runner" + (targetJavaVersion == JavaVersion.VERSION_1_8 ? "" : ".jdk" + targetId) -version = isRelease ? jarVersion : jarVersion + "-SNAPSHOT" // version is the variable the build actually uses. +System.out.println("target compatibility: Java " + targetJavaVersion) +System.out.println("artifact id : " + artifact) +System.out.println("bundle name : " + bundleName) -System.out.println("Java: " + System.getProperty("java.version")) -System.out.println("Target Compatibility: " + targetCompat) -System.out.println(group + ":" + jarAndArtifactName + ":" + version) +version = isRelease ? jarVersion : jarVersion + "-SNAPSHOT" // version is the variable the build actually uses. java { sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = targetCompat + targetCompatibility = targetJavaVersion + withSourcesJar() + withJavadocJar() } repositories { @@ -54,9 +57,9 @@ jar { bundle { bnd("Bundle-Name": "io.nats.jnats.server.runner", "Bundle-Vendor": "nats.io", - "Bundle-Description": "NATS.IO Java Server Runner", + "Bundle-Description": "Java NATS Server Runner", "Bundle-DocURL": "https://github.com/nats-io/java-nats-server-runner", - "Target-Compatibility": "Java " + targetCompat + "Target-Compatibility": "Java " + targetJavaVersion ) } } @@ -80,26 +83,12 @@ javadoc { failOnError = false options.overview = 'src/main/javadoc/overview.html' // relative to source root source = sourceSets.main.allJava - title = "NATS.IO Java Server Runner" + title = "Java NATS Server Runner" classpath = sourceSets.main.runtimeClasspath } -tasks.register('javadocJar', Jar) { - archiveClassifier.set('javadoc') - from javadoc -} - -tasks.register('sourcesJar', Jar) { - archiveClassifier.set('sources') - from sourceSets.main.allSource -} - -artifacts { - archives javadocJar, sourcesJar -} - jacoco { - toolVersion = "0.8.12" + toolVersion = "0.8.13" } jacocoTestReport { @@ -124,21 +113,21 @@ publishing { publications { mavenJava(MavenPublication) { from components.java - artifact sourcesJar - artifact javadocJar pom { - name = jarAndArtifactName - packaging = "jar" - groupId = group - artifactId = jarAndArtifactName - description = "Java NATS.io Server Runner" + name = "Java NATS Server Runner" + description = "Java NATS Server Runner" url = 'https://github.com/nats-io/java-nats-server-runner' + + groupId = group + artifactId = artifact + licenses { license { name = 'The Apache License, Version 2.0' url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } + developers { developer { id = "synadia" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml deleted file mode 100644 index 2cfe86a..0000000 --- a/gradle/libs.versions.toml +++ /dev/null @@ -1,12 +0,0 @@ -# This file was generated by the Gradle 'init' task. -# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format - -[versions] -commons-math3 = "3.6.1" -guava = "33.4.5-jre" -junit-jupiter = "5.12.1" - -[libraries] -commons-math3 = { module = "org.apache.commons:commons-math3", version.ref = "commons-math3" } -guava = { module = "com.google.guava:guava", version.ref = "guava" } -junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55..f8e1ee3 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ca025c8..23449a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 23d15a9..adff685 100644 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index db3a6ac..c4bdd3a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell