@@ -2,6 +2,7 @@ import de.itemis.mps.gradle.*
22import de.itemis.mps.gradle.tasks.MpsMigrate
33import de.itemis.mps.gradle.tasks.Remigrate
44import de.itemis.mps.gradle.downloadJBR.DownloadJbrForPlatform
5+ import groovy.transform.TupleConstructor
56import groovy.xml.XmlSlurper
67import java.time.LocalDate
78import java.time.format.DateTimeFormatter
@@ -20,7 +21,7 @@ plugins {
2021 id ' de.itemis.mps.gradle.common' version ' 1.29.+'
2122 id ' de.itemis.mps.gradle.launcher' version ' 2.5.2.+'
2223 id " com.github.breadmoirai.github-release" version " 2.4.1"
23- id " org.cyclonedx.bom" version " 1.8.2 "
24+ id " org.cyclonedx.bom" version " 2.2.0 "
2425}
2526
2627ext. dependencyRepositories = [
@@ -115,13 +116,16 @@ ext.snapshotRepository = 'https://artifacts.itemis.cloud/repository/maven-mps-sn
115116ext. publishingRepository = version. toString(). endsWith(" -SNAPSHOT" ) ? snapshotRepository : releaseRepository
116117
117118
119+ def buildDirPath (pathUnderBuildDir ) {
120+ project. layout. buildDirectory. dir(pathUnderBuildDir). get(). asFile
121+ }
118122
119123// 'artifacts' is used in the generated ant scripts as build output directory
120- ext. artifactsDir = new File (buildDir, ' artifacts' )
121-
124+ ext. artifactsDir = buildDirPath( ' artifacts' )
125+ ext . reportsDir = buildDirPath( ' reports ' )
122126
123127wrapper {
124- gradleVersion ' 8.0.2 '
128+ gradleVersion ' 8.13 '
125129 distributionType Wrapper.DistributionType . ALL
126130}
127131
@@ -130,8 +134,6 @@ configurations {
130134 rerunMigrationsBackend
131135 languageLibs
132136 junitAnt
133- pcollections // Synced to org.iets3.core.expr.base.collections.stubs/lib
134- bigMath // Synced to org.iets3.core.expr.math.interpreter/lib
135137}
136138
137139dependencies {
@@ -140,8 +142,62 @@ dependencies {
140142 languageLibs " org.mpsqa:all-in-one:$mpsQAVersion "
141143 languageLibs " com.mbeddr:platform:$mbeddrVersionSelector "
142144 junitAnt ' org.apache.ant:ant-junit:1.10.6'
143- pcollections ' org.pcollections:pcollections:4.0.1'
144- bigMath ' ch.obermuhlner:big-math:2.3.2'
145+ }
146+
147+ @TupleConstructor
148+ class BundledDep {
149+ String name
150+ List<String > entries
151+ String libSolutionName
152+ Closure configClosure = { transitive = false }
153+ // in case a legacy dependency has a broken artifact name, e.g. w/o extension
154+ String jarNameOverride
155+ String getConfigName () {
156+ name + ' _bundled'
157+ }
158+ String getResolveTaskName () {
159+ ' resolve_' + this . configName
160+ }
161+ BundledDep overrideArtifactName (String artifactName ) {
162+ this . jarNameOverride = artifactName
163+ this
164+ }
165+ }
166+
167+ def bundledDeps = [
168+ new BundledDep (' pcollections' , [' org.pcollections:pcollections:4.0.1' ], ' org.iets3.core.expr.base.collections.stubs' ),
169+ new BundledDep (' bigMath' , [' ch.obermuhlner:big-math:2.3.2' ], ' org.iets3.core.expr.math.interpreter' ),
170+ new BundledDep (' functionalJava' , [' org.functionaljava:functionaljava:4.8.1' ], ' org.iets3.core.expr.genjava.functionalJava' ),
171+ new BundledDep (' cpsSuite' , [' io.takari.junit:takari-cpsuite:1.2.7' ], ' org.iets3.opensource.build.gentests.rt' ). overrideArtifactName(' takari-cpsuite.jar' )
172+ ]
173+
174+ bundledDeps. each { dep ->
175+ configurations {
176+ create(dep. configName)
177+ }
178+ dependencies {
179+ dep. entries. each {entry ->
180+ add(dep. configName, entry, dep. configClosure)
181+ }
182+ }
183+ tasks. create(dep. resolveTaskName, Sync . class) {
184+ from configurations. getByName(dep. configName)
185+ into file(" code/languages/org.iets3.opensource/solutions/${ dep.libSolutionName} /lib" )
186+
187+ // Strip version numbers from file names
188+ rename { filename ->
189+ def ra = configurations. getByName(dep. configName). resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
190+ String finalName
191+ if (dep. jarNameOverride != null ) {
192+ finalName = dep. jarNameOverride
193+ } else if (ra. classifier != null ) {
194+ finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
195+ } else {
196+ finalName = " ${ ra.name} .${ ra.extension} "
197+ }
198+ return finalName
199+ }
200+ }
145201}
146202
147203
@@ -160,41 +216,8 @@ task resolveLanguageLibs(type: Sync) {
160216 into " $buildDir /dependencies"
161217}
162218
163- task resolvePcollections (type : Sync ) {
164- from configurations. pcollections
165- into file(' code/languages/org.iets3.opensource/solutions/org.iets3.core.expr.base.collections.stubs/lib' )
166-
167- // Strip version numbers from file names
168- rename { filename ->
169- def ra = configurations. pcollections. resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
170- String finalName
171- if (ra. classifier != null ) {
172- finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
173- } else {
174- finalName = " ${ ra.name} .${ ra.extension} "
175- }
176- return finalName
177- }
178- }
179-
180- task resolveBigMath (type : Sync ) {
181- from configurations. bigMath
182- into file(' code/languages/org.iets3.opensource/solutions/org.iets3.core.expr.math.interpreter/lib' )
183-
184- // Strip version numbers from file names
185- rename { filename ->
186- def ra = configurations. bigMath. resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
187- String finalName
188- if (ra. classifier != null ) {
189- finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
190- } else {
191- finalName = " ${ ra.name} .${ ra.extension} "
192- }
193- return finalName
194- }
195- }
196-
197- task resolveDependencies (dependsOn : [' downloadJbr' , resolveMps, resolveLanguageLibs, resolvePcollections, resolveBigMath])
219+ task resolveDependencies (dependsOn : [' downloadJbr' , resolveMps, resolveLanguageLibs])
220+ resolveDependencies. dependsOn << bundledDeps. collect {it. resolveTaskName }
198221
199222ext. mpsHomeDir = resolveMps. destinationDir
200223
@@ -344,10 +367,14 @@ checkmodels {
344367 dependsOn(resolveMps)
345368}
346369
347- task packageLanguages (type : Zip , dependsOn : buildLanguages) {
370+ task packageLanguages (type : Zip , dependsOn : [ buildLanguages, cyclonedxBom] ) {
348371 archiveBaseName = ' org.iets3.opensource'
349- from artifactsDir
350- include ' org.iets3.opensource/**'
372+ from(artifactsDir) {
373+ include ' org.iets3.opensource/**'
374+ }
375+ from(reportsDir) {
376+ include ' sbom.json'
377+ }
351378}
352379
353380task packageTests (type : Zip , dependsOn : buildAndRunTests) {
@@ -565,15 +592,11 @@ tasks.named('githubRelease').configure {
565592
566593cyclonedxBom {
567594 // SBOM destination directory
568- destination = file( " build/reports " )
595+ destination = reportsDir
569596 // The file name for the generated SBOMs (before the file format suffix)
570597 outputName = " sbom"
571598 // The file format generated, can be xml, json or all for generating both
572599 outputFormat = " json"
573600 // Don't include license texts in generated SBOMs
574601 includeLicenseText = false
575602}
576-
577- assemble {
578- dependsOn(' cyclonedxBom' )
579- }
0 commit comments