diff --git a/.circleci/config.yml b/.circleci/config.yml
index e4a23a2662..05c397d1c9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -165,7 +165,10 @@ commands:
name: Save package results
command: |
mkdir -p ~/test-results/junit/
- find . -type f -regex ".*/target/surefire-reports/.*xml" \
+ find . -type f \( \
+ -regex ".*/target/surefire-reports/.*xml" \
+ -o -regex ".*/target/failsafe-reports/.*xml" \
+ \) \
-exec cp {} ~/test-results/junit/ \;
when: always
- store_test_results:
@@ -311,7 +314,7 @@ jobs:
export MAVEN_OPTS="-Xmx3g -XX:MaxMetaspaceSize=768m -Djava.awt.headless=true"
mvn -U -T1 -B install \
-DonlyUTs \
- -DargLine="@{argLine} -Xmx2g -XX:MaxMetaspaceSize=512m"
+ -DargLine="-Xmx2g -XX:MaxMetaspaceSize=512m"
- save-test-results
integration-tests:
@@ -367,6 +370,8 @@ jobs:
-pl :sqrl-testing-container \
-Ddocker.image.tag=local-${CIRCLE_SHA1} \
-Dmcp.inspector.version=$MCP_TAG
+ mvn -B -DonlyContainerE2E jacoco:report-aggregate
+ - save-test-results
deploy:
docker:
@@ -386,7 +391,7 @@ jobs:
echo "pinentry-mode loopback" >> ~/.gnupg/gpg.conf
- run:
name: Build shaded JAR
- command: mvn -U clean -T1C -B deploy -DonlyJars ${CIRCLE_TAG:+-Prelease} -Deasyjacoco.skip=true
+ command: mvn -U clean -T1C -B deploy -DonlyJars ${CIRCLE_TAG:+-Prelease}
build-images:
# use a full VM so we can run Docker / Buildx
diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml
deleted file mode 100644
index d477ef5cfe..0000000000
--- a/.mvn/extensions.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
- com.marvinformatics.jacoco
- easy-jacoco-maven-plugin
- 0.1.4
-
-
diff --git a/CLAUDE.md b/CLAUDE.md
index c7bd846ebf..bd35c558f0 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -33,7 +33,6 @@ mvn -P dev initialize
# Server-specific builds
mvn clean package # Build fat JAR (vertx-server.jar)
mvn clean package -Pskip-shade-plugin # Build without fat JAR
-mvn clean package -Pinstrument # Build with JaCoCo instrumentation
```
### Testing Commands
@@ -47,11 +46,11 @@ mvn verify
# Coverage report
mvn jacoco:report
-# Test specific module (ALWAYS include -Deasyjacoco.skip when using -pl)
-mvn test -pl sqrl-planner -Deasyjacoco.skip
+# Test specific module
+mvn test -pl sqrl-planner
# Test specific test method in module
-mvn test -pl sqrl-tools/sqrl-config -Dtest=TestClassName#testMethodName -Deasyjacoco.skip
+mvn test -pl sqrl-tools/sqrl-config -Dtest=TestClassName#testMethodName
# Container tests (requires Docker images to be built)
mvn -B install -DonlyContainerE2E -pl :sqrl-testing-container -Dit.test=TestClassName
diff --git a/pom.xml b/pom.xml
index 993bd0d1a4..0560abfeb0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,12 +135,14 @@
2.4.240
7.0.8
7.1.0
+
3.3.4
4.5.14
1.11.0
2.22.0
+
0.8.15
3.0.0
2.0.1
@@ -173,7 +175,6 @@
0.48.1
- 0.1.4
5.6
5.0.0
3.2.8
@@ -870,33 +871,47 @@
org.jacoco
jacoco-maven-plugin
${jacoco.version}
-
-
- org/**
-
-
-
-
-
- com.marvinformatics.jacoco
- easy-jacoco-maven-plugin
- 0.1.4
-
-
-
-
-
- INSTRUCTION
- COVEREDRATIO
- 0.70
-
-
-
-
-
- true
-
-
+
+
+ prepare-agent
+
+ prepare-agent
+
+
+ true
+ ${project.build.directory}/jacoco.exec
+ jacocoArgLine
+
+
+
+ report
+
+ report
+
+ verify
+
+
+ org/**
+
+
+
+
+ report-aggregate
+
+ report-aggregate
+
+ verify
+ false
+
+
+ target/*.exec
+
+
+ org/**
+
+
+
+
@@ -982,6 +997,10 @@
America/Los_Angeles
+ @{jacocoArgLine} ${argLine}
+
+ ${settings.localRepository}/org/jacoco/org.jacoco.agent/${jacoco.version}/org.jacoco.agent-${jacoco.version}-runtime.jar
+
@@ -998,8 +1017,9 @@
${flinkrunner.image.repo}
${flinkrunner.version}
+ ${settings.localRepository}/org/jacoco/org.jacoco.agent/${jacoco.version}/org.jacoco.agent-${jacoco.version}-runtime.jar
- ${argLine}
+ @{jacocoArgLine} ${argLine}
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED
diff --git a/sqrl-cli/pom.xml b/sqrl-cli/pom.xml
index 1231dddbdd..47129c17c5 100644
--- a/sqrl-cli/pom.xml
+++ b/sqrl-cli/pom.xml
@@ -427,44 +427,4 @@
-
-
-
- instrument
-
-
-
- org.jacoco
- org.jacoco.agent
- ${jacoco.version}
- runtime
-
-
-
-
-
-
- com.marvinformatics.jacoco
- easy-jacoco-maven-plugin
- ${easy-jacoco-maven-plugin.version}
-
-
- instrument-uber-jar
-
- instrument-jar
-
-
- ${project.build.directory}/sqrl-cli.jar
- ${project.build.directory}/sqrl-cli.jar
-
- com/datasqrl/*
-
-
-
-
-
-
-
-
-
diff --git a/sqrl-server/sqrl-server-vertx/entrypoint.sh b/sqrl-server/sqrl-server-vertx/entrypoint.sh
index 88bcdb921c..3f0d12940a 100755
--- a/sqrl-server/sqrl-server-vertx/entrypoint.sh
+++ b/sqrl-server/sqrl-server-vertx/entrypoint.sh
@@ -19,7 +19,7 @@ set -e
# Enable debug mode if DEBUG environment variable is set
if [[ -n "${SQRL_DEBUG+x}" && -n "$SQRL_DEBUG" ]]; then
- SQRL_JVM_ARGS="-Dlog4j2.configurationFile=/opt/sqrl/app/log4j2-debug.properties"
+ SQRL_JVM_ARGS="$SQRL_JVM_ARGS -Dlog4j2.configurationFile=/opt/sqrl/app/log4j2-debug.properties"
set -x
fi
diff --git a/sqrl-server/sqrl-server-vertx/pom.xml b/sqrl-server/sqrl-server-vertx/pom.xml
index 1ce87b9913..38fce9d453 100644
--- a/sqrl-server/sqrl-server-vertx/pom.xml
+++ b/sqrl-server/sqrl-server-vertx/pom.xml
@@ -83,35 +83,4 @@
-
-
-
- instrument
-
-
-
-
- com.marvinformatics.jacoco
- easy-jacoco-maven-plugin
- ${easy-jacoco-maven-plugin.version}
-
-
- instrument-uber-jar
-
- instrument-jar
-
-
- ${project.build.directory}/vertx-server.jar
- ${project.build.directory}/vertx-server.jar
-
- com/datasqrl/*
-
-
-
-
-
-
-
-
-
diff --git a/sqrl-testing/sqrl-testing-container/pom.xml b/sqrl-testing/sqrl-testing-container/pom.xml
index e5b0ea9692..77c55fc676 100644
--- a/sqrl-testing/sqrl-testing-container/pom.xml
+++ b/sqrl-testing/sqrl-testing-container/pom.xml
@@ -155,6 +155,13 @@
+
+ org.jacoco
+ org.jacoco.agent
+ ${jacoco.version}
+ runtime
+ test
+
diff --git a/sqrl-testing/sqrl-testing-container/src/test/java/com/datasqrl/container/testing/SqrlContainerExtension.java b/sqrl-testing/sqrl-testing-container/src/test/java/com/datasqrl/container/testing/SqrlContainerExtension.java
index 4cef094011..a8cf9972c4 100644
--- a/sqrl-testing/sqrl-testing-container/src/test/java/com/datasqrl/container/testing/SqrlContainerExtension.java
+++ b/sqrl-testing/sqrl-testing-container/src/test/java/com/datasqrl/container/testing/SqrlContainerExtension.java
@@ -71,6 +71,10 @@ public class SqrlContainerExtension
REDPANDA_NETWORK_ALIAS + ":" + REDPANDA_INTERNAL_PORT;
private static final String REDPANDA_IMAGE = "redpandadata/redpanda:v23.1.2";
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+ private static final String JACOCO_AGENT_PATH_PROPERTY = "jacoco.agent.path";
+ private static final String JACOCO_AGENT_CONTAINER_PATH = "/opt/sqrl/jacocoagent.jar";
+ private static final String JACOCO_OUTPUT_CONTAINER_DIR = "/jacoco";
+ private static final Path JACOCO_OUTPUT_HOST_DIR = Path.of("target");
private final String testCaseName;
@@ -150,6 +154,7 @@ public GenericContainer> createCmdContainer(boolean debug) {
if (debug) {
cmd = cmd.withEnv("SQRL_DEBUG", "1");
}
+ cmd = configureJacoco(cmd, "sqrl-cli.exec");
commandContainers.add(cmd);
return cmd;
@@ -189,10 +194,41 @@ public GenericContainer> createServerContainer(Path projectRoot, boolean withR
serverContainer =
serverContainer.withEnv(KAFKA_BOOTSTRAP_SERVERS, REDPANDA_INTERNAL_BOOTSTRAP);
}
+ serverContainer = configureJacoco(serverContainer, "sqrl-server.exec");
return serverContainer;
}
+ @SneakyThrows
+ private GenericContainer> configureJacoco(GenericContainer> container, String destFileName) {
+ var agentPathProperty = System.getProperty(JACOCO_AGENT_PATH_PROPERTY);
+ if (StringUtils.isBlank(agentPathProperty)) {
+ return container;
+ }
+
+ var agentPath = Path.of(agentPathProperty);
+ if (!Files.isRegularFile(agentPath)) {
+ log.warn("JaCoCo agent not found at {}, Docker coverage disabled", agentPath);
+ return container;
+ }
+
+ var outputDir = JACOCO_OUTPUT_HOST_DIR.toAbsolutePath();
+ Files.createDirectories(outputDir);
+
+ var jacocoArg =
+ String.format(
+ "-javaagent:%s=destfile=%s/%s,append=true,includes=com.datasqrl.*",
+ JACOCO_AGENT_CONTAINER_PATH, JACOCO_OUTPUT_CONTAINER_DIR, destFileName);
+ var existingJvmArgs = container.getEnvMap().get("SQRL_JVM_ARGS");
+ var jvmArgs =
+ StringUtils.isBlank(existingJvmArgs) ? jacocoArg : existingJvmArgs + " " + jacocoArg;
+
+ return container
+ .withFileSystemBind(agentPath.toString(), JACOCO_AGENT_CONTAINER_PATH, BindMode.READ_ONLY)
+ .withFileSystemBind(outputDir.toString(), JACOCO_OUTPUT_CONTAINER_DIR, BindMode.READ_WRITE)
+ .withEnv("SQRL_JVM_ARGS", jvmArgs);
+ }
+
public void compileSqrlProject() {
compileSqrlProject(null);
}