From fd9808e0d14f1923e04ab58b2f7cd71217d99693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Dinis=20Ferreira?= Date: Sun, 19 Jul 2026 18:28:30 +0200 Subject: [PATCH 1/2] build: add linux/aarch64 Tycho target-environment profile Add a Maven profile activated on linux/aarch64 that sets osgi.os=linux, osgi.ws=gtk, osgi.arch=aarch64. Without it, Tycho falls back to the pom's default win32 target environment on arm64 Linux and builds an unlaunchable test runtime (NoClassDefFoundError: org.eclipse.swt.SWTError, exit code 13), so SWT/UI tests cannot run in an arm64 container. Co-Authored-By: Claude Opus 4.8 (1M context) --- ddk-parent/pom.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ddk-parent/pom.xml b/ddk-parent/pom.xml index fb098d150..88a2513fc 100644 --- a/ddk-parent/pom.xml +++ b/ddk-parent/pom.xml @@ -440,6 +440,21 @@ x86_64 + + + + linux + aarch64 + unix + + + 64bit_linux_aarch64 + + linux + gtk + aarch64 + + macosx From 8c55de47ab98bced1ee04200ddb9f11ca02f5a07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Dinis=20Ferreira?= Date: Sun, 19 Jul 2026 18:28:30 +0200 Subject: [PATCH 2/2] build: add a Docker build environment for headless DDK builds Adds a small Linux image with Java 21, Maven, GTK 3 and Xvfb, so the full build and the UI tests run headlessly on any machine with Docker, on x86-64 or ARM64. It holds only what is specific to Docker, so it needs no upkeep when the build changes: the base image follows the latest Maven 3 / Java 21 image, and the README runs the build commands from AGENTS.md instead of copying them. unzip is installed because ./mvnw otherwise downloads the .tar.gz distribution, which doesn't match the wrapper's checksum. Co-Authored-By: Claude Opus 5.5 --- docker/Dockerfile | 9 +++++++++ docker/README.md | 26 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 docker/Dockerfile create mode 100644 docker/README.md diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..0064f1899 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,9 @@ +FROM maven:3-eclipse-temurin-21-noble + +# Native libraries for SWT on GTK 3 and the JDK's AWT, a virtual display for the UI tests, and unzip for ./mvnw, +# which otherwise downloads the .tar.gz that doesn't match its checksum. +RUN apt-get update \ + && apt-get install -y --no-install-recommends libgtk-3-0t64 librsvg2-common libxtst6 unzip xvfb \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /workspace diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 000000000..baa9094ed --- /dev/null +++ b/docker/README.md @@ -0,0 +1,26 @@ +# DDK Docker build environment + +A Linux image with Java, Maven, GTK and Xvfb, for running the full build and the UI tests headlessly on any machine with Docker (x86-64 or ARM64). + +Build the image from the repository root: + +```bash +docker build --pull -t ddk-build docker +``` + +Run any build command from [AGENTS.md](../AGENTS.md#build-commands) in it, for example the full CI build, which already starts with `xvfb-run`: + +```bash +docker run --rm --init \ + --mount "type=bind,source=${PWD},target=/workspace" \ + --mount "type=volume,source=ddk-m2,target=/root/.m2" \ + ddk-build \ + +``` + +In PowerShell, use `$PWD.Path` for the source and backticks for the line breaks, and quote `-D` arguments (`'-DskipTests'`). + +- **Use a full clone, not a linked worktree:** a worktree's `.git` file points outside the mount, and Tycho's build qualifier then fails with `repository not found`. +- **`--init` is required:** without it `xvfb-run` runs as PID 1 and can hang before starting Maven. +- The `ddk-m2` volume keeps Maven and p2 downloads between runs; on a machine that builds both architectures, use one volume per architecture. +- The container runs as root, so on a Linux host the build output in the checkout is owned by root.