@@ -2,6 +2,7 @@ import de.itemis.mps.gradle.*
2
2
import de.itemis.mps.gradle.tasks.MpsMigrate
3
3
import de.itemis.mps.gradle.tasks.Remigrate
4
4
import de.itemis.mps.gradle.downloadJBR.DownloadJbrForPlatform
5
+ import groovy.transform.TupleConstructor
5
6
import groovy.xml.XmlSlurper
6
7
import java.time.LocalDate
7
8
import java.time.format.DateTimeFormatter
@@ -20,7 +21,7 @@ plugins {
20
21
id ' de.itemis.mps.gradle.common' version ' 1.29.+'
21
22
id ' de.itemis.mps.gradle.launcher' version ' 2.5.2.+'
22
23
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 "
24
25
}
25
26
26
27
ext. dependencyRepositories = [
@@ -115,13 +116,16 @@ ext.snapshotRepository = 'https://artifacts.itemis.cloud/repository/maven-mps-sn
115
116
ext. publishingRepository = version. toString(). endsWith(" -SNAPSHOT" ) ? snapshotRepository : releaseRepository
116
117
117
118
119
+ def buildDirPath (pathUnderBuildDir ) {
120
+ project. layout. buildDirectory. dir(pathUnderBuildDir). get(). asFile
121
+ }
118
122
119
123
// '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 ' )
122
126
123
127
wrapper {
124
- gradleVersion ' 8.0.2 '
128
+ gradleVersion ' 8.13 '
125
129
distributionType Wrapper.DistributionType . ALL
126
130
}
127
131
@@ -130,8 +134,6 @@ configurations {
130
134
rerunMigrationsBackend
131
135
languageLibs
132
136
junitAnt
133
- pcollections // Synced to org.iets3.core.expr.base.collections.stubs/lib
134
- bigMath // Synced to org.iets3.core.expr.math.interpreter/lib
135
137
}
136
138
137
139
dependencies {
@@ -140,8 +142,62 @@ dependencies {
140
142
languageLibs " org.mpsqa:all-in-one:$mpsQAVersion "
141
143
languageLibs " com.mbeddr:platform:$mbeddrVersionSelector "
142
144
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
+ }
145
201
}
146
202
147
203
@@ -160,41 +216,8 @@ task resolveLanguageLibs(type: Sync) {
160
216
into " $buildDir /dependencies"
161
217
}
162
218
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 }
198
221
199
222
ext. mpsHomeDir = resolveMps. destinationDir
200
223
@@ -344,10 +367,14 @@ checkmodels {
344
367
dependsOn(resolveMps)
345
368
}
346
369
347
- task packageLanguages (type : Zip , dependsOn : buildLanguages) {
370
+ task packageLanguages (type : Zip , dependsOn : [ buildLanguages, cyclonedxBom] ) {
348
371
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
+ }
351
378
}
352
379
353
380
task packageTests (type : Zip , dependsOn : buildAndRunTests) {
@@ -565,15 +592,11 @@ tasks.named('githubRelease').configure {
565
592
566
593
cyclonedxBom {
567
594
// SBOM destination directory
568
- destination = file( " build/reports " )
595
+ destination = reportsDir
569
596
// The file name for the generated SBOMs (before the file format suffix)
570
597
outputName = " sbom"
571
598
// The file format generated, can be xml, json or all for generating both
572
599
outputFormat = " json"
573
600
// Don't include license texts in generated SBOMs
574
601
includeLicenseText = false
575
602
}
576
-
577
- assemble {
578
- dependsOn(' cyclonedxBom' )
579
- }
0 commit comments