Gradle plugin for the requirement tracing suite OpenFastTrace.
-
Preconditions: Java 17 and Gradle 8.6
-
Add plugin
org.itsallcode.openfasttraceto your project:plugins { id "org.itsallcode.openfasttrace" version "3.1.0" } -
Configure your project, see examples
-
Run
./gradlew traceRequirements
-
Report is written to
build/reports/tracing.txtby default.
requirementTracing { failBuild = true inputDirectories = files('custom-dir') reportFile = file('build/custom-report.txt') reportFormat = 'plain' reportVerbosity = 'failure_details' detailsSectionDisplay = 'collapse' filteredArtifactTypes = ["req", "dsn"] }You can configure the following properties:
failBuild: Fail build when tracing finds any issues (default:true)inputDirectories: Files or directories to importreportFile: Path to the report filereportFormat: Format of the reportplain- Plain Text (default)html- HTML
reportVerbosity: Report verbosityquiet- no output (in case only the return code is used)minimal- display ok or not oksummary- display only the summary, not individual specification itemsfailures- list of defect specification itemsfailure_summaries- list of summaries for defect specification itemsfailure_details- summaries and details for defect specification items (default)all- summaries and details for all specification items
detailsSectionDisplay: Initial display status of the details section in the HTML reportcollapse- hide details (default)expand- show details
filteredArtifactTypes: Use only the listed artifact types during tracing
The short tag importer allows omitting artifact type and the covered artifact type. Optionally you can add a prefix to the item name, e.g. a common module name.
requirementTracing { tags { tag { paths = fileTree(dir: 'src/').include '*.impl.*' coveredItemNamePrefix = 'prefix' tagArtifactType = 'impl' coveredItemArtifactType = 'dsn' } tag { paths = fileTree(dir: 'src/').include '*.test.*' tagArtifactType = 'utest' coveredItemArtifactType = 'dsn' } } }As a benefit the tags are much shorter and contain only the name and revision:
// [[tagname:1]]See multi-project/sub1 for a basic example.
In bigger setups you might want to share requirements between multiple projects.
Example: The Software Architecture Design project swad contains overall requirements that must be fulfilled by projects component-a and component-b.
- The
swadproject publishes its requirements as a zip fileswad-reqto a Maven repository. - Both components import these requirements and cover them in their Software Detailed Design (swdd).
- Both components publish their requirements as artefacts
component-a-reqandcomponent-b-reqto the shared Maven repository. - A regular job check that all requirements from
swadare covered by tracingswad-req,component-a-reqandcomponent-b-req.
If you want to publish requirements to a Maven repository you can use the following configuration in your build.gradle:
plugins { id 'org.itsallcode.openfasttrace' id 'maven-publish' } requirementTracing { inputDirectories = files('doc') } task requirementsZip(type: Zip, dependsOn: collectRequirements) { from collectRequirements.outputFile into '/' } publishing { publications { maven(MavenPublication) { artifact requirementsZip } } }See publish-config for a basic example.
You can import requirements from another project using the importedRequirements configuration. The requirements must be published to a repository as a zip file and can be referenced using the usual gradle dependency syntax:
repositories { maven { url "http://repo.example.com/maven2" } } requirementTracing { importedRequirements = ['com.example:swad:1.0.0@zip'] }See dependency-config for a basic example.
git clone https://github.com/itsallcode/openfasttrace-gradle.git cd openfasttrace-gradle ./gradlew check # Test report: build/reports/tests/index.htmlTo use openfasttrace from source during development:
-
Clone https://github.com/itsallcode/openfasttrace to
../openfasttrace -
Create file
gradle.propertieswith the following content:oftSourceDir = ../openfasttrace
./gradlew dependencyUpdatesGet token for OssIndex from ossindex.sonatype.org and add it to ~/.gradle/gradle.properties:
ossIndexUsername = <user> ossIndexToken = <token>Then run
./gradlew ossIndexAudit./gradlew clean sonar --info -Dsonar.token=[token]- Checkout the
mainbranch, create a new branch. - Update version number in
build.gradleandREADME.md. - Add changes in new version to
CHANGELOG.md. - Commit and push changes.
- Create a new pull request, have it reviewed and merged to
main.
- Start the release workflow
- Run command
gh workflow run release.yml --repo itsallcode/openfasttrace-gradle --ref main - or go to GitHub Actions and start the
release.ymlworkflow on branchmain.
- Update title and description of the newly created GitHub release.
- Plugin will be published at https://plugins.gradle.org/m2/org/itsallcode/openfasttrace/org.itsallcode.openfasttrace.gradle.plugin/