Customer Value Overview
The newly introduced "Branches" and "Compatibility" plans for FirstSpirit module pipelines significantly enhance build pipeline resilience, future-proofing, and developer efficiency.
The compatibility plans offer customers a proactive, automated safeguard for maintaining long-term stability and compatibility in FirstSpirit module development. This leads to reduced maintenance overhead, fewer runtime issues, and greater agility in adopting future platform and Java upgrades.
Why compatibility plans?
The idea of compatibility plans is the early detection of breaking changes either due to Java or FirstSpirit API incompatibilities, e.g. removed classes or methods.
How do compatibility plans work?
Compatibility plans consist of multiple specifically configured build jobs, partially overwriting the build environment of a repo.
These are:
the Java language level (byte-code level), usually
the actually used LTS version (at time of writing: 17)
the upcoming LTS version (at time of writing: 21)
(only for module pipelines) along with the FirstSpirit release version, usually the latest release or latest release candidate of FirstSpirit artifacts (e.g. fs-isolated-runtime)
When will compatibility plans be executed?
once a week (weekends) scheduled on master branch
commit-triggered on any branch
How to support compatibility plans?
To benefit from this advantages you need to meet some requirements in your repositories, documented in sub sections below.
Gradle Module Pipeline (gradle-fsm)
Additionally to the compatibility check there is a specific compliance check task expected by the plan.
Expected task, named checkCompliance is part of the FirstSpirit Module Gradle Plugin version 6.5.0 and newer. Please update the plugin accordingly.
The following properties will be overwritten by the Bamboo plan, so expected to be used within the project:
firstSpirit.version
java.languageLevel
Define properties in gradle.properties, ideally between “Project configuration” and “FirstSpirit Module configuration” section:
... # Project configuration rootProjectName=your-project-name groupId=your.group.id # Java configuration java.languageLevel=17 # FirstSpirit configuration firstSpirit.version=5.2.250103 # FirstSpirit Module configuration firstSpiritModule.moduleName=your-module-name ...
Replace explicit FirstSpirit dependency version(s) in build.gradle to be read from property:
# replace version definition
fsRuntimeVersion = '5.2.250103'
# with project property
fsRuntimeVersion = project.property('firstSpirit.version')
# and define desired FirstSpirit version in gradle.properties instead
Replace Java Language Level in build.gradle to be read from property:
# replace version definition
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
options.release.set(17)
}
# with project property
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
options.release.set(project.property('java.languageLevel') as Integer)
}
# and define desired project Java Language Level in gradle.properties instead
Maven Module Pipeline (maven-fsm)
The following properties will be overwritten by the Bamboo plan, so expected to be used within the project:
firstspirit.version (all lower case due to compatibility to legacy FirstSpirit Parent POM)
maven.compiler.release
Only action required is to provide and to use firstspirit.version property.
Webforms/Formcentric Pipelines (webforms)
The following properties will be overwritten by the Bamboo plan, so expected to be used within the project:
cms.version
compile.target.jdk
Both properties are defined by underlying customization workspace. No action required.
Generic Gradle Pipeline (gradle)
The following property will be overwritten by the Bamboo plan, so expected to be used within the project:
java.languageLevel
Define the property in gradle.properties:
... # Project configuration rootProjectName=your-project-name groupId=your.group.id # Java configuration java.languageLevel=17 ...
Replace Java Language Level in build.gradle to be read from property:
# replace version definition
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
options.release.set(17)
}
# with project property
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
options.release.set(project.property('java.languageLevel') as Integer)
}
# and define desired project Java Language Level in gradle.properties instead
Generic Maven Pipeline (maven)
No specific properties to handle, only the underlying JDK may differ.
How will it look like?
Within your project in Bamboo you'll find a new plan called "Compatibility and Compliance"
This new plan contains 3 jobs.
- Two for the compatibility check. At the moment
- one for Java 17 + the current FirstSpirit release version
- one for Java 21 + the current FirstSpirit release version
- One for the compliance check
Comments
0 comments
Please sign in to leave a comment.