@@ -137,6 +137,7 @@ class Constants {
137137 ' gcsimulator' ,
138138 ' jitdiff' ,
139139 ' standalone_gc' ,
140+ ' gc_reliability_framework' ,
140141 ' illink' ] + r2rJitStressScenarios
141142
142143 def static configurationList = [' Debug' , ' Checked' , ' Release' ]
@@ -205,6 +206,14 @@ def static isJitDiff(def scenario) {
205206 return (scenario == ' jitdiff' )
206207}
207208
209+ def static isGcReliabilityFramework (def scenario ) {
210+ return (scenario == ' gc_reliability_framework' )
211+ }
212+
213+ def static scenarioNeedsPri1Build (def scenario ) {
214+ return (scenario == ' pri1' || scenario == ' pri1r2r' || scenario == ' gcstress15_pri1r2r' || scenario == ' coverage' || isGcReliabilityFramework(scenario))
215+ }
216+
208217def static setTestJobTimeOut (newJob , scenario ) {
209218 if (isGCStressRelatedTesting(scenario)) {
210219 Utilities . setJobTimeout(newJob, 4320 )
@@ -227,6 +236,9 @@ def static setTestJobTimeOut(newJob, scenario) {
227236 else if (isJitDiff(scenario)) {
228237 Utilities . setJobTimeout(newJob, 240 )
229238 }
239+ else if (isGcReliabilityFramework(scenario)) {
240+ Utilities . setJobTimeout(newJob, 1440 )
241+ }
230242 // Non-test jobs use the default timeout value.
231243}
232244
@@ -497,6 +509,11 @@ def static addNonPRTriggers(def job, def branch, def isPR, def architecture, def
497509 // addEmailPublisher(job, 'dotnetgctests@microsoft.com')
498510 Utilities . addPeriodicTrigger(job, ' @weekly' )
499511 break
512+ case ' gc_reliability_framework' :
513+ assert (os == ' Ubuntu' || os == ' Windows_NT' || os == ' OSX10.12' )
514+ assert (configuration == ' Release' || configuration == ' Checked' )
515+ // Only triggered by phrase.
516+ break
500517 case ' ilrt' :
501518 assert ! (os in bidailyCrossList)
502519 // ILASM/ILDASM roundtrip one gets a daily build, and only for release
@@ -766,6 +783,16 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
766783 Utilities . addGithubPRTriggerForBranch(job, branch, " ${ os} ${ architecture} ${ configuration} GC Simulator" , " (?i).*test\\ W+${ os} \\ W+${ configuration} \\ W+${ scenario} .*" )
767784 }
768785 break
786+ case ' standalone_gc' :
787+ if (configuration == ' Release' || configuration == ' Checked' ) {
788+ Utilities . addGithubPRTriggerForBranch(job, branch, " ${ os} ${ architecture} ${ configuration} Standalone GC" , " (?i).*test\\ W+${ os} \\ W+${ configuration} \\ W+${ scenario} .*" )
789+ }
790+ break
791+ case ' gc_reliability_framework' :
792+ if (configuration == ' Release' || configuration == ' Checked' ) {
793+ Utilities . addGithubPRTriggerForBranch(job, branch, " ${ os} ${ architecture} ${ configuration} GC Reliability Framework" , " (?i).*test\\ W+${ os} \\ W+${ configuration} \\ W+${ scenario} .*" )
794+ }
795+ break
769796 case ' minopts' :
770797 case ' forcerelocs' :
771798 case ' jitstress1' :
@@ -939,6 +966,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
939966 Utilities . addGithubPRTriggerForBranch(job, branch, " ${ os} ${ architecture} ${ configuration} Standalone GC" , " (?i).*test\\ W+${ os} \\ W+${ configuration} \\ W+${ scenario} .*" )
940967 }
941968 break
969+ case ' gc_reliability_framework' :
970+ if (configuration == ' Release' || configuration == ' Checked' ) {
971+ Utilities . addGithubPRTriggerForBranch(job, branch, " ${ os} ${ architecture} ${ configuration} GC Reliability Framework" , " (?i).*test\\ W+${ os} \\ W+${ configuration} \\ W+${ scenario} .*" )
972+ }
973+ break
942974 case ' minopts' :
943975 case ' forcerelocs' :
944976 case ' jitstress1' :
@@ -1307,7 +1339,7 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
13071339 // binaries are sent to a default directory whose name is about
13081340 // 35 characters long.
13091341
1310- else if (scenario == ' pri1 ' || scenario == ' pri1r2r ' || scenario == ' gcstress15_pri1r2r ' || scenario == ' coverage ' ) {
1342+ else if (scenarioNeedsPri1Build( scenario) ) {
13111343 buildCommands + = " set __TestIntermediateDir=int&&build.cmd ${ lowerConfiguration} ${ arch} ${ buildOpts} -priority=1"
13121344 }
13131345 else if (isLongGc(scenario)) {
@@ -1435,6 +1467,12 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
14351467 buildCommands + = " %WORKSPACE%\\ tests\\ runtest.cmd ${ runtestArguments} TestEnv ${ stepScriptLocation} "
14361468 }
14371469 }
1470+ else if (isGcReliabilityFramework(scenario)) {
1471+ buildCommands + = " tests\\ runtest.cmd ${ runtestArguments} GenerateLayoutOnly"
1472+ buildCommands + = " tests\\ scripts\\ run-gc-reliability-framework.cmd ${ arch} ${ configuration} "
1473+ Utilities . addArchival(newJob, " stdout.txt" )
1474+ Utilities . addArchival(newJob, " Logs/**" )
1475+ }
14381476 else if (architecture == ' x64' || architecture == ' x86' ) {
14391477 buildCommands + = " tests\\ runtest.cmd ${ runtestArguments} "
14401478 }
@@ -1870,6 +1908,7 @@ combinedScenarios.each { scenario ->
18701908 return
18711909 }
18721910 break
1911+ case ' gc_reliability_framework' :
18731912 case ' standalone_gc' :
18741913 if (os != ' Windows_NT' && os != ' Ubuntu' && os != ' OSX10.12' ) {
18751914 return
@@ -2120,10 +2159,12 @@ combinedScenarios.each { scenario ->
21202159 return
21212160 }
21222161 break
2162+ case ' gc_reliability_framework' :
21232163 case ' standalone_gc' :
21242164 if (configuration != ' Release' && configuration != ' Checked' ) {
21252165 return
21262166 }
2167+ break
21272168 case ' coverage' :
21282169 // We only want Ubuntu Release for coverage
21292170 if (os != ' Ubuntu' ) {
@@ -2164,7 +2205,7 @@ combinedScenarios.each { scenario ->
21642205 // so we didn't create a build only job for windows_nt specific to that stress mode. Just copy
21652206 // from the default scenario
21662207 def testBuildScenario = scenario
2167- if (testBuildScenario == ' coverage ' || testBuildScenario == ' pri1r2r ' || testBuildScenario == ' gcstress15_pri1r2r ' ) {
2208+ if (scenarioNeedsPri1Build(scenario) ) {
21682209 testBuildScenario = ' pri1'
21692210 }
21702211 else if ( testBuildScenario == ' r2r' || Constants . r2rJitStressScenarios. indexOf(testBuildScenario) != -1 || isLongGc(testBuildScenario)) {
@@ -2210,6 +2251,7 @@ combinedScenarios.each { scenario ->
22102251 def runilasmroundtripStr = ' '
22112252 def gcstressStr = ' '
22122253 def illinkStr = ' '
2254+ def layoutOnlyStr = ' '
22132255
22142256 if (scenario == ' r2r' ||
22152257 scenario == ' pri1r2r' ||
@@ -2286,6 +2328,10 @@ combinedScenarios.each { scenario ->
22862328 }
22872329 }
22882330
2331+ if (isGcReliabilityFramework(scenario)) {
2332+ layoutOnlyStr = ' --build-overlay-only'
2333+ }
2334+
22892335 def folder = getJobFolder(scenario)
22902336 def newJob = job(Utilities . getFullJobName(project, jobName, isPR, folder)) {
22912337 // Add parameters for the inputs
@@ -2438,11 +2484,29 @@ combinedScenarios.each { scenario ->
24382484 --mscorlibDir=\"\$ {WORKSPACE}/bin/Product/${ osGroup} .${ architecture} .${ configuration} \" \\
24392485 --coreFxBinDir=\"\$ {WORKSPACE}/bin/CoreFxBinDir\" \\
24402486 --limitedDumpGeneration \\
2441- ${ testEnvOpt} ${ serverGCString} ${ gcstressStr} ${ crossgenStr} ${ runcrossgentestsStr} ${ runjitstressStr} ${ runjitstressregsStr} ${ runjitmioptsStr} ${ runjitforcerelocsStr} ${ runjitdisasmStr} ${ runilasmroundtripStr} ${ illinkStr} ${ sequentialString} ${ playlistString} """ )
2487+ ${ testEnvOpt} ${ serverGCString} ${ gcstressStr} ${ crossgenStr} ${ runcrossgentestsStr} ${ runjitstressStr} \\
2488+ ${ runjitstressregsStr} ${ runjitmioptsStr} ${ runjitforcerelocsStr} ${ runjitdisasmStr} ${ runilasmroundtripStr} \\
2489+ ${ illinkStr} ${ sequentialString} ${ playlistString} ${ layoutOnlyStr} """ )
2490+
2491+ if (isGcReliabilityFramework(scenario)) {
2492+ // runtest.sh doesn't actually execute the reliability framework - do it here.
2493+ if (serverGCString != ' ' ) {
2494+ shell(" export COMPlus_gcServer=1" )
2495+ }
2496+
2497+ shell(" ./tests/scripts/run-gc-reliability-framework.sh ${ architecture} ${ configuration} " )
2498+ }
24422499 }
24432500 }
24442501 }
24452502
2503+ if (isGcReliabilityFramework(scenario))
2504+ {
2505+ // Both of these are emitted by the RF
2506+ Utilities . addArchival(newJob, " stdout.txt" )
2507+ Utilities . addArchival(newJob, " Logs/**" )
2508+ }
2509+
24462510 if (scenario == ' coverage' ) {
24472511 // Publish coverage reports
24482512 Utilities . addHtmlPublisher(newJob, ' ${WORKSPACE}/coverage/Coverage/reports' , ' Code Coverage Report' , ' coreclr.html' )
0 commit comments