Quarkus Docker image (e2e / full-tool)
Dockerfile here layers the Quarkus uber runner-jar onto the prebuilt base
image (stirlingtools/stirling-pdf-base, which already ships Java 25 +
LibreOffice + Tesseract + qpdf + Ghostscript + Calibre + Python).
This is the image the cucumber (behave) e2e suite under testing/cucumber runs
against. It is deliberately a two-step build so the image build stays fast
for the test loop (the jar is built once by Gradle, then layered in):
# from the repo root, with JDK 25 on the toolchain (host `java` may be 21)
export JAVA_HOME=/path/to/temurin-25
# 1. build the runner-jar (uber-jar; NOT app/core/build/libs/*.jar)
./gradlew :stirling-pdf:quarkusBuild -x test --console=plain
# -> app/core/build/stirling-pdf-<version>-runner.jar
# 2. build the image (context = repo root)
docker build -f docker/quarkus/Dockerfile -t stirling-pdf-quarkus:full .
# 3. run it (login off = most API tests; cucumber hardcodes port 8080)
docker rm -f sp-e2e 2>/dev/null || true
docker run -d --name sp-e2e -p 8080:8080 \
-e SECURITY_ENABLELOGIN=false -e METRICS_ENABLED=true \
-e SYSTEM_DEFAULTLOCALE=en-US -e SYSTEM_MAXFILESIZE=100 \
stirling-pdf-quarkus:full
# wait for: curl localhost:8080/api/v1/info/status == {"version":...,"status":"UP"}
build-and-run.sh wraps those three steps (jar -> image -> container -> wait
healthy). Pass --skip-jar to reuse an already-built runner-jar.
Versioned jar path
The Dockerfile defaults ARG JAR_FILE=app/core/build/stirling-pdf-2.12.0-runner.jar.
If the project version changes, override it:
docker build -f docker/quarkus/Dockerfile \
--build-arg JAR_FILE=app/core/build/stirling-pdf-X.Y.Z-runner.jar \
-t stirling-pdf-quarkus:full .
Why not docker/embedded/Dockerfile?
That one is Spring-Boot-specific: it uses java -Djarmode=tools ... extract --layers and copies spring-boot-loader layers, neither of which exist for a
Quarkus jar. Migrating embedded/Dockerfile* to Quarkus (full from-source
multi-stage build, for CI / testing/test.sh) is tracked separately.