Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/pr-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
4 changes: 4 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -698,6 +698,7 @@
</plugins>
</reporting>
<modules>
<module>serenity-bom</module>
<module>serenity-report-resources</module>
<module>serenity-sample-alternative-resources</module>
<module>serenity-model</module>
Expand Down Expand Up @@ -739,6 +740,7 @@
<profile>
<id>all</id>
<modules>
<module>serenity-bom</module>
<module>serenity-report-resources</module>
<module>serenity-sample-alternative-resources</module>
<module>serenity-model</module>
Expand Down Expand Up @@ -850,6 +852,7 @@
</plugins>
</build>
<modules>
<module>serenity-bom</module>
<module>serenity-report-resources</module>
<module>serenity-sample-alternative-resources</module>
<module>serenity-model</module>
Expand Down Expand Up @@ -886,6 +889,7 @@
<activeByDefault>false</activeByDefault>
</activation>
<modules>
<module>serenity-bom</module>
<module>serenity-report-resources</module>
<module>serenity-sample-alternative-resources</module>
<module>serenity-model</module>
Expand Down
242 changes: 242 additions & 0 deletions serenity-bom/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-bdd</artifactId>
<version>5.2.3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<artifactId>serenity-bom</artifactId>
<packaging>pom</packaging>
<name>Serenity BOM</name>
<description>Bill of Materials for Serenity BDD — import this POM to align all Serenity artifact versions.</description>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-model</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-report-resources</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-sample-alternative-resources</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-reports</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-reports-configuration</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-stats</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-single-page-report</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-json-summary-report</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-navigator-report</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-screenplay</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-junit</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-junit5</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-cucumber</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-screenplay-webdriver</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-screenplay-rest</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-screenplay-playwright</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-playwright</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-rest-assured</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-assertions</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-ensure</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-spring</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-appium</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-saucelabs</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-browserstack</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-lambdatest</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-crossbrowsertesting</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-zalenium</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-selenoid</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-bitbar</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-jira-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-jira-requirements-provider</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-maven-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-ant-task</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-cli</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-browsermob-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-shutterbug</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>serenity-tutorials</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<executions>
<execution>
<id>validate-bom-completeness</id>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<scripts>
<script>${project.basedir}/src/test/groovy/validate-bom-completeness.groovy</script>
</scripts>
</configuration>
</execution>
<!-- Disable the inherited default execution (compile/stubs/test goals)
since serenity-bom is a pure POM with no Groovy sources -->
<execution>
<id>default</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
27 changes: 27 additions & 0 deletions serenity-bom/src/test/groovy/validate-bom-completeness.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Validates that every reactor module is listed in the BOM's <dependencyManagement>.

// 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.")
Loading