diff --git a/.github/workflows/coverage-ci.yml b/.github/workflows/coverage-ci.yml
new file mode 100644
index 0000000..98b57a6
--- /dev/null
+++ b/.github/workflows/coverage-ci.yml
@@ -0,0 +1,23 @@
+name: Coverage CI
+
+on:
+ push:
+ pull_request:
+
+jobs:
+ coverage:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-java@v4
+ with:
+ distribution: oracle
+ java-version: "25"
+ cache: maven
+
+ - name: Install test-data tools
+ run: sudo apt-get update && sudo apt-get install -y wget zstd
+
+ - name: Check coverage
+ run: mvn -pl estore clean test jacoco:report jacoco:check
diff --git a/.github/workflows/formatting-ci.yml b/.github/workflows/formatting-ci.yml
index b7c4b5e..b3cb5dd 100644
--- a/.github/workflows/formatting-ci.yml
+++ b/.github/workflows/formatting-ci.yml
@@ -12,7 +12,7 @@ jobs:
- uses: actions/setup-java@v4
with:
- distribution: temurin
+ distribution: oracle
java-version: "25"
cache: maven
diff --git a/.github/workflows/test-ci.yml b/.github/workflows/test-ci.yml
index 9e3e583..b8be1a8 100644
--- a/.github/workflows/test-ci.yml
+++ b/.github/workflows/test-ci.yml
@@ -12,12 +12,20 @@ jobs:
- uses: actions/setup-java@v4
with:
- distribution: temurin
- java-version: "8"
+ distribution: oracle
+ java-version: "25"
cache: maven
- name: Install test-data tools
run: sudo apt-get update && sudo apt-get install -y wget zstd
- name: Build and test estore
- run: mvn -pl estore clean test -Dmaven.compiler.release=8
+ run: mvn -pl estore clean test jacoco:report
+
+ - name: Upload JaCoCo report
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: jacoco-report
+ path: estore/target/site/jacoco/
+ if-no-files-found: ignore
diff --git a/Dockerfile b/Dockerfile
index 66ee760..1c9fdcc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,11 +1,24 @@
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
+ENV JAVA_HOME=/usr/java/jdk-25
+ENV PATH="${JAVA_HOME}/bin:${PATH}"
-# Java 8 first. Installing maven in the same apt command pulls OpenJDK 11.
+# Oracle JDK 25 first so apt maven does not become the default java.
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
- openjdk-8-jdk wget zstd netcat-openbsd \
+ ca-certificates wget zstd netcat-openbsd \
+ && ARCH="$(dpkg --print-architecture)" \
+ && case "$ARCH" in \
+ amd64) JDK_ARCH=x64 ;; \
+ arm64) JDK_ARCH=aarch64 ;; \
+ *) echo "unsupported arch: $ARCH" && exit 1 ;; \
+ esac \
+ && wget -q "https://download.oracle.com/java/25/latest/jdk-25_linux-${JDK_ARCH}_bin.tar.gz" -O /tmp/jdk.tgz \
+ && echo "$(wget -qO- "https://download.oracle.com/java/25/latest/jdk-25_linux-${JDK_ARCH}_bin.tar.gz.sha256") */tmp/jdk.tgz" | sha256sum -c \
+ && mkdir -p "$JAVA_HOME" \
+ && tar --extract --file /tmp/jdk.tgz --directory "$JAVA_HOME" --strip-components 1 \
+ && rm /tmp/jdk.tgz \
&& apt-get install -y --no-install-recommends maven \
&& rm -rf /var/lib/apt/lists/*
diff --git a/README.md b/README.md
index c8dce0a..85c7373 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,9 @@
# In-memory Object Graph Stores
+
+[](https://github.com/EngineeringSoftware/eStore/actions/workflows/test-ci.yml)
+[](https://github.com/EngineeringSoftware/eStore/actions/workflows/formatting-ci.yml)
+[](https://github.com/EngineeringSoftware/eStore/actions/workflows/coverage-ci.yml)
+
Implementation of an in-memory object graph store, dubbed ϵStore. Our
diff --git a/estore-maven-plugin/pom.xml b/estore-maven-plugin/pom.xml
index 2d9849f..4e29ce5 100644
--- a/estore-maven-plugin/pom.xml
+++ b/estore-maven-plugin/pom.xml
@@ -25,7 +25,8 @@
UTF-8
- 8
+ 8
+ 8
3.9.14
diff --git a/estore/pom.xml b/estore/pom.xml
index f47ffa3..532a1d2 100644
--- a/estore/pom.xml
+++ b/estore/pom.xml
@@ -14,7 +14,8 @@
estore
UTF-8
- 8
+ 8
+ 8
@@ -118,7 +119,24 @@
org.jacoco
jacoco-maven-plugin
- 0.8.13
+ 0.8.14
+
+
+ org/estore/antlr4/**
+
+
+
+ BUNDLE
+
+
+ LINE
+ COVEREDRATIO
+ 0.70
+
+
+
+
+
@@ -132,6 +150,13 @@
report
+
+ check
+ verify
+
+ check
+
+
diff --git a/pom.xml b/pom.xml
index f5210d5..b35d1a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,8 @@
estore-internal
http://maven.apache.org
- 8
+ 8
+ 8
UTF-8
diff --git a/s b/s
index 7a6b6a7..bbab7c0 100755
--- a/s
+++ b/s
@@ -19,8 +19,10 @@ function check_deps() {
! hash "mvn" && \
{ echo "missing maven (https://maven.apache.org/download.cgi)"; return 1; }
- java -version 2>&1 | grep -qE 'version "1\.8|version "8' || \
- { echo "no java 8 available (apt-get install openjdk-8-jdk; macOS: brew install openjdk@8)"; return 1; }
+ if ! hash "java" 2>/dev/null || ! hash "javac" 2>/dev/null; then
+ echo "no JDK available (CI uses Oracle JDK 25; bytecode target is Java 8)"
+ return 1
+ fi
! hash "wget" && \
{ echo "missing wget (apt-get install wget)"; return 1; }
@@ -51,10 +53,9 @@ function install_deps() {
{ echo "Failed to install Maven"; return 1; }
fi
- if ! hash "java" 2>/dev/null || ! java -version 2>&1 | grep -qE 'version "1\.8|version "8'; then
- echo "Installing Java 8..."
- apt-get update && apt-get install -y openjdk-8-jdk || \
- { echo "Failed to install Java 8"; return 1; }
+ if ! hash "java" 2>/dev/null || ! hash "javac" 2>/dev/null; then
+ echo "No JDK found. Install Oracle JDK 25 from https://www.oracle.com/java/technologies/downloads/"
+ return 1
fi
if ! hash "wget" 2>/dev/null; then