summaryrefslogtreecommitdiff
path: root/netci.groovy
diff options
context:
space:
mode:
authorSean Gillespie <segilles@microsoft.com>2016-03-11 15:48:56 -0800
committerSean Gillespie <segilles@microsoft.com>2016-04-11 11:47:48 -0700
commit57246c0812e94e0ad98cb313d2d97ba1a458afb8 (patch)
tree260e5bf0a11da114357fb35e5941c53e70cb326b /netci.groovy
parent2eb214ee49e3474ec64aad04ac673f7f18379c95 (diff)
downloadcoreclr-57246c0812e94e0ad98cb313d2d97ba1a458afb8.tar.gz
coreclr-57246c0812e94e0ad98cb313d2d97ba1a458afb8.tar.bz2
coreclr-57246c0812e94e0ad98cb313d2d97ba1a458afb8.zip
Create Long-running GC test job for the CI
Diffstat (limited to 'netci.groovy')
-rwxr-xr-xnetci.groovy75
1 files changed, 71 insertions, 4 deletions
diff --git a/netci.groovy b/netci.groovy
index 53295e8bb3..6889de12d6 100755
--- a/netci.groovy
+++ b/netci.groovy
@@ -66,7 +66,7 @@ class Constants {
'gcstress0xc_minopts_heapverify1' : ['COMPlus_GCStress' : '0xC', 'COMPlus_JITMinOpts' : '1', 'COMPlus_HeapVerify' : '1']
]
// This is the basic set of scenarios
- def static basicScenarios = ['default', 'pri1', 'ilrt', 'r2r', 'pri1r2r', 'gcstress15_pri1r2r']
+ def static basicScenarios = ['default', 'pri1', 'ilrt', 'r2r', 'pri1r2r', 'gcstress15_pri1r2r', 'longgc']
// This is the set of configurations
def static configurationList = ['Debug', 'Checked', 'Release']
// This is the set of architectures
@@ -348,6 +348,9 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
}
}
break
+ case 'longgc':
+ // long GC jobs are triggered by phrase only.
+ break
case 'ilrt':
assert !(os in bidailyCrossList)
// ILASM/ILDASM roundtrip one gets a daily build, and only for release
@@ -479,6 +482,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GCStress 15 R2R pri1 Build & Test", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
}
break
+ case 'longgc':
+ if (configuration == 'Release' || configuration == 'Checked') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Long-Running GC Build & Test", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+ }
+ break
case 'minopts':
assert (os == 'Windows_NT') || (os in Constants.crossList)
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test (Jit - MinOpts)",
@@ -636,6 +644,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GCStress 15 R2R pri1 Build & Test", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
}
break
+ case 'longgc':
+ if (configuration == 'Release' || configuration == 'Checked') {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Long-Running GC Build & Test", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+ }
+ break
case 'minopts':
assert (os == 'Windows_NT') || (os in Constants.crossList)
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test (Jit - MinOpts)",
@@ -816,6 +829,12 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GCStress 15 R2R pri1 Build & Test", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")
}
}
+ } else if (scenario == 'longgc') {
+ if (os == 'Windows_NT'){
+ if (configuration == 'Release' || configuration == 'Checked'){
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Long-Running GC Build & Test", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")
+ }
+ }
}
break
default:
@@ -950,6 +969,16 @@ combinedScenarios.each { scenario ->
return
}
break
+ case 'longgc':
+ if (os != 'Windows_NT' && !(os in Constants.crossList)) {
+ return
+ }
+
+ // only x64 or x86 for now
+ if (architecture != 'x64' && architecture != 'x86') {
+ return
+ }
+ break
case 'default':
// Nothing skipped
break
@@ -1014,6 +1043,9 @@ combinedScenarios.each { scenario ->
//Build pri1 R2R tests with GC stress level 15
buildCommands += "build.cmd ${lowerConfiguration} ${architecture} docrossgen skiptests"
buildCommands += "set __TestIntermediateDir=int&&tests\\buildtest.cmd ${lowerConfiguration} ${architecture} crossgen Priority 1 gcstresslevel 15"
+ } else if (scenario == 'longgc') {
+ buildCommands += "build.cmd ${lowerConfiguration} ${architecture} skiptests"
+ buildCommands += "set __TestIntermediateDir=int&&tests\\buildtest.cmd ${lowerConfiguration} ${architecture} longgctests"
}
else {
println("Unknown scenario: ${scenario}")
@@ -1053,10 +1085,18 @@ combinedScenarios.each { scenario ->
}
}
else if (architecture == 'x64') {
- buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} ${crossgenStr}"
+ if (scenario == 'longgc') {
+ buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} longgctests sequential Exclude0"
+ } else {
+ buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture}"
+ }
}
else if (architecture == 'x86') {
- buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} ${crossgenStr} Exclude0 x86_legacy_backend_issues.targets"
+ if (scenario == 'longgc') {
+ buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} longgctests sequential Exclude0"
+ } else {
+ buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} Exclude0 x86_legacy_backend_issues.targets"
+ }
}
}
@@ -1295,6 +1335,12 @@ combinedScenarios.each { scenario ->
return
}
break
+ case 'longgc':
+ //Skip configs that aren't Checked or Release (so just Debug, for now)
+ if (configuration != 'Checked' && configuration != 'Release') {
+ return
+ }
+ break
case 'default':
// Nothing skipped
break
@@ -1324,6 +1370,15 @@ combinedScenarios.each { scenario ->
}
// Enable Server GC for Ubuntu PR builds
def serverGCString = ''
+
+ // Whether or not this test run should be run sequentially instead
+ // of in parallel. Only used for long GC tests.
+ def sequentialString = ''
+
+ // Whether or not this test run should only run failing test.
+ // Only used for long GC tests, because they are all ignored in
+ // normal test runs.
+ def runFailingString = ''
if (os == 'Ubuntu' && isPR){
serverGCString = '--useServerGC'
@@ -1334,6 +1389,18 @@ combinedScenarios.each { scenario ->
if (scenario == 'r2r' || scenario == 'pri1r2r' || scenario == 'gcstress15_pri1r2r'){
crossgenStr = '--crossgen'
}
+
+ if (scenario == 'longgc') {
+ // Long GC tests behave very poorly when they are not
+ // the only test running (many of them allocate until OOM).
+ sequentialString = 'sequential'
+
+ // Long GC tests all exist in the ignore list because
+ // they can't run during normal test runs. This is not
+ // particularly pretty but, until we get a more generalized
+ // mechanism for coming up with test playlists, it works.
+ runFailingString = '--runFailingTestsOnly'
+ }
def newJob = job(Utilities.getFullJobName(project, jobName, isPR)) {
@@ -1412,7 +1479,7 @@ combinedScenarios.each { scenario ->
--mscorlibDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
--coreFxBinDir=\"\${WORKSPACE}/bin/${osGroup}.AnyCPU.Release\" \\
--coreFxNativeBinDir=\"\${WORKSPACE}/bin/${osGroup}.${architecture}.Release\" \\
- ${testEnvOpt} ${serverGCString} ${crossgenStr}""")
+ ${testEnvOpt} ${serverGCString} ${crossgenStr} ${sequentialString} ${runFailingString}""")
}
}