// the values are the environment variables
def static jitStressModeScenarios = [
'minopts' : ['COMPlus_JITMinOpts' : '1'],
+ 'tieredcompilation' : ['COMPlus_EXPERIMENTAL_TieredCompilation' : '1'],
'forcerelocs' : ['COMPlus_ForceRelocs' : '1'],
'jitstress1' : ['COMPlus_JitStress' : '1'],
'jitstress2' : ['COMPlus_JitStress' : '2'],
'jitsse2only' : ['COMPlus_EnableAVX' : '0', 'COMPlus_EnableSSE3_4' : '0'],
'corefx_baseline' : [ : ], // corefx baseline
'corefx_minopts' : ['COMPlus_JITMinOpts' : '1'],
+ 'corefx_tieredcompilation' : ['COMPlus_EXPERIMENTAL_TieredCompilation' : '1'],
'corefx_jitstress1' : ['COMPlus_JitStress' : '1'],
'corefx_jitstress2' : ['COMPlus_JitStress' : '2'],
'corefx_jitstressregs1' : ['COMPlus_JitStressRegs' : '1'],
Utilities.setMachineAffinity(job, os, 'arm64-cross-latest');
} else if ((architecture == 'arm') && (os == 'Ubuntu' || os == 'Ubuntu16.04' || os == 'Tizen')) {
Utilities.setMachineAffinity(job, 'Ubuntu', 'arm-cross-latest');
- } else {
+ } else if ((architecture == 'arm') && (os == 'Windows_NT') && options['use_arm64_build_machine'] == true) {
+ Utilities.setMachineAffinity(job, os, 'latest-arm64');
+ }else {
Utilities.setMachineAffinity(job, os, 'latest-or-auto');
}
}
Utilities.addGithubPushTrigger(job)
break
case 'arm64':
- Utilities.addGithubPushTrigger(job)
+ // We would normally want a per-push trigger, but with limited hardware we can't keep up
+ Utilities.addPeriodicTrigger(job, "H H/4 * * *")
break
default:
println("Unknown architecture: ${architecture}");
}
}
break
+
+ case 'tieredcompilation':
+ case 'corefx_tieredcompilation':
+ // No periodic jobs just yet, still testing
+ break
default:
println("Unknown scenario: ${scenario}");
addNonPRTriggers(job, branch, isPR, architecture, os, configuration, scenario, isFlowJob, isWindowsBuildOnlyJob, bidailyCrossList)
return
}
+
+ def arm64Users = [
+ 'adiaaida',
+ 'AndyAyersMS',
+ 'briansull',
+ 'BruceForstall',
+ 'CarolEidt',
+ 'cmckinsey',
+ 'erozenfeld',
+ 'jashook',
+ 'JosephTremoulet',
+ 'pgavlin',
+ 'russellhadley',
+ 'RussKeldorph',
+ 'sandreenko',
+ 'sdmaclea',
+ 'sivarv',
+ 'swaroop-sridhar',
+ 'gkhanna79',
+ 'jkotas',
+ 'markwilkie',
+ 'rahku',
+ 'ramarag',
+ 'tzwlai',
+ 'weshaggard'
+ ]
+
// Pull request builds. Generally these fall into two categories: default triggers and on-demand triggers
// We generally only have a distinct set of default triggers but a bunch of on-demand ones.
def osGroup = getOSGroup(os)
}
break
case 'minopts':
+ case 'tieredcompilation':
case 'forcerelocs':
case 'jitstress1':
case 'jitstress2':
break
case 'corefx_baseline':
case 'corefx_minopts':
+ case 'corefx_tieredcompilation':
case 'corefx_jitstress1':
case 'corefx_jitstress2':
case 'corefx_jitstressregs1':
}
break
case 'minopts':
+ case 'tieredcompilation':
case 'forcerelocs':
case 'jitstress1':
case 'jitstress2':
break
case 'corefx_baseline':
case 'corefx_minopts':
+ case 'corefx_tieredcompilation':
case 'corefx_jitstress1':
case 'corefx_jitstress2':
case 'corefx_jitstressregs1':
break
// editor brace matching: }
case 'arm': // editor brace matching: {
- assert scenario == 'default'
switch (os) {
case 'Ubuntu':
case 'Ubuntu16.04':
+ assert scenario == 'default'
if ((os == 'Ubuntu' && configuration == 'Release') || (os == 'Ubuntu16.04' && configuration == 'Debug')) {
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} Cross ${configuration} Build")
}
}
break;
case 'Windows_NT':
- if (configuration == 'Debug' || configuration == 'Release')
- {
- Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} Cross ${configuration} Build")
+ // Set up a private trigger
+ def contextString = "${os} ${architecture} Cross ${configuration}"
+ if (scenario != 'default')
+ contextString += " ${scenario}"
+ contextString += " Build"
+ // Debug builds only.
+ if (configuration != 'Debug') {
+ contextString += " and Test"
+ }
+ switch (scenario) {
+ case 'default':
+ // For now only run Debug and Release build jobs on PR Trigger. Note this is not a private trigger.
+ if (configuration == 'Debug' || configuration == 'Release')
+ {
+ Utilities.addPrivateGithubPRTriggerForBranch(job, branch, contextString,
+ "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}.*", null, arm64Users)
+ }
+ else
+ {
+ // Checked jobs will run on private trigger and run tests.
+ Utilities.addDefaultPrivateGithubPRTriggerForBranch(job, branch, contextString, null, arm64Users)
+ }
+ break
+ case 'pri1r2r':
+ case 'gcstress0x3':
+ case 'gcstress0xc':
+ // Stress jobs will will run on private trigger and run tests.
+ Utilities.addPrivateGithubPRTriggerForBranch(job, branch, contextString,
+ "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*", null, arm64Users)
+ break
}
break
default:
contextString += " and Test"
}
- def arm64Users = [
- 'adiaaida',
- 'AndyAyersMS',
- 'briansull',
- 'BruceForstall',
- 'CarolEidt',
- 'cmckinsey',
- 'erozenfeld',
- 'jashook',
- 'JosephTremoulet',
- 'pgavlin',
- 'russellhadley',
- 'RussKeldorph',
- 'sandreenko',
- 'sdmaclea',
- 'sivarv',
- 'swaroop-sridhar',
- 'gkhanna79',
- 'jkotas',
- 'markwilkie',
- 'rahku',
- 'ramarag',
- 'tzwlai',
- 'weshaggard'
- ]
-
switch (os) {
case 'Ubuntu':
case 'Ubuntu16.04':
case 'Windows_NT':
switch (scenario) {
case 'default':
+ if (isFlowJob == true) {
+ Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration}", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}.*")
+ }
+
// For now only run Debug jobs on PR Trigger.
- if (configuration != 'Debug') {
+ else if (configuration != 'Debug') {
Utilities.addPrivateGithubPRTriggerForBranch(job, branch, contextString,
"(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}.*", null, arm64Users)
}
}
break
case 'minopts':
+ case 'tieredcompilation':
case 'forcerelocs':
case 'jitstress1':
case 'jitstress2':
break
case 'corefx_baseline':
case 'corefx_minopts':
+ case 'corefx_tieredcompilation':
case 'corefx_jitstress1':
case 'corefx_jitstress2':
case 'corefx_jitstressregs1':
buildCommands += "tests\\scripts\\build_illink.cmd clone ${arch}"
}
+ // If it is a release build for windows, ensure PGO is used, else fail the build
+ if ((lowerConfiguration == 'release') && (scenario in Constants.basicScenarios) && (architecture != 'x86lb')) {
+ buildOpts += ' enforcepgo'
+ }
+
if (Constants.jitStressModeScenarios.containsKey(scenario) ||
scenario == 'default' ||
scenario == 'r2r' ||
// Archive and process (only) the test results
Utilities.addArchival(newJob, "${workspaceRelativeFxRoot}/bin/**/testResults.xml")
Utilities.addXUnitDotNETResults(newJob, "${workspaceRelativeFxRoot}/bin/**/testResults.xml")
+
+ //Archive additional build stuff to diagnose why my attempt at fault injection isn't causing CI to fail
+ Utilities.addArchival(newJob, "SetStressModes.bat", "", true, false)
+ Utilities.addArchival(newJob, "${workspaceRelativeFxRoot}/bin/testhost/**", "", true, false)
}
else {
buildCommands += "%WORKSPACE%\\tests\\runtest.cmd ${runtestArguments} TestEnv ${stepScriptLocation}"
}
break
case 'arm':
- assert (scenario == 'default')
+ def validArmWindowsScenarios = [ "default",
+ "pri1r2r",
+ "zapdisable",
+ "minopts",
+ "tieredcompilation",
+ "tailcallstress",
+ "jitstress1",
+ "jitstress2",
+ "gcstress0x3",
+ "gcstress0xc",
+ "jitstressregs1",
+ "jitstressregs2",
+ "gcstress0xc_jitstress1",
+ "gcstress0xc_jitstress2"]
+
+ assert validArmWindowsScenarios.contains(scenario)
// Set time out
setTestJobTimeOut(newJob, scenario)
// For Debug builds, we will do a P1 test build
buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture} -priority=1"
}
- else {
+ else if (lowerConfiguration == "checked") {
+
+ if ((scenario != 'gcstress0x3') && (scenario != 'gcstress0xc'))
+ {
+ // Up the timeout for arm checked testing only.
+ // Keep the longer timeout for gcstress.
+ Utilities.setJobTimeout(newJob, 240)
+ }
+
+ def machineAffinityOptions = ['use_arm64_build_machine' : true]
+ setMachineAffinity(newJob, os, architecture, machineAffinityOptions)
+ // For checked runs we will also run testing.
+ buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture} -priority=1"
+ buildCommands += "python tests\\scripts\\arm64_post_build.py -repo_root %WORKSPACE% -arch ${architecture} -build_type ${lowerConfiguration} -scenario ${scenario} -key_location C:\\tools\\key.txt"
+ }
+ else if (lowerConfiguration == "release") {
buildCommands += "set __TestIntermediateDir=int&&build.cmd ${lowerConfiguration} ${architecture}"
}
// Add archival.
}
if (!enableCorefxTesting) {
- buildCommands += "ROOTFS_DIR=/opt/arm64-xenial-rootfs ./build.sh skipmscorlib verbose ${lowerConfiguration} ${architecture} cross clang3.8 skipnuget ${standaloneGc}"
+ buildCommands += "ROOTFS_DIR=/opt/arm64-xenial-rootfs ./build.sh verbose ${lowerConfiguration} ${architecture} cross clang3.8 ${standaloneGc}"
// HACK -- Arm64 does not have corefx jobs yet.
buildCommands += "git clone https://github.com/dotnet/corefx fx"
os = 'Windows_NT'
}
- // WinArm32 is only built for Debug and Release
- if (os == 'Windows_NT' && architecture == 'arm')
- {
- if (configuration == 'Checked')
- {
- return
- }
- }
// Tizen is only supported for arm architecture
if (os == 'Tizen' && architecture != 'arm') {
return
}
switch (architecture) {
+ case 'arm':
+ if ((scenario != 'gcstress0x3') &&
+ (scenario != 'gcstress0xc') &&
+ (scenario != 'jitstress1') &&
+ (scenario != 'jitstress2') &&
+ (scenario != 'jitstressregs1') &&
+ (scenario != 'jitstressregs2') &&
+ (scenario != 'gcstress0xc_jitstress1') &&
+ (scenario != 'gcstress0xc_jitstress2') &&
+ (scenario != 'minopts') &&
+ (scenario != 'tieredcompilation') &&
+ (scenario != 'tailcallstress') &&
+ (scenario != 'zapdisable')) {
+ return
+ }
+ break
case 'arm64':
if ((scenario != 'gcstress0x3') && (scenario != 'gcstress0xc')) {
return
}
break
case 'ilrt':
- // The ilrt build isn't necessary except for Windows_NT. Non-Windows NT uses
+ // The ilrt build isn't necessary except for Windows_NT2003. Non-Windows NT uses
// the default scenario build
if (os != 'Windows_NT') {
return
return
}
if (architecture != 'x64') {
- if (architecture != 'arm64' || configuration == 'Debug') {
+ if ((architecture != 'arm64' && architecture != 'arm') || (configuration == 'Debug')) {
return
}
}
def newJob = job(Utilities.getFullJobName(project, jobName, isPR, folderName)) {}
def machineAffinityOptions = architecture == 'arm64' ? ['is_build_only': true] : null
+ machineAffinityOptions = architecture == 'arm' ? ['use_arm64_build_machine': false] : machineAffinityOptions
setMachineAffinity(newJob, os, architecture, machineAffinityOptions)
// Add all the standard options
setTestJobTimeOut(newJob, scenario)
if (architecture == 'arm64') {
- Utilities.setJobTimeout(newJob, 480)
+ Utilities.setJobTimeout(newJob, 240)
}
Utilities.addXUnitDotNETResults(newJob, '**/coreclrtests.xml')