1
1
import de.itemis.mps.gradle.*
2
2
import de.itemis.mps.gradle.tasks.*
3
3
import de.itemis.mps.gradle.downloadJBR.DownloadJbrForPlatform
4
+ import groovy.transform.TupleConstructor
4
5
import groovy.xml.XmlSlurper
5
6
import java.time.LocalDate
6
7
import java.time.format.DateTimeFormatter
@@ -94,17 +95,24 @@ ext.snapshotRepository = 'https://artifacts.itemis.cloud/repository/maven-mps-sn
94
95
ext. publishingRepository = version. toString(). endsWith(" -SNAPSHOT" ) ? snapshotRepository : releaseRepository
95
96
96
97
98
+ def buildDirPath (pathUnderBuildDir ) {
99
+ project. layout. buildDirectory. dir(pathUnderBuildDir). get(). asFile
100
+ }
97
101
98
102
// 'artifacts' is used in the generated ant scripts as build output directory
99
- ext. artifactsDir = new File (buildDir, ' artifacts' )
103
+ ext. artifactsDir = buildDirPath(' artifacts' )
104
+ ext. reportsDir = buildDirPath(' reports' )
105
+
106
+ wrapper {
107
+ gradleVersion ' 8.13'
108
+ distributionType Wrapper.DistributionType . ALL
109
+ }
100
110
101
111
configurations {
102
112
mps
103
113
rerunMigrationsBackend
104
114
languageLibs
105
115
junitAnt
106
- pcollections // Synced to org.iets3.core.expr.base.collections.stubs/lib
107
- bigMath // Synced to org.iets3.core.expr.math.interpreter/lib
108
116
}
109
117
110
118
dependencies {
@@ -115,8 +123,62 @@ dependencies {
115
123
languageLibs " org.mpsqa:all-in-one:$mpsQAVersion "
116
124
languageLibs " com.mbeddr:platform:$mbeddrVersion "
117
125
junitAnt ' org.apache.ant:ant-junit:1.10.15'
118
- pcollections ' org.pcollections:pcollections:4.0.2'
119
- bigMath ' ch.obermuhlner:big-math:2.3.2'
126
+ }
127
+
128
+ @TupleConstructor
129
+ class BundledDep {
130
+ String name
131
+ List<String > entries
132
+ String libSolutionName
133
+ Closure configClosure = { transitive = false }
134
+ // in case a legacy dependency has a broken artifact name, e.g. w/o extension
135
+ String jarNameOverride
136
+ String getConfigName () {
137
+ name + ' _bundled'
138
+ }
139
+ String getResolveTaskName () {
140
+ ' resolve_' + this . configName
141
+ }
142
+ BundledDep overrideArtifactName (String artifactName ) {
143
+ this . jarNameOverride = artifactName
144
+ this
145
+ }
146
+ }
147
+
148
+ def bundledDeps = [
149
+ new BundledDep (' pcollections' , [' org.pcollections:pcollections:4.0.2' ], ' org.iets3.core.expr.base.collections.stubs' ),
150
+ new BundledDep (' bigMath' , [' ch.obermuhlner:big-math:2.3.2' ], ' org.iets3.core.expr.math.interpreter' ),
151
+ new BundledDep (' functionalJava' , [' org.functionaljava:functionaljava:5.0' ], ' org.iets3.core.expr.genjava.functionalJava' ),
152
+ new BundledDep (' cpsSuite' , [' io.takari.junit:takari-cpsuite:1.2.7' ], ' org.iets3.opensource.build.gentests.rt' ). overrideArtifactName(' takari-cpsuite.jar' )
153
+ ]
154
+
155
+ bundledDeps. each { dep ->
156
+ configurations {
157
+ create(dep. configName)
158
+ }
159
+ dependencies {
160
+ dep. entries. each {entry ->
161
+ add(dep. configName, entry, dep. configClosure)
162
+ }
163
+ }
164
+ tasks. create(dep. resolveTaskName, Sync . class) {
165
+ from configurations. getByName(dep. configName)
166
+ into file(" code/languages/org.iets3.opensource/solutions/${ dep.libSolutionName} /lib" )
167
+
168
+ // Strip version numbers from file names
169
+ rename { filename ->
170
+ def ra = configurations. getByName(dep. configName). resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
171
+ String finalName
172
+ if (dep. jarNameOverride != null ) {
173
+ finalName = dep. jarNameOverride
174
+ } else if (ra. classifier != null ) {
175
+ finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
176
+ } else {
177
+ finalName = " ${ ra.name} .${ ra.extension} "
178
+ }
179
+ return finalName
180
+ }
181
+ }
120
182
}
121
183
122
184
@@ -135,41 +197,8 @@ task resolveLanguageLibs(type: Sync) {
135
197
into " $buildDir /dependencies"
136
198
}
137
199
138
- task resolvePcollections (type : Sync ) {
139
- from configurations. pcollections
140
- into file(' code/languages/org.iets3.opensource/solutions/org.iets3.core.expr.base.collections.stubs/lib' )
141
-
142
- // Strip version numbers from file names
143
- rename { filename ->
144
- def ra = configurations. pcollections. resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
145
- String finalName
146
- if (ra. classifier != null ) {
147
- finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
148
- } else {
149
- finalName = " ${ ra.name} .${ ra.extension} "
150
- }
151
- return finalName
152
- }
153
- }
154
-
155
- task resolveBigMath (type : Sync ) {
156
- from configurations. bigMath
157
- into file(' code/languages/org.iets3.opensource/solutions/org.iets3.core.expr.math.interpreter/lib' )
158
-
159
- // Strip version numbers from file names
160
- rename { filename ->
161
- def ra = configurations. bigMath. resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
162
- String finalName
163
- if (ra. classifier != null ) {
164
- finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
165
- } else {
166
- finalName = " ${ ra.name} .${ ra.extension} "
167
- }
168
- return finalName
169
- }
170
- }
171
-
172
- task resolveDependencies (dependsOn : [' downloadJbr' , resolveMps, resolveLanguageLibs, resolvePcollections, resolveBigMath])
200
+ task resolveDependencies (dependsOn : [' downloadJbr' , resolveMps, resolveLanguageLibs])
201
+ resolveDependencies. dependsOn << bundledDeps. collect {it. resolveTaskName }
173
202
174
203
ext. mpsHomeDir = resolveMps. destinationDir
175
204
@@ -318,10 +347,14 @@ afterEvaluate { project ->
318
347
}
319
348
320
349
321
- task packageLanguages (type : Zip , dependsOn : buildLanguages) {
350
+ task packageLanguages (type : Zip , dependsOn : [ buildLanguages, cyclonedxBom] ) {
322
351
archiveBaseName = ' org.iets3.opensource'
323
- from artifactsDir
324
- include ' org.iets3.opensource/**'
352
+ from(artifactsDir) {
353
+ include ' org.iets3.opensource/**'
354
+ }
355
+ from(reportsDir) {
356
+ include ' sbom.json'
357
+ }
325
358
}
326
359
327
360
task packageTests (type : Zip , dependsOn : buildAndRunTests) {
@@ -539,15 +572,11 @@ tasks.named('githubRelease').configure {
539
572
540
573
cyclonedxBom {
541
574
// SBOM destination directory
542
- destination = file( " build/reports " )
575
+ destination = reportsDir
543
576
// The file name for the generated SBOMs (before the file format suffix)
544
577
outputName = " sbom"
545
578
// The file format generated, can be xml, json or all for generating both
546
579
outputFormat = " json"
547
580
// Don't include license texts in generated SBOMs
548
581
includeLicenseText = false
549
582
}
550
-
551
- assemble {
552
- dependsOn(' cyclonedxBom' )
553
- }
0 commit comments