From 6fc824b4cb9a86b1e80d427d4b4e844c131deea7 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 7 May 2026 16:01:59 +0200 Subject: [PATCH 1/2] chore: conditionally enable OpenRewrite per module via marker files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of always running OpenRewrite on all modules (which adds ~8 min to every build), use Maven file-activated profiles to run it only on modules with changed Java files. Before the build, regen.sh creates .rewrite-enabled marker files in modules that have modified Java files. The rewrite profile in parent/pom.xml activates when this file exists, so OpenRewrite runs only where needed. This approach is recipe-agnostic — adding new OpenRewrite recipes to the profile requires no changes to the detection logic. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 3 ++- etc/scripts/regen.sh | 18 ++++++++++++++++++ parent/pom.xml | 5 +++++ pom.xml | 1 + 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e871c05ad7470..f21b36a36f8f7 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ mvnd.zip* backlog .claude .omc -.oss-ai-helper-rules \ No newline at end of file +.oss-ai-helper-rules +.rewrite-enabled diff --git a/etc/scripts/regen.sh b/etc/scripts/regen.sh index 5f4b75f2a69b0..e710691240b9d 100755 --- a/etc/scripts/regen.sh +++ b/etc/scripts/regen.sh @@ -25,6 +25,24 @@ cd `dirname "$0"`/../.. git clean -fdx rm -Rf **/src/generated/ +# Enable OpenRewrite only for modules with changed Java files. +# Maven's file-activated profile (.rewrite-enabled) checks +# per-module, so OpenRewrite runs only where needed — no -Prewrite flag required. +# We only need --deepen=1 (depth 1 -> 2) since we compare adjacent commits: +# for PRs, HEAD~1 is the base branch tip (first parent of the merge commit); +# for main builds, HEAD~1 is the previous squash-merged commit. +if ! git rev-parse HEAD~1 >/dev/null 2>&1; then + git fetch --deepen=1 --quiet 2>/dev/null || true +fi + +if git rev-parse HEAD~1 >/dev/null 2>&1; then + git diff HEAD~1 HEAD --name-only -- '*.java' ':!*/src/generated/*' \ + | sed 's|/src/.*||' | sort -u \ + | while read module; do + [ -d "$module" ] && touch "$module/.rewrite-enabled" + done +fi + # Regenerate everything if ./mvnw --batch-mode -Pregen -DskipTests ${MAVEN_EXTRA_ARGS} install >> build.log 2>&1; then echo "✅ mvn -Pregen succeeded." diff --git a/parent/pom.xml b/parent/pom.xml index 3cc1d9705782a..2c1a4e7e22216 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -4183,6 +4183,11 @@ rewrite + + + .rewrite-enabled + + diff --git a/pom.xml b/pom.xml index bf74fe541a446..09060bbd3f5b4 100644 --- a/pom.xml +++ b/pom.xml @@ -261,6 +261,7 @@ ${maven.multiModuleProjectDirectory}/buildingtools/src/main/resources/header.txt + **/.rewrite-enabled release.properties **/pom.xml.tag **/pom.xml.releaseBackup From 0c60ce4eeeb2dbecccc511c17808aa31b6e3d7db Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Mon, 11 May 2026 14:49:37 +0200 Subject: [PATCH 2/2] =?UTF-8?q?test:=20Java=20change=20in=20camel-api=20?= =?UTF-8?q?=E2=80=94=20OpenRewrite=20should=20run=20for=20this=20module=20?= =?UTF-8?q?only?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DO NOT MERGE — test PR to validate .rewrite-enabled marker is created only for core/camel-api. --- core/camel-api/src/main/java/org/apache/camel/CamelContext.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java index 7f8ebdc2ac0ee..dfb99f19fc75c 100644 --- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java +++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java @@ -82,6 +82,8 @@ *

* You can use the {@link CamelContext#getCamelContextExtension()} to obtain the extension point for the * {@link CamelContext}. This extension point exposes internal APIs via {@link ExtendedCamelContext}. + * + * TEST: Java change — OpenRewrite SHOULD run for core/camel-api only. */ public interface CamelContext extends CamelContextLifecycle, RuntimeConfiguration {