From 69743359ff5429f750ef89949ea0afb4348beeb0 Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Thu, 20 Aug 2026 09:34:04 +0200 Subject: [PATCH 1/5] Fix flattened POM publication for BOM consumers --- pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8831104..28d6550 100644 --- a/pom.xml +++ b/pom.xml @@ -215,7 +215,10 @@ org.codehaus.mojo flatten-maven-plugin ${flatten.plugin.version} - resolveCiFriendliesOnly + + resolveCiFriendliesOnly + true + flattenprocess-resourcesflatten flatten-cleancleanclean From 439c1695ec022fb45ff16525eaf2aad6cb3ef109 Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Thu, 20 Aug 2026 09:34:31 +0200 Subject: [PATCH 2/5] Add external BOM consumer regression check --- scripts/verify-bom-consumer.sh | 96 ++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 scripts/verify-bom-consumer.sh diff --git a/scripts/verify-bom-consumer.sh b/scripts/verify-bom-consumer.sh new file mode 100644 index 0000000..49bbb86 --- /dev/null +++ b/scripts/verify-bom-consumer.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +set -euo pipefail + +repository_root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$repository_root" + +version="$( + ./mvnw -q -ntp -DforceStdout help:evaluate -Dexpression=project.version \ + | awk '/^[0-9]+\.[0-9]+\.[0-9]+$/ { print; exit }' +)" +if [[ -z "$version" ]]; then + echo "Unable to resolve the FeatureFramework project version." >&2 + exit 1 +fi + +local_repository="$(mktemp -d)" +consumer_directory="$(mktemp -d)" +cleanup() { + rm -rf "$local_repository" "$consumer_directory" +} +trap cleanup EXIT + +./mvnw -B -ntp \ + -pl featureframework-bom -am \ + -DskipTests \ + -Dmaven.repo.local="$local_repository" \ + install + +parent_pom="$local_repository/nl/hauntedmc/featureframework/featureframework-parent/$version/featureframework-parent-$version.pom" +bom_pom="$local_repository/nl/hauntedmc/featureframework/featureframework-bom/$version/featureframework-bom-$version.pom" + +for installed_pom in "$parent_pom" "$bom_pom"; do + if [[ ! -f "$installed_pom" ]]; then + echo "Expected installed consumer POM was not created: $installed_pom" >&2 + exit 1 + fi + if grep -Fq '${revision}' "$installed_pom"; then + echo "Installed consumer POM still contains an unresolved \${revision}: $installed_pom" >&2 + exit 1 + fi +done + +cat >"$consumer_directory/pom.xml" < + + 4.0.0 + nl.hauntedmc.featureframework.acceptance + bom-consumer + 1.0.0 + + + + nl.hauntedmc.featureframework + featureframework-bom + $version + pom + import + + + + + + nl.hauntedmc.featureframework + featureframework-theme-api + + + +EOF + +effective_pom="$consumer_directory/effective-pom.xml" +./mvnw -B -ntp \ + -f "$consumer_directory/pom.xml" \ + -Dmaven.repo.local="$local_repository" \ + help:effective-pom \ + -Doutput="$effective_pom" + +if ! awk -v expected="$version" ' + /featureframework-theme-api<\/artifactId>/ { candidate = 1; next } + candidate && // { + value = $0 + sub(/^.*/, "", value) + sub(/<\/version>.*$/, "", value) + if (value == expected) { + found = 1 + } + candidate = 0 + } + END { exit found ? 0 : 1 } +' "$effective_pom"; then + echo "External BOM consumer did not receive featureframework-theme-api:$version from dependency management." >&2 + exit 1 +fi + +echo "Verified external consumption of featureframework-bom:$version." From de90a9677b71d7ecf8347a4016236f566da8f300 Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Thu, 20 Aug 2026 09:34:58 +0200 Subject: [PATCH 3/5] Verify BOM consumer POM in CI --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a5994ef..93b4df3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,6 +53,9 @@ jobs: id: tests run: ./mvnw -U -B -ntp verify + - name: Verify external BOM consumption + run: bash scripts/verify-bom-consumer.sh + - name: Print failing test reports if: failure() && steps.tests.outcome == 'failure' shell: bash From c114a53166b08b8e52b41db43f9f87bb233cea79 Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Thu, 20 Aug 2026 09:35:07 +0200 Subject: [PATCH 4/5] Gate releases on external BOM consumption --- .github/workflows/release.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71ef4f9..1c0b635 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,6 +61,9 @@ jobs: || { echo "Tag $GITHUB_REF_NAME does not match Maven version $PROJECT_VERSION." >&2; exit 1; } echo "value=$PROJECT_VERSION" >> "$GITHUB_OUTPUT" + - name: Verify external BOM consumption + run: bash scripts/verify-bom-consumer.sh + - name: Verify and publish the exact release reactor env: PLATFORM_ACCEPTANCE_WORK_DIRECTORY: ${{ runner.temp }}/featureframework-platform-acceptance From 0ba932c5578e21e817672f7faf9be599d185bae7 Mon Sep 17 00:00:00 2001 From: Remy Duijsens Date: Thu, 20 Aug 2026 09:37:12 +0200 Subject: [PATCH 5/5] Fix ShellCheck literal revision warning --- scripts/verify-bom-consumer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/verify-bom-consumer.sh b/scripts/verify-bom-consumer.sh index 49bbb86..e09efdc 100644 --- a/scripts/verify-bom-consumer.sh +++ b/scripts/verify-bom-consumer.sh @@ -34,7 +34,7 @@ for installed_pom in "$parent_pom" "$bom_pom"; do echo "Expected installed consumer POM was not created: $installed_pom" >&2 exit 1 fi - if grep -Fq '${revision}' "$installed_pom"; then + if grep -Fq "\${revision}" "$installed_pom"; then echo "Installed consumer POM still contains an unresolved \${revision}: $installed_pom" >&2 exit 1 fi