From 250bb09ead615776ca0d2459dc8d78a05426323a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20R=C3=BCtter?= Date: Fri, 9 Oct 2026 11:09:14 +0200 Subject: [PATCH 1/2] FELIX-6870 - Run the integration tests against the code being built Modules across the repository pin released Felix sibling bundles as dependencies of their tests, so pax-exam and the bnd resolver exercise released artifacts instead of the code in this repository. Regressions introduced here can therefore pass CI unnoticed, which is how the FilterImpl.WrapperCapability bug fixed in FELIX-6869 survived on master. Every such pin becomes a property that still defaults to the latest release, so each module keeps building on its own. CI now builds and installs a producing module whenever it or one of its consumers changed, and overrides the property with the version built here: framework -> configadmin, scr, http, gogo configadmin -> scr utils -> resolver gogo bundles -> gogo itest-shell, itest-jline, jline The two gogo itest modules took their versions from an imported BOM that pins released bundles, so they resolved against none of the code in this repository; they now carry explicit, overridable versions. http/itest kept a 7.0.5 framework pin that FELIX-6869 missed. The step that resolves the versions evaluates the gogo modules inside the gogo reactor, because gogo-parent is not published anywhere. framework.security is left pinned: it is no longer built here (removed in the 8.0.0 framework line, FELIX-6807) and its only consumer, ConfigAdminSecurityTest, is excluded. ipojo is left alone, since its removal is already proposed separately. Co-Authored-By: Claude Opus 5 --- .github/workflows/maven-ci.yml | 49 +++++++++++++++++++++------------- configadmin/pom.xml | 10 ++++++- gogo/itest-jline/pom.xml | 13 +++++++++ gogo/itest-shell/pom.xml | 13 +++++++++ gogo/jline/pom.xml | 7 ++++- http/itest/pom.xml | 7 ++++- resolver/pom.xml | 7 ++++- scr/pom.xml | 11 ++++++-- 8 files changed, 93 insertions(+), 24 deletions(-) diff --git a/.github/workflows/maven-ci.yml b/.github/workflows/maven-ci.yml index 16d155b42d..bcf73e2387 100644 --- a/.github/workflows/maven-ci.yml +++ b/.github/workflows/maven-ci.yml @@ -108,24 +108,40 @@ jobs: - 'log.extension/**' examples: - 'examples/**' - - name: Felix SCR - if: steps.changes.outputs.scr == 'true' - run: mvn -B -V -Dstyle.color=always --file scr/pom.xml clean verify - name: Felix Log if: steps.changes.outputs.log == 'true' run: mvn -B -V -Dstyle.color=always --file log/pom.xml clean verify - # Built and installed before Felix HTTP, whose integration tests run on it. - # Also runs when only http changed, so those tests always exercise the framework - # in this repository rather than the last release. See FELIX-6869. + # Several modules pin released Felix bundles as test-scoped dependencies so that + # they still build on their own. Each such pin is a property, which the steps below + # override with the version built from this repository, so the tests exercise the + # code being changed rather than the last release. A producer is therefore built and + # installed whenever it or one of its consumers changed. See FELIX-6870. + - name: Resolve the versions built in this repository + if: steps.changes.outputs.framework == 'true' || steps.changes.outputs.http == 'true' || steps.changes.outputs.configadmin == 'true' || steps.changes.outputs.scr == 'true' || steps.changes.outputs.gogo == 'true' || steps.changes.outputs.utils == 'true' || steps.changes.outputs.resolver == 'true' + run: | + record() { + echo "$1=$2" >> "$GITHUB_ENV" + echo "$1 = $2" + } + for module in framework configadmin utils; do + record "$(echo "$module" | tr 'a-z' 'A-Z')_VERSION" "$(mvn -B -q --file "$module/pom.xml" help:evaluate -Dexpression=project.version -DforceStdout)" + done + # gogo-parent is not published anywhere, so these only resolve inside the gogo reactor. + for module in command runtime shell jline; do + record "GOGO_$(echo "$module" | tr 'a-z' 'A-Z')_VERSION" "$(mvn -B -q --file gogo/pom.xml -pl "$module" help:evaluate -Dexpression=project.version -DforceStdout)" + done - name: Felix Framework - if: steps.changes.outputs.framework == 'true' || steps.changes.outputs.http == 'true' + if: steps.changes.outputs.framework == 'true' || steps.changes.outputs.http == 'true' || steps.changes.outputs.configadmin == 'true' || steps.changes.outputs.scr == 'true' || steps.changes.outputs.gogo == 'true' run: mvn -B -V -Dstyle.color=always --file framework/pom.xml clean install + - name: Felix Config Admin + if: steps.changes.outputs.configadmin == 'true' || steps.changes.outputs.scr == 'true' + run: mvn -B -V -Dstyle.color=always --file configadmin/pom.xml clean install "-Dfelix.framework.version=$FRAMEWORK_VERSION" + - name: Felix SCR + if: steps.changes.outputs.scr == 'true' + run: mvn -B -V -Dstyle.color=always --file scr/pom.xml clean verify "-Dfelix.framework.version=$FRAMEWORK_VERSION" "-Dfelix.configadmin.version=$CONFIGADMIN_VERSION" - name: Felix HTTP if: steps.changes.outputs.http == 'true' - run: | - FRAMEWORK_VERSION=$(mvn -B -q --file framework/pom.xml help:evaluate -Dexpression=project.version -DforceStdout) - echo "Running the integration tests against framework $FRAMEWORK_VERSION" - mvn -B -V -Dstyle.color=always "-Dit.test=!MissingWebsocketDependenciesIT" --file http/pom.xml clean install verify "-Dmaven.repo.local=/home/runner/.m2/repository/" "-Dfelix.framework.version=$FRAMEWORK_VERSION" + run: mvn -B -V -Dstyle.color=always "-Dit.test=!MissingWebsocketDependenciesIT" --file http/pom.xml clean install verify "-Dmaven.repo.local=/home/runner/.m2/repository/" "-Dfelix.framework.version=$FRAMEWORK_VERSION" - name: Felix Maven bundle plugin if: steps.changes.outputs.maven-bundle-plugin == 'true' run: mvn -B -V -Dstyle.color=always --file tools/maven-bundle-plugin/pom.xml clean install verify @@ -143,16 +159,16 @@ jobs: run: mvn -B -V -Dstyle.color=always --file main/pom.xml clean verify - name: Felix Gogo Shell if: steps.changes.outputs.gogo == 'true' - run: mvn -B -V -Dstyle.color=always --file gogo/pom.xml clean verify + run: mvn -B -V -Dstyle.color=always --file gogo/pom.xml clean verify "-Dfelix.gogo.command.version=$GOGO_COMMAND_VERSION" "-Dfelix.gogo.runtime.version=$GOGO_RUNTIME_VERSION" "-Dfelix.gogo.shell.version=$GOGO_SHELL_VERSION" "-Dfelix.gogo.jline.version=$GOGO_JLINE_VERSION" "-Dfelix.framework.version=$FRAMEWORK_VERSION" - name: Felix utils - if: steps.changes.outputs.utils == 'true' - run: mvn -B -V -Dstyle.color=always --file utils/pom.xml clean verify + if: steps.changes.outputs.utils == 'true' || steps.changes.outputs.resolver == 'true' + run: mvn -B -V -Dstyle.color=always --file utils/pom.xml clean install - name: Felix connect if: steps.changes.outputs.connect == 'true' run: mvn -B -V -Dstyle.color=always --file connect/pom.xml clean verify - name: Felix resolver if: steps.changes.outputs.resolver == 'true' - run: mvn -B -V -Dstyle.color=always --file resolver/pom.xml clean verify + run: mvn -B -V -Dstyle.color=always --file resolver/pom.xml clean verify "-Dfelix.utils.version=$UTILS_VERSION" - name: Felix bundlerepository if: steps.changes.outputs.bundlerepository == 'true' run: mvn -B -V -Dstyle.color=always --file bundlerepository/pom.xml clean verify @@ -162,9 +178,6 @@ jobs: - name: Felix examples if: steps.changes.outputs.examples == 'true' run: mvn -B -V -Dstyle.color=always --file examples/pom.xml clean verify - - name: Felix Config Admin - if: steps.changes.outputs.configadmin == 'true' - run: mvn -B -V -Dstyle.color=always --file configadmin/pom.xml clean verify - name: Upload Test Results if: always() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 diff --git a/configadmin/pom.xml b/configadmin/pom.xml index 9ba50950ed..74d39f344c 100644 --- a/configadmin/pom.xml +++ b/configadmin/pom.xml @@ -72,6 +72,11 @@ ${bundle.build.name}/${project.build.finalName}.jar + + 7.0.5 @@ -165,12 +170,15 @@ org.apache.felix org.apache.felix.framework - 7.0.5 + ${felix.framework.version} test org.apache.felix org.apache.felix.framework.security + 2.8.3 test diff --git a/gogo/itest-jline/pom.xml b/gogo/itest-jline/pom.xml index 7599f09a59..fa5da39628 100644 --- a/gogo/itest-jline/pom.xml +++ b/gogo/itest-jline/pom.xml @@ -44,6 +44,15 @@ true true true + + 1.1.2 + 1.1.8 + 1.1.4 + 6.0.1 @@ -54,18 +63,22 @@ org.apache.felix org.apache.felix.gogo.command + ${felix.gogo.command.version} org.apache.felix org.apache.felix.gogo.jline + ${felix.gogo.jline.version} org.apache.felix org.apache.felix.gogo.runtime + ${felix.gogo.runtime.version} org.apache.felix org.apache.felix.framework + ${felix.framework.version} diff --git a/gogo/itest-shell/pom.xml b/gogo/itest-shell/pom.xml index ba57ed19dc..b1e0c3c0c3 100644 --- a/gogo/itest-shell/pom.xml +++ b/gogo/itest-shell/pom.xml @@ -44,6 +44,15 @@ true true true + + 1.1.2 + 1.1.4 + 1.1.4 + 6.0.1 @@ -54,18 +63,22 @@ org.apache.felix org.apache.felix.gogo.command + ${felix.gogo.command.version} org.apache.felix org.apache.felix.gogo.shell + ${felix.gogo.shell.version} org.apache.felix org.apache.felix.gogo.runtime + ${felix.gogo.runtime.version} org.apache.felix org.apache.felix.framework + ${felix.framework.version} diff --git a/gogo/jline/pom.xml b/gogo/jline/pom.xml index 9508dc688c..aa6c1aa362 100644 --- a/gogo/jline/pom.xml +++ b/gogo/jline/pom.xml @@ -44,6 +44,11 @@ 1.8 1.8 7.1.0 + + 1.1.2 @@ -63,7 +68,7 @@ org.apache.felix org.apache.felix.gogo.command - 1.1.2 + ${felix.gogo.command.version} test diff --git a/http/itest/pom.xml b/http/itest/pom.xml index 786df7a264..ec61bd6bd0 100644 --- a/http/itest/pom.xml +++ b/http/itest/pom.xml @@ -37,6 +37,11 @@ org.apache.felix.http.jetty12 4.13.3 2.6.14 + + 7.0.5 @@ -163,7 +168,7 @@ org.apache.felix org.apache.felix.framework - 7.0.5 + ${felix.framework.version} test diff --git a/resolver/pom.xml b/resolver/pom.xml index 1355825d5a..7570cc8483 100644 --- a/resolver/pom.xml +++ b/resolver/pom.xml @@ -57,7 +57,7 @@ org.apache.felix org.apache.felix.utils - 1.8.0 + ${felix.utils.version} test @@ -69,6 +69,11 @@ + + 1.8.0 diff --git a/scr/pom.xml b/scr/pom.xml index 8aeaf09fd4..cfe7c58029 100644 --- a/scr/pom.xml +++ b/scr/pom.xml @@ -71,6 +71,13 @@ ${java.version} ${java.version} ${java.version} + + + 7.0.1 + 1.9.0 @@ -259,7 +266,7 @@ org.apache.felix org.apache.felix.configadmin - 1.9.0 + ${felix.configadmin.version} test @@ -399,7 +406,7 @@ org.apache.felix org.apache.felix.framework - 7.0.1 + ${felix.framework.version} test From 70250e6f78174146db0c4af76e3bc7474fb87089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20R=C3=BCtter?= Date: Fri, 9 Oct 2026 13:59:35 +0200 Subject: [PATCH 2/2] FELIX-6870 - Add JDK 27 to the CI matrix 27 was taken out again in d347835e60 because Aries SpiFly 1.3.7 bundles ASM 9.6, which rejects class file major version 71, so its weaving hook threw for every class and Jetty never finished starting. FELIX-6869 since provisions ASM 9.10.1 alongside the SpiFly bundle, which does know version 71, so the blocker should be gone. The framework and the TCK already passed on 27 when that was checked separately. Co-Authored-By: Claude Opus 5 --- .github/workflows/maven-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven-ci.yml b/.github/workflows/maven-ci.yml index bcf73e2387..c12352a4ca 100644 --- a/.github/workflows/maven-ci.yml +++ b/.github/workflows/maven-ci.yml @@ -57,7 +57,7 @@ jobs: strategy: fail-fast: false matrix: - java: [17,21,25] + java: [17,21,25,27] steps: - uses: actions/checkout@v7 - name: Set up JDK ${{ matrix.java }}