@@ -10,6 +10,8 @@ plugins {
1010 id ' co.riiid.gradle' version ' 0.4.2'
1111
1212 id ' de.itemis.mps.gradle.launcher' version ' 2.5.2.+'
13+
14+ id ' org.cyclonedx.bom' version ' 2.2.0'
1315}
1416
1517ext. jbrVers = ' 17.0.11-b1207.30'
@@ -48,15 +50,42 @@ if (ciBuild) {
4850 version = " $major . $minor -SNAPSHOT"
4951}
5052
53+ group = ' org.mpsqa'
54+
5155configurations {
5256 mps
53- languageLibs
5457 // includes also junit tasks support
5558 antLib
59+
60+ plantuml { transitive = false }
61+ baseLib { transitive = false }
62+ treemap { transitive = false }
63+ jacoco { transitive = false }
5664}
5765
5866dependencies {
5967 mps " com.jetbrains:mps:$mpsVersion "
68+
69+ plantuml " net.sourceforge.plantuml:plantuml-asl:1.2023.13"
70+
71+ baseLib " org.apache.commons:commons-lang3:3.3.2"
72+ baseLib " commons-cli:commons-cli:1.5.0"
73+ baseLib " commons-io:commons-io:2.6"
74+
75+ treemap " net.sf.jtreemap:jtreemap:1.1.3"
76+ treemap " net.sf.jtreemap:ktreemap:1.1.0-atlassian-01"
77+
78+ def asmVersion = " 9.2"
79+ def jacocoVersion = " 0.8.7"
80+
81+ jacoco " org.ow2.asm:asm:$asmVersion "
82+ jacoco " org.ow2.asm:asm-commons:$asmVersion "
83+ jacoco " org.ow2.asm:asm-tree:$asmVersion "
84+ jacoco " org.jacoco:org.jacoco.agent:$jacocoVersion "
85+ jacoco " org.jacoco:org.jacoco.ant:$jacocoVersion "
86+ jacoco " org.jacoco:org.jacoco.core:$jacocoVersion "
87+ jacoco " org.jacoco:org.jacoco.report:$jacocoVersion "
88+
6089 antLib " org.apache.ant:ant-junit:1.10.15"
6190 antLib " org.jacoco:org.jacoco.ant:0.8.12"
6291}
@@ -72,6 +101,9 @@ repositories {
72101 maven {
73102 url ' https://artifacts.itemis.cloud/repository/maven-mps/'
74103 }
104+ maven {
105+ url ' https://packages.atlassian.com/maven-public/'
106+ }
75107 mavenCentral()
76108}
77109
@@ -99,6 +131,7 @@ if (project.skipResolveMps) {
99131ext. buildScriptClasspath = project. configurations. antLib
100132
101133def artifactsDir = file(" $buildDir /artifacts" )
134+ def reportsDir = file(" $buildDir /reports" )
102135def dependenciesDir = file(" $buildDir /dependencies" )
103136
104137
@@ -134,7 +167,35 @@ File scriptFile(String name) {
134167 file(" $buildDir /scripts/$name " )
135168}
136169
170+ def createResolveTask (taskName , configurationName , outputDir ) {
171+ tasks. register(taskName, Sync ) {
172+ from configurations. " ${ configurationName} "
173+ into file(outputDir)
174+ // Strip version numbers from file names
175+ rename { filename ->
176+ def ra = configurations. " ${ configurationName} " . resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
177+ String finalName
178+ if (ra. classifier != null ) {
179+ finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
180+ } else {
181+ finalName = " ${ ra.name} .${ ra.extension} "
182+ }
183+ return finalName
184+ }
185+ }
186+ }
187+
188+ // Define tasks using the reusable function
189+ createResolveTask(' resolvePlantUML' , ' plantuml' , ' code/languages/org.mpsqa.arch/solutions/org.mpsqa.arch.pluginSolution/lib' )
190+ createResolveTask(' resolveBaseLibs' , ' baseLib' , ' code/languages/org.mpsqa.base/solutions/org.mpsqa.base.lib/lib' )
191+ createResolveTask(' resolveTreeMap' , ' treemap' , ' code/languages/org.mpsqa.base/solutions/org.mpsqa.treemap.lib/lib' )
192+ createResolveTask(' resolveJacoco' , ' jacoco' , ' code/languages/org.mpsqa.testing/solutions/org.mpsqa.testcov.jacoco.rt/lib/lib' )
193+
194+ task resolveDependencies (dependsOn : [resolvePlantUML, resolveBaseLibs, resolveTreeMap, resolveJacoco])
195+
196+
137197def build_allScripts = tasks. register(' build_allScripts' , BuildLanguages ) {
198+ dependsOn resolveDependencies
138199 script scriptFile(' build_all_scripts.xml' )
139200}
140201
@@ -219,10 +280,14 @@ task build_allInOne_package(type: BuildLanguages, dependsOn: [build_allScripts])
219280 script scriptFile(" build-allInOne-package.xml" )
220281}
221282
222- task package_mpsqa (type : Zip , dependsOn : build_allInOne_package) {
283+ task package_mpsqa (type : Zip , dependsOn : [ build_allInOne_package, cyclonedxBom] ) {
223284 archiveBaseName = ' org.mpsqa'
224- from artifactsDir
225- include ' org.mpsqa.allInOne/**'
285+ from(artifactsDir) {
286+ include ' org.mpsqa.allInOne/**'
287+ }
288+ from(reportsDir) {
289+ include ' sbom.json'
290+ }
226291}
227292
228293task test_clones (type : TestLanguages , dependsOn : build_clones_languages) {
@@ -248,6 +313,15 @@ tasks.register('check_lint', MpsCheck) {
248313 pluginRoots. add(layout. dir(provider { new File (mpsHomeDir, ' plugins/mps-modelchecker' ) }))
249314}
250315
316+ cyclonedxBom {
317+ destination = reportsDir
318+ outputName = " sbom"
319+ outputFormat = " json"
320+ includeLicenseText = false
321+ schemaVersion = " 1.5"
322+ includeConfigs = [" plantuml" ," baseLib" ," treemap" ," jacoco" ]
323+ }
324+
251325check. dependsOn(tasks. withType(TestLanguages ))
252326
253327assemble. dependsOn(tasks. withType(BuildLanguages ))
@@ -280,13 +354,20 @@ publishing {
280354 artifact package_mpsqa
281355 pom. withXml {
282356 def dependenciesNode = asNode(). appendNode(' dependencies' )
283- configurations. languageLibs. resolvedConfiguration. firstLevelModuleDependencies. each {
284- def dependencyNode = dependenciesNode. appendNode(' dependency' )
285- dependencyNode. appendNode(' groupId' , it. moduleGroup)
286- dependencyNode. appendNode(' artifactId' , it. moduleName)
287- dependencyNode. appendNode(' version' , it. moduleVersion)
288- dependencyNode. appendNode(' type' , it. moduleArtifacts[0 ]. type)
357+ def languageLibs = [' plantuml' , ' baseLib' , ' treemap' , ' jacoco' ]
358+ languageLibs. each { configName ->
359+ def configuration = configurations. findByName(configName)
360+
361+ configuration. resolvedConfiguration. firstLevelModuleDependencies. each {
362+ def dependencyNode = dependenciesNode. appendNode(' dependency' )
363+ dependencyNode. appendNode(' groupId' , it. moduleGroup)
364+ dependencyNode. appendNode(' artifactId' , it. moduleName)
365+ dependencyNode. appendNode(' version' , it. moduleVersion)
366+ dependencyNode. appendNode(' type' , it. moduleArtifacts[0 ]. type)
367+ dependencyNode. appendNode(' scope' , ' provided' )
368+ }
289369 }
370+
290371 configurations. mps. resolvedConfiguration. firstLevelModuleDependencies. each {
291372 def dependencyNode = dependenciesNode. appendNode(' dependency' )
292373 dependencyNode. appendNode(' groupId' , it. moduleGroup)
0 commit comments