diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 2e9f4883c..709708d5d 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -28,7 +28,7 @@ jobs: ${{ runner.os }}-maven- - name: Run Maven Verify - run: mvn --batch-mode verify + run: ./mvnw --batch-mode verify - name: Upload Test Results (JUnit XML) if: failure() diff --git a/pom.xml b/pom.xml index a8fdd8edd..b7c9d508e 100644 --- a/pom.xml +++ b/pom.xml @@ -698,6 +698,7 @@ + serenity-bom serenity-report-resources serenity-sample-alternative-resources serenity-model @@ -739,6 +740,7 @@ all + serenity-bom serenity-report-resources serenity-sample-alternative-resources serenity-model @@ -850,6 +852,7 @@ + serenity-bom serenity-report-resources serenity-sample-alternative-resources serenity-model @@ -886,6 +889,7 @@ false + serenity-bom serenity-report-resources serenity-sample-alternative-resources serenity-model diff --git a/serenity-bom/pom.xml b/serenity-bom/pom.xml new file mode 100644 index 000000000..5d8ed3025 --- /dev/null +++ b/serenity-bom/pom.xml @@ -0,0 +1,242 @@ + + + 4.0.0 + + + net.serenity-bdd + serenity-bdd + 5.2.3-SNAPSHOT + ../pom.xml + + + serenity-bom + pom + Serenity BOM + Bill of Materials for Serenity BDD — import this POM to align all Serenity artifact versions. + + + + + ${project.groupId} + serenity-model + ${project.version} + + + ${project.groupId} + serenity-report-resources + ${project.version} + + + ${project.groupId} + serenity-sample-alternative-resources + ${project.version} + + + ${project.groupId} + serenity-reports + ${project.version} + + + ${project.groupId} + serenity-reports-configuration + ${project.version} + + + ${project.groupId} + serenity-stats + ${project.version} + + + ${project.groupId} + serenity-single-page-report + ${project.version} + + + ${project.groupId} + serenity-json-summary-report + ${project.version} + + + ${project.groupId} + serenity-navigator-report + ${project.version} + + + ${project.groupId} + serenity-core + ${project.version} + + + ${project.groupId} + serenity-screenplay + ${project.version} + + + ${project.groupId} + serenity-junit + ${project.version} + + + ${project.groupId} + serenity-junit5 + ${project.version} + + + ${project.groupId} + serenity-cucumber + ${project.version} + + + ${project.groupId} + serenity-screenplay-webdriver + ${project.version} + + + ${project.groupId} + serenity-screenplay-rest + ${project.version} + + + ${project.groupId} + serenity-screenplay-playwright + ${project.version} + + + ${project.groupId} + serenity-playwright + ${project.version} + + + ${project.groupId} + serenity-rest-assured + ${project.version} + + + ${project.groupId} + serenity-assertions + ${project.version} + + + ${project.groupId} + serenity-ensure + ${project.version} + + + ${project.groupId} + serenity-spring + ${project.version} + + + ${project.groupId} + serenity-appium + ${project.version} + + + ${project.groupId} + serenity-saucelabs + ${project.version} + + + ${project.groupId} + serenity-browserstack + ${project.version} + + + ${project.groupId} + serenity-lambdatest + ${project.version} + + + ${project.groupId} + serenity-crossbrowsertesting + ${project.version} + + + ${project.groupId} + serenity-zalenium + ${project.version} + + + ${project.groupId} + serenity-selenoid + ${project.version} + + + ${project.groupId} + serenity-bitbar + ${project.version} + + + ${project.groupId} + serenity-jira-plugin + ${project.version} + + + ${project.groupId} + serenity-jira-requirements-provider + ${project.version} + + + ${project.groupId} + serenity-maven-plugin + ${project.version} + + + ${project.groupId} + serenity-ant-task + ${project.version} + + + ${project.groupId} + serenity-cli + ${project.version} + + + ${project.groupId} + serenity-browsermob-plugin + ${project.version} + + + ${project.groupId} + serenity-shutterbug + ${project.version} + + + ${project.groupId} + serenity-tutorials + ${project.version} + + + + + + + + org.codehaus.gmavenplus + gmavenplus-plugin + + + validate-bom-completeness + validate + + execute + + + + + + + + + + default + none + + + + + + diff --git a/serenity-bom/src/test/groovy/validate-bom-completeness.groovy b/serenity-bom/src/test/groovy/validate-bom-completeness.groovy new file mode 100644 index 000000000..0313a5bc0 --- /dev/null +++ b/serenity-bom/src/test/groovy/validate-bom-completeness.groovy @@ -0,0 +1,27 @@ +// Validates that every reactor module is listed in the BOM's . + +// Modules that should NOT appear in the BOM: +// - serenity-bom: the BOM itself, not a consumable dependency +// - serenity-smoketests: internal test-only module (only in the 'experimental' profile) +// Add any additional modules that should be excluded from the check here +def excluded = ['serenity-bom', 'serenity-smoketests'] as Set + +// Collect all module names from the root pom (default modules + all profiles) +def rootPom = new groovy.xml.XmlSlurper().parse(new File(project.basedir.parentFile, 'pom.xml')) + +def allModules = [] as Set +rootPom.modules.module.each { allModules << it.text() } +rootPom.profiles.profile.modules.module.each { allModules << it.text() } + +// Collect all artifactIds managed by the BOM +def bomPom = new groovy.xml.XmlSlurper().parse(new File(project.basedir, 'pom.xml')) +def bomArtifacts = [] as Set +bomPom.dependencyManagement.dependencies.dependency.each { bomArtifacts << it.artifactId.text() } + +// Fail the build if any publishable module is missing from the BOM +def missing = (allModules - bomArtifacts - excluded).sort() + +if (missing) { + throw new RuntimeException("BOM is missing modules: ${missing}") +} +log.info("BOM completeness check passed: all ${allModules.size() - excluded.size()} modules are listed.")