diff --git a/.github/workflows/aot-test.yml b/.github/workflows/aot-test.yml index 1a870f9..370ece7 100644 --- a/.github/workflows/aot-test.yml +++ b/.github/workflows/aot-test.yml @@ -35,51 +35,54 @@ jobs: run: | set -euo pipefail + # sbt 2 nests build outputs under target/out//// + mv target/out/jvm/scala-*/jelly-cli/graalvm-native-image/jelly-cli jelly-cli + # See if it runs at all - target/graalvm-native-image/jelly-cli version || exit 1 + ./jelly-cli version || exit 1 # Make sure reflection is supported - target/graalvm-native-image/jelly-cli version | grep "JVM reflection: supported" \ + ./jelly-cli version | grep "JVM reflection: supported" \ || exit 1 # Make sure large RDF/XML file parsing is supported - target/graalvm-native-image/jelly-cli version | grep "Large RDF/XML file parsing: supported" \ + ./jelly-cli version | grep "Large RDF/XML file parsing: supported" \ || exit 1 # Test RDF conversions echo '_:b _:b .' > in.nt - target/graalvm-native-image/jelly-cli \ + ./jelly-cli \ rdf to-jelly --in-format=nt in.nt > out.jelly && \ [ -s out.jelly ] || exit 1 - target/graalvm-native-image/jelly-cli \ + ./jelly-cli \ rdf from-jelly --out-format=jelly-text out.jelly > out.txt && \ [ -s out.txt ] || exit 1 # From jelly-text - target/graalvm-native-image/jelly-cli \ + ./jelly-cli \ rdf to-jelly --in-format=jelly-text out.txt > out2.jelly && \ [ -s out2.jelly ] || exit 1 - target/graalvm-native-image/jelly-cli \ + ./jelly-cli \ rdf from-jelly --out-format=jsonld out.jelly > out.json && \ [ -s out.json ] || exit 1 echo '{"@graph":[{"@id":"http://e.org/r","http://e.org/p":{"@value":"v"}}]}' | \ - target/graalvm-native-image/jelly-cli rdf to-jelly --in-format "jsonld" > jsonld.jelly && \ + ./jelly-cli rdf to-jelly --in-format "jsonld" > jsonld.jelly && \ [ -s jsonld.jelly ] || exit 1 echo '' | \ - target/graalvm-native-image/jelly-cli rdf to-jelly --in-format "rdfxml" > rdfxml.jelly && \ + ./jelly-cli rdf to-jelly --in-format "rdfxml" > rdfxml.jelly && \ [ -s rdfxml.jelly ] || exit 1 # Invalid RDF/XMl input test # Regression test for: https://github.com/Jelly-RDF/cli/issues/217 echo 'invalidxml' | \ - ( ! target/graalvm-native-image/jelly-cli rdf to-jelly --in-format "rdfxml" &> error.txt ) && \ + ( ! ./jelly-cli rdf to-jelly --in-format "rdfxml" &> error.txt ) && \ grep 'Content is not allowed in prolog' error.txt || exit 1 # Test rdf validate - target/graalvm-native-image/jelly-cli \ + ./jelly-cli \ rdf validate out.jelly --compare-to-rdf-file in.nt || exit 1 - name: Upload binary uses: actions/upload-artifact@v4 with: name: jelly-cli-${{ matrix.os }} - path: target/graalvm-native-image/* + path: jelly-cli diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7f78970..979aa4b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -31,7 +31,8 @@ jobs: uses: actions/upload-artifact@v4 with: name: jelly-cli-${{ matrix.os }} - path: target/graalvm-native-image/* + # sbt 2 nests build outputs under target/out//// + path: target/out/jvm/scala-*/jelly-cli/graalvm-native-image/* jit-compile: name: Build the uber-JAR @@ -53,7 +54,7 @@ jobs: shell: bash run: | sbt -v assembly - mv target/scala-*/jelly-cli-assembly*.jar jelly-cli.jar + mv target/out/jvm/scala-*/jelly-cli/jelly-cli-assembly*.jar jelly-cli.jar - name: Upload assembly uses: actions/upload-artifact@v4 diff --git a/.github/workflows/scala.yml b/.github/workflows/scala.yml index 8ea3554..6742803 100644 --- a/.github/workflows/scala.yml +++ b/.github/workflows/scala.yml @@ -40,7 +40,7 @@ jobs: - name: Build and test shell: bash - run: sbt -v +test test-serial:test + run: sbt -v +test TestSerial/test test-assembly: runs-on: ubuntu-latest @@ -61,7 +61,7 @@ jobs: shell: bash run: | sbt -v assembly - mv target/scala-*/jelly-cli-assembly*.jar jelly-cli.jar + mv target/out/jvm/scala-*/jelly-cli/jelly-cli-assembly*.jar jelly-cli.jar - name: Test the assembly run: | diff --git a/README.md b/README.md index 76245f3..7dd3370 100644 --- a/README.md +++ b/README.md @@ -176,12 +176,12 @@ The CI checks will not pass if this is not the case. - Ensure you have [GraalVM](https://www.graalvm.org/) installed and the `native-image` utility is available in your `PATH`. - Clone the repository. - Run `sbt GraalVMNativeImage/packageBin` -- The binary will be available at `./target/graalvm-native-image/jelly-cli`. +- The binary will be available at `./target/out/jvm/scala-3.*.*/jelly-cli/graalvm-native-image/jelly-cli`. #### Über-JAR build (just-in-time) - Run `sbt assembly` -- The resulting JAR will be in `./target/scala-3.*.*/jelly-cli-assembly-*.jar` +- The resulting JAR will be in `./target/out/jvm/scala-3.*.*/jelly-cli/jelly-cli-assembly-*.jar` - Run it like: `java -jar ` ---- diff --git a/build.sbt b/build.sbt index b4ecc86..e9f58db 100644 --- a/build.sbt +++ b/build.sbt @@ -2,6 +2,11 @@ ThisBuild / semanticdbEnabled := true lazy val scalaV = "3.8.4" ThisBuild / scalaVersion := scalaV +// sbt-native-packager (pulled in by GraalVMNativeImagePlugin) defines settings for the Debian, +// RPM, and Universal packaging formats, which we don't use. sbt 2 reports all of them as unused +// keys on every startup, so turn the lint off. +Global / lintUnusedKeysOnLoad := false + resolvers += "Sonatype OSS Snapshots" at "https://s01.oss.sonatype.org/content/repositories/snapshots" diff --git a/project/build.properties b/project/build.properties index 1a59c2e..fdcf9af 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version = 1.12.15 +sbt.version = 2.0.6 diff --git a/src/test/scala/eu/neverblink/jelly/cli/command/rdf/RdfToJellySpec.scala b/src/test/scala/eu/neverblink/jelly/cli/command/rdf/RdfToJellySpec.scala index 9ab1d72..4fceb53 100644 --- a/src/test/scala/eu/neverblink/jelly/cli/command/rdf/RdfToJellySpec.scala +++ b/src/test/scala/eu/neverblink/jelly/cli/command/rdf/RdfToJellySpec.scala @@ -102,7 +102,7 @@ class RdfToJellySpec extends AnyWordSpec with TestFixtureHelper with Matchers: } "input stream to output stream, generalized RDF (N-Triples)" in { - val inputStream = new FileInputStream(getClass.getResource("/generalized.nt").getPath) + val inputStream = getClass.getResourceAsStream("/generalized.nt") RdfToJelly.setStdIn(inputStream) val (out, err) = RdfToJelly.runTestCommand( List("rdf", "to-jelly", "--in-format=nt"), @@ -116,7 +116,7 @@ class RdfToJellySpec extends AnyWordSpec with TestFixtureHelper with Matchers: } "input stream to output stream, generalized RDF (N-Quads)" in { - val inputStream = new FileInputStream(getClass.getResource("/generalized.nq").getPath) + val inputStream = getClass.getResourceAsStream("/generalized.nq") RdfToJelly.setStdIn(inputStream) val (out, err) = RdfToJelly.runTestCommand( List("rdf", "to-jelly", "--in-format=nq"),