Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
876d6af
Add docker-compose deployment for running LEO CDP from the GHCR image
liem18112000-axon Jun 6, 2026
907625d
Phase 0: migration plan docs, Gradle wrapper @6.9.4, build baseline
liem18112000-axon Jun 6, 2026
d31df54
Phase 1a: Gradle 7.6.4 - drop legacy maven plugin, typed JVM-environm…
liem18112000-axon Jun 6, 2026
0ba9cf9
Phase 1b: Gradle 8.14.3 - archiveBaseName, layout.buildDirectory
liem18112000-axon Jun 6, 2026
ab69e4f
Phase 1c: Gradle 9.1.0 on JDK 25 daemon - gate G1 passed
liem18112000-axon Jun 6, 2026
e600a7b
Phase 2 (code): JDK-25 runtime flags, Corretto 25 images, CI on JDK 25
liem18112000-axon Jun 6, 2026
bee44da
Update gradlew launcher scripts to Gradle 9.1.0 wrapper versions
liem18112000-axon Jun 6, 2026
c134c20
Phase 2 validation: findutils for gradlew in corretto:25 image; R6 + …
liem18112000-axon Jun 6, 2026
cc50b9c
G2-local k6 A/B: Corretto 25 shows -15% RPS / +75% p95 vs Corretto 11
liem18112000-axon Jun 7, 2026
974c1bd
Migration execution report; k6 repeat protocol disproves perf regression
liem18112000-axon Jun 7, 2026
014b16e
k6 batch 2: JDK 25 + UseCompactObjectHeaders leads JDK 11 (+7% rps, -…
liem18112000-axon Jun 7, 2026
fe67db6
Memory A/B: JDK 25 runtime uses 30% less RSS than JDK 11 (289 vs 413 …
liem18112000-axon Jun 7, 2026
d64612b
Add detailed performance test report: JDK 25 vs 11 (latency + memory)
liem18112000-axon Jun 7, 2026
2e47813
Wave 0: bytecode target Java 25 (major 69) + code modernization plan
liem18112000-axon Jun 7, 2026
fc993ff
k6 batch 3: bytecode 69 sweeps all rounds vs bytecode 55 on same JVM
liem18112000-axon Jun 7, 2026
c6b5c5a
Wave 1: mechanical Java 21+/25 idioms via curated OpenRewrite recipes
liem18112000-axon Jun 7, 2026
16546b9
Wave 2a: Gson 2.13.2 + first record conversions
liem18112000-axon Jun 7, 2026
34a6f20
Tracker: Wave 1 + Wave 2a rows
liem18112000-axon Jun 7, 2026
1772467
Tracker: consolidation rebuild in progress; Wave 2b/3 queued; record-…
liem18112000-axon Jun 7, 2026
f4fa852
Consolidation verified: Waves 1+2a image clean; harden wrapper download
liem18112000-axon Jun 7, 2026
bdfb740
Wave 2b + 3a: ProductImportingEvent record; virtual threads for expor…
liem18112000-axon Jun 7, 2026
83842d8
Tracker: Wave 2b + 3a done
liem18112000-axon Jun 7, 2026
10a2eba
Docker: wrapper prefetch layer before COPY . . ; 60s wrapper network …
liem18112000-axon Jun 7, 2026
77345af
Fix CI: gradlew committed without exec bit from Windows
liem18112000-axon Jun 7, 2026
16175b5
Fix CI test stage: JUnit platform + unit/integration split
liem18112000-axon Jun 8, 2026
fc25590
Tracker: CI green on 16175b5; document C1-C4 fixes
liem18112000-axon Jun 8, 2026
ed07ab7
integrationTest: pass ARANGODB_* env + set workingDir for live-DB runs
liem18112000-axon Jun 8, 2026
549b760
Tracker: local DB-layer validation 40/59 integration tests pass on li…
liem18112000-axon Jun 8, 2026
dea052b
Fix pre-existing test bug: @BeforeAll/@AfterAll must be static (JUnit 5)
liem18112000-axon Jun 8, 2026
e9f2cbd
Add seedDefaultData task (funnel stages + event metrics) for integrat…
liem18112000-axon Jun 8, 2026
24a9ef2
Test fixtures (push to 66/66): @TestMethodOrder + self-seeded notific…
liem18112000-axon Jun 8, 2026
90e5a76
TestNotification: green — guard idempotent delete + fix status->type key
liem18112000-axon Jun 8, 2026
8eb802b
Tracker: integration tests at 60/66; document remaining 6 as test-rem…
liem18112000-axon Jun 8, 2026
ae0ffda
Add concise branch-vs-main change report
liem18112000-axon Jun 8, 2026
75551f2
Branch report: add migration KPI table (throughput, latency, memory, …
liem18112000-axon Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,13 @@ jobs:
--health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 12
steps:
- uses: actions/checkout@v4
- name: Set up JDK 11 (Corretto)
uses: actions/setup-java@v4 # cached + reliable; mirrors the Corretto 11 install-java.sh provisions
- name: Set up JDK 25 (Corretto)
uses: actions/setup-java@v4 # JDK 25 runs the Gradle 9 daemon; bytecode stays Java 11 via options.release
with:
distribution: corretto
java-version: '11'
- name: Set up Gradle 6.9.4
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: '6.9.4' # no wrapper in repo; legacy 'maven' plugin needs Gradle 6.x
java-version: '25'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4 # version comes from the committed gradlew wrapper
- name: Wait for ArangoDB + Redis
run: |
echo "Waiting for ArangoDB on :8529 ..."
Expand All @@ -101,10 +99,16 @@ jobs:
if [ "$redis_ok" != "true" ]; then echo "Redis did not become reachable"; exit 1; fi
- name: Build & unit tests
working-directory: core-leo-cdp
run: gradle compileJava test
run: ./gradlew compileJava test
- name: Verify class-file target is Java 25 (major 69)
# Phase 4 / Wave 0 flipped the target to 25 (docs/06-java25-code-modernization-plan.md).
# Artifacts require a Java 25 runtime from here on.
working-directory: core-leo-cdp
run: |
javap -verbose -cp build/classes/java/main leotech.starter.MainHttpStarter | grep "major version: 69"
- name: Code quality
working-directory: core-leo-cdp
run: gradle check -x test
run: ./gradlew check -x test
- name: Integration tests
working-directory: core-leo-cdp
env:
Expand Down
7 changes: 3 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,10 @@ adsplay-report/public/ads/
**.classpath
**.log
**.iml
**/gradlew
**/gradlew.bat

docs/domain.txt
core-leo-cdp/data-of-real-customer/
core-leo-cdp/data-of-real-customer/*
core-leo-cdp/gradle/*

# CDP database configs must be excluded in commit
core-leo-cdp/configs/database-configs.json
Expand All @@ -41,4 +38,6 @@ airflow-ai-agent/.env


# linux APT keys
**.gpg
**.gpg
# Playwright MCP transient artifacts
**/.playwright-mcp/
1 change: 1 addition & 0 deletions core-leo-cdp/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ build-target/*

# Package Files #
*.jar
!gradle/wrapper/gradle-wrapper.jar
*.war
*.nar
*.ear
Expand Down
35 changes: 28 additions & 7 deletions core-leo-cdp/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,24 @@
# iteration before the image boots cleanly.

# ---- build stage ----
FROM amazoncorretto:11 AS build
RUN yum install -y unzip tar gzip && \
curl -sL https://services.gradle.org/distributions/gradle-6.9.4-bin.zip -o /tmp/g.zip && \
unzip -q /tmp/g.zip -d /opt && ln -s /opt/gradle-6.9.4/bin/gradle /usr/bin/gradle
# JDK 25 runs the Gradle 9 daemon; bytecode target is pinned by options.release in
# build.gradle (11 until migration Phase 4). The committed gradlew wrapper downloads
# its own pinned Gradle distribution - no manual install needed.
FROM amazoncorretto:25 AS build
# findutils provides xargs, which the gradlew launcher script requires;
# the minimal AL2023-based corretto image does not ship it.
RUN yum install -y findutils
WORKDIR /src
# Wrapper files FIRST, then pre-fetch the Gradle distribution in its own retried
# layer: the services.gradle.org download is flaky on some networks ("Premature
# EOF"/timeouts). Ordered before COPY . . so the cached layer survives source
# changes; it only invalidates when the wrapper itself is upgraded.
COPY gradlew gradlew.bat ./
COPY gradle/ gradle/
RUN ./gradlew --version --no-daemon || ./gradlew --version --no-daemon || ./gradlew --version --no-daemon
COPY . .
# Output goes to /dist with deps/ alongside; JAR manifest Class-Path points to ./deps
RUN gradle AutoBuildForDeployment --no-daemon \
RUN ./gradlew AutoBuildForDeployment --no-daemon \
-PbuildOutputFolderPath=/dist -PstaticOutputFolderPath=/static -PbuildVersion=docker

# ---- test stage ----
Expand All @@ -20,7 +30,7 @@ RUN gradle AutoBuildForDeployment --no-daemon \
# test.** classes need a live ArangoDB/Redis and won't pass inside an isolated build
# (see CLAUDE.md). The workflow surfaces pass/fail from whatever reports are exported.
FROM build AS test
RUN gradle test --no-daemon \
RUN ./gradlew test --no-daemon \
-PbuildOutputFolderPath=/dist -PstaticOutputFolderPath=/static -PbuildVersion=docker || true
RUN mkdir -p /test-results && \
cp -r /src/build/test-results/. /test-results/ 2>/dev/null || true
Expand All @@ -32,9 +42,20 @@ FROM scratch AS test-export
COPY --from=test /test-results /

# ---- runtime stage ----
FROM amazoncorretto:11
FROM amazoncorretto:25
WORKDIR /app
COPY --from=build /dist /app
# JDK-25 compat flags for old Netty (Vert.x 3) / Gson / JNI users - rationale in
# docs/02-java-25-migration.md §3. JDK_JAVA_OPTIONS is read by the java launcher,
# so the same flags apply if the ENTRYPOINT jar is overridden with another starter.
ENV JDK_JAVA_OPTIONS="--sun-misc-unsafe-memory-access=allow \
--enable-native-access=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens=java.base/java.util=ALL-UNNAMED \
--add-opens=java.base/java.nio=ALL-UNNAMED \
--add-opens=java.base/sun.nio.ch=ALL-UNNAMED \
-Dio.netty.tryReflectionSetAccessible=true"
# 9070 = admin MainHttpRouter, 9080 = ObserverHttpRouter (see configs/http-routing-configs.json)
EXPOSE 9070 9080
ENTRYPOINT ["java", "-jar", "leo-main-starter-docker.jar"]
Loading
Loading