Skip to content

Commit 8904585

Browse files
authored
Include usvm via GitHub packages (#2687)
* Include usvm via GitHub packages * Improve gradle script for utbot-junit-contest
1 parent 26d9901 commit 8904585

File tree

4 files changed

+113
-22
lines changed

4 files changed

+113
-22
lines changed

gradle.properties

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,19 @@ commonsIOVersion=2.11.0
102102
javaxVersion=2.2
103103
jakartaVersion=3.1.0
104104
jacoDbVersion=1.3.0
105+
usvmVersion=1.0.0-competition
105106

106107
# use latest Java 8 compaitable Spring and Spring Boot versions
107108
springVersion=5.3.28
108109
springBootVersion=2.7.13
109110
springSecurityVersion=5.8.5
110111

112+
# Put your GitHub username here to use utbot-junit-contest with usvm
113+
githubActor=<github_actor>
114+
# Use your GitHub token generated here -- https://github.com/settings/tokens/new?description=USVM&scopes=read:packages
115+
# Keep `read:packages` checkbox selected
116+
githubToken=<github token>
117+
111118
# configuration for build server
112119
#
113120
# the following options are passed to gradle command explicitly (see appropriate workflow):

settings.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,3 @@ if (projectType == ultimateEdition) {
9393
include("utbot-light")
9494

9595
//include("utbot-intellij-main")
96-
97-
// TODO usvm-sbft-merge: add if here if we want merge contest it into main
98-
includeBuild("../usvm")

utbot-analytics/build.gradle

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,27 @@ processResources {
4545
}
4646
}
4747

48-
jar {
49-
dependsOn classes
50-
manifest {
51-
attributes 'Main-Class': 'org.utbot.QualityAnalysisKt'
52-
}
53-
54-
dependsOn configurations.runtimeClasspath
55-
from {
56-
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
57-
}
58-
59-
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
60-
zip64 = true
61-
}
48+
// TODO if you need utbot-analytics fat jar, use shadow jar to create a SEPARATE task for a fat jar.
49+
// Do not use main jar for a fat jar, because it breaks Gradle conflict resolution, here's how:
50+
// 1. utbot-analytics depends on library A version 1.0 (and adds it to own main jar)
51+
// 2. utbot-junit-contest depends on utbot-analytics and library A version 1.1
52+
// 3. Both library A version 1.0 and version 1.1 end up on the classpath and it's a matter of chance which one is earlier
53+
// If utbot-analytics were to only declare its dependency on library A version 1.0 and not force it by adding it to a
54+
// main jar, then Gradle would be able to recognize the conflict of library A version 1.0 and version 1.1 and resolve
55+
// it according to a conflict resolution strategy, which by default picks the latest version, which works in most cases.
56+
// But if you put library A version 1.0 into some fat jar, Gradle will no longer be able to exclude it from the fat jar
57+
// in favor of a newer version when it needs to resolve dependency conflicts.
58+
//jar {
59+
// dependsOn classes
60+
// manifest {
61+
// attributes 'Main-Class': 'org.utbot.QualityAnalysisKt'
62+
// }
63+
//
64+
// dependsOn configurations.runtimeClasspath
65+
// from {
66+
// configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
67+
// }
68+
//
69+
// duplicatesStrategy = DuplicatesStrategy.EXCLUDE
70+
// zip64 = true
71+
//}

utbot-junit-contest/build.gradle

Lines changed: 82 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,29 @@ plugins {
33
}
44
apply plugin: 'jacoco'
55

6+
repositories {
7+
mavenCentral()
8+
maven { url 'https://jitpack.io' }
9+
maven {
10+
url = uri('https://maven.pkg.github.com/UnitTestBot/usvm')
11+
credentials {
12+
username = project.githubActor // System.getenv("GITHUB_ACTOR")
13+
password = project.githubToken // System.getenv("GITHUB_TOKEN")
14+
}
15+
}
16+
}
17+
618
configurations {
719
fetchInstrumentationJar
20+
approximations
21+
usvmApproximationsApi
22+
usvmInstrumentationCollector
23+
usvmInstrumentationRunner
824
}
925

26+
def approximationsRepo = "com.github.UnitTestBot.java-stdlib-approximations"
27+
def approximationsVersion = "53ceeb23ea"
28+
1029
compileJava {
1130
options.compilerArgs << '-XDignore.symbol.file'
1231
}
@@ -44,7 +63,10 @@ sourceSets {
4463

4564
test {
4665
useJUnit()
47-
jvmArgs =[
66+
if (JavaVersion.current() < JavaVersion.VERSION_1_9) {
67+
jvmArgs = []
68+
} else {
69+
jvmArgs = [
4870
"--add-opens", "java.base/java.util.concurrent.atomic=ALL-UNNAMED",
4971
"--add-opens", "java.base/java.lang.invoke=ALL-UNNAMED",
5072
"--add-opens", "java.base/java.util.concurrent=ALL-UNNAMED",
@@ -95,7 +117,8 @@ test {
95117
"--add-opens", "java.base/jdk.internal.util.xml.impl=ALL-UNNAMED",
96118
"--add-opens", "java.base/jdk.internal.vm=ALL-UNNAMED",
97119
"--add-opens", "java.base/jdk.internal.vm.annotation=ALL-UNNAMED"
98-
]
120+
]
121+
}
99122
finalizedBy jacocoTestReport
100123
}
101124

@@ -136,16 +159,19 @@ dependencies {
136159
implementation group: 'io.github.microutils', name: 'kotlin-logging', version: kotlinLoggingVersion
137160
implementation group: 'org.jsoup', name: 'jsoup', version: '1.6.2'
138161
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1'
162+
implementation group: 'com.google.guava', name: 'guava', version: guavaVersion
139163
// need for tests
140164
implementation group: 'org.mockito', name: 'mockito-core', version: mockitoVersion
141165
implementation group: 'org.mockito', name: 'mockito-inline', version: mockitoInlineVersion
142166
implementation 'junit:junit:4.13.2'
143167

144168
implementation "org.burningwave:core:12.62.7"
145169

146-
implementation('org.usvm:usvm-core')
147-
implementation('org.usvm:usvm-jvm')
148-
implementation('org.usvm:usvm-jvm-instrumentation')
170+
implementation group: "org.usvm", name: "usvm-core", version: usvmVersion
171+
implementation group: "org.usvm", name: "usvm-jvm", version: usvmVersion
172+
implementation group: "org.usvm", name: "usvm-jvm-api", version: usvmVersion
173+
implementation group: "org.usvm", name: "usvm-jvm-instrumentation", version: usvmVersion
174+
implementation group: "org.usvm", name: "usvm-jvm-instrumentation-collectors", version: usvmVersion
149175

150176
implementation group: "org.jacodb", name: "jacodb-core", version: jacoDbVersion
151177
implementation group: "org.jacodb", name: "jacodb-analysis", version: jacoDbVersion
@@ -160,6 +186,12 @@ dependencies {
160186
testImplementation files('src/main/resources/evosuite/evosuite-standalone-runtime-1.2.0.jar')
161187

162188
fetchInstrumentationJar project(path: ':utbot-instrumentation', configuration: 'instrumentationArchive')
189+
190+
approximations "$approximationsRepo:approximations:$approximationsVersion"
191+
usvmApproximationsApi "org.usvm:usvm-jvm-api:$usvmVersion"
192+
usvmInstrumentationCollector "org.usvm:usvm-jvm-instrumentation-collectors:$usvmVersion"
193+
usvmInstrumentationRunner "org.usvm:usvm-jvm-instrumentation:$usvmVersion"
194+
usvmInstrumentationRunner "org.usvm:usvm-jvm-instrumentation-collectors:$usvmVersion"
163195
}
164196

165197
processResources {
@@ -214,3 +246,48 @@ task monitoringJar(type: Jar) {
214246

215247
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
216248
}
249+
250+
// TODO usvm-sbft-saloed: replace with runner from usvm (unavailable due to huge jar size)
251+
task usvmInstrumentationRunnerJar(type: Jar) {
252+
archiveBaseName = "usvm-instrumentation-runner"
253+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
254+
manifest {
255+
attributes(
256+
"Main-Class": "org.usvm.instrumentation.rd.InstrumentedProcessKt",
257+
"Premain-Class": "org.usvm.instrumentation.agent.Agent",
258+
"Can-Retransform-Classes": "true",
259+
"Can-Redefine-Classes": "true"
260+
)
261+
}
262+
263+
from {
264+
configurations.usvmInstrumentationRunner.collect {
265+
it.isDirectory() ? it : zipTree(it)
266+
}
267+
}
268+
}
269+
270+
task run(type: JavaExec) {
271+
mainClass.set("org.utbot.contest.ContestEstimatorKt")
272+
classpath = sourceSets.main.runtimeClasspath
273+
workingDir = project.rootProject.projectDir
274+
275+
def usvmApproximationJarPath = configurations.approximations.resolvedConfiguration.files.find()
276+
def usvmApproximationApiJarPath = configurations.usvmApproximationsApi.resolvedConfiguration.files.find()
277+
environment "usvm.jvm.api.jar.path", usvmApproximationApiJarPath.absolutePath
278+
environment "usvm.jvm.approximations.jar.path", usvmApproximationJarPath.absolutePath
279+
280+
def usvmInstrumentationCollectorJarPath = configurations.usvmInstrumentationCollector.resolvedConfiguration.files.find()
281+
environment "usvm-jvm-collectors-jar", usvmInstrumentationCollectorJarPath.absolutePath
282+
283+
dependsOn(usvmInstrumentationRunnerJar)
284+
environment "usvm-jvm-instrumentation-jar", usvmInstrumentationRunnerJar.outputs.files.singleFile
285+
286+
// "JAVA_HOME" specifies Java path for instrumented process and JacoDB,
287+
// while `System.getProperty('java.home')` is Java used by this process.
288+
// We want both of them to be the same and we also need JDK (not JRE), since we use `javac` to compile tests.
289+
def javaHome = System.getProperty('java.home')
290+
def jreSuffix = "${File.separatorChar}jre"
291+
if (javaHome.endsWith(jreSuffix)) javaHome = javaHome.dropRight(jreSuffix.length())
292+
environment "JAVA_HOME", javaHome
293+
}

0 commit comments

Comments
 (0)