Files
spring-framework/gradle/build-scan-user-data.gradle
Andy Wilkinson d0adadf3ca Capture maxParallelForks of Test tasks in build scans
The parallel forks configuration of Test tasks can have a big impact
on their execution time. This commit updates the build can
configuration to capture each Test task's maxParallelForks
configuration as custom values in the build scan. This will make this
data available when comparing scans which will be useful as we
experiment with different parallel fork settings to reduce the
build's overall execution time.

Closes gh-23691
2019-09-24 18:25:24 +02:00

91 lines
1.9 KiB
Groovy

tagOs()
tagIde()
tagCiOrLocal()
addCiMetadata()
addGitMetadata()
addTestTaskMetadata()
void tagOs() {
buildScan.tag System.getProperty('os.name')
}
void tagIde() {
if (System.getProperty('idea.version')) {
buildScan.tag 'IntelliJ IDEA'
} else if (System.getProperty('eclipse.buildId')) {
buildScan.tag 'Eclipse'
}
}
void tagCiOrLocal() {
buildScan.tag(isCi() ? 'CI' : 'LOCAL')
}
void addGitMetadata() {
buildScan.background {
def gitCommitId = execAndGetStdout('git', 'rev-parse', '--short=8', '--verify', 'HEAD')
def gitBranchName = execAndGetStdout('git', 'rev-parse', '--abbrev-ref', 'HEAD')
def gitStatus = execAndGetStdout('git', 'status', '--porcelain')
if(gitCommitId) {
def commitIdLabel = 'Git Commit ID'
value commitIdLabel, gitCommitId
link 'Git commit build scans', customValueSearchUrl([(commitIdLabel): gitCommitId])
}
if (gitBranchName) {
tag gitBranchName
value 'Git branch', gitBranchName
}
if (gitStatus) {
tag 'dirty'
value 'Git status', gitStatus
}
}
}
void addCiMetadata() {
def ciBuild = 'CI BUILD'
if (isBamboo()) {
buildScan.link ciBuild, System.getenv('bamboo_resultsUrl')
}
}
void addTestTaskMetadata() {
allprojects {
tasks.withType(Test) { test ->
doFirst {
buildScan.value "Test#maxParallelForks[${test.path}]", test.maxParallelForks.toString()
}
}
}
}
boolean isCi() {
isBamboo()
}
boolean isBamboo() {
System.getenv('bamboo_resultsUrl')
}
String execAndGetStdout(String... args) {
def stdout = new ByteArrayOutputStream()
exec {
commandLine(args)
standardOutput = stdout
}
return stdout.toString().trim()
}
String customValueSearchUrl(Map<String, String> search) {
def query = search.collect { name, value ->
"search.names=${encodeURL(name)}&search.values=${encodeURL(value)}"
}.join('&')
"$buildScan.server/scans?$query"
}
String encodeURL(String url) {
URLEncoder.encode(url, 'UTF-8')
}