Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 46 additions & 12 deletions netci.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@ class Constants {
// 'jitdiff', // jitdiff is currently disabled, until someone spends the effort to make it fully work
'standalone_gc',
'gc_reliability_framework',
'illink']
'illink',
'corefx_innerloop']

def static allScenarios = basicScenarios + r2rStressScenarios.keySet() + jitStressModeScenarios.keySet()

Expand Down Expand Up @@ -1741,6 +1742,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
case 'illink':
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} via ILLink", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")
break
case 'corefx_innerloop':
if (configuration == 'Release' || configuration == 'Checked') {
Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} CoreFX Tests", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")
}
break

default:
if (isJitStressScenario(scenario)) {
Expand Down Expand Up @@ -2212,19 +2218,28 @@ def static calculateBuildCommands(def newJob, def scenario, def branch, def isPR
runtestArguments = "${lowerConfiguration} ${arch} ${testOpts}"

if (doCoreFxTesting) {
def workspaceRelativeFxRoot = "_/fx"
def absoluteFxRoot = "%WORKSPACE%\\_\\fx"
def fxBranch = getFxBranch(branch)
if (scenario == 'corefx_innerloop') {
buildCommands += "tests\\runtest.cmd ${runtestArguments} CoreFXTests"

// Archive and process (only) the test results
Utilities.addArchival(newJob, "%WORKSPACE%bin/Logs/**/testResults.xml")
Utilities.addXUnitDotNETResults(newJob, "%WORKSPACE%/bin/Logs/**/testResults.xml")
}
else {
def workspaceRelativeFxRoot = "_/fx"
def absoluteFxRoot = "%WORKSPACE%\\_\\fx"
def fxBranch = getFxBranch(branch)

buildCommands += "python -u %WORKSPACE%\\tests\\scripts\\run-corefx-tests.py -arch ${arch} -ci_arch ${architecture} -build_type ${configuration} -fx_root ${absoluteFxRoot} -fx_branch ${fxBranch} -env_script ${envScriptPath}"
buildCommands += "python -u %WORKSPACE%\\tests\\scripts\\run-corefx-tests.py -arch ${arch} -ci_arch ${architecture} -build_type ${configuration} -fx_root ${absoluteFxRoot} -fx_branch ${fxBranch} -env_script ${envScriptPath}"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the difference between the outerloop and innerloop jobs? Why are we opting for two different ways to run corefx tests?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CoreFx tests have a notion of innerloop and outerloop built into them as well. We should probably only run corefx's innerloop tests in coreclr's innerloop. This naming seems appropriate in case we want to add corefx outerloop jobs at some point. It's unclear right now (to me, at least).


In reply to: 196827178 [](ancestors = 196827178)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, @RussKeldorph was spot on. The CI configuration will only run innerloop (marked as such) CoreFX tests during innerloop CoreCLR jobs.


// Archive and process (only) the test results
Utilities.addArchival(newJob, "${workspaceRelativeFxRoot}/bin/**/testResults.xml")
Utilities.addXUnitDotNETResults(newJob, "${workspaceRelativeFxRoot}/bin/**/testResults.xml")
// 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)
//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 if (isGcReliabilityFramework(scenario)) {
buildCommands += "tests\\runtest.cmd ${runtestArguments} GenerateLayoutOnly"
Expand Down Expand Up @@ -2571,6 +2586,12 @@ def static shouldGenerateJob(def scenario, def isPR, def architecture, def confi
return false
}

// Run basic corefx tests only on PR-triggered jobs
// Runs under Release and Checked
if (scenario == 'corefx_innerloop' && !isPR) {
return false
}

// Tizen is only supported for armem architecture
if (os == 'Tizen' && architecture != 'armem') {
return false
Expand Down Expand Up @@ -2784,6 +2805,14 @@ def static shouldGenerateJob(def scenario, def isPR, def architecture, def confi
return false
}
break
case 'corefx_innerloop':
if (os != 'Windows_NT'|| architecture != 'x64') {
return false
}
if(configuration != 'Release' && configuration != 'Checked') {
return false
}
break
default:
println("Unknown scenario: ${scenario}")
assert false
Expand Down Expand Up @@ -2831,6 +2860,8 @@ Constants.allScenarios.each { scenario ->

// Create the new job
def newJob = job(Utilities.getFullJobName(project, jobName, isPR, folderName)) {}

// Should we add corefx_innerloop to views?
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will let @BruceForstall comment

addToViews(newJob, isPR, architecture, os)

setJobMachineAffinity(architecture, os, true, false, false, newJob) // isBuildJob = true, isTestJob = false, isFlowJob = false
Expand Down Expand Up @@ -3459,7 +3490,10 @@ def static shouldGenerateFlowJob(def scenario, def isPR, def architecture, def c
if (scenario == 'innerloop' && !isPR) {
return false
}


if (scenario == 'corefx_innerloop') {
return false
}
// Filter based on OS and architecture.

switch (architecture) {
Expand Down
2 changes: 2 additions & 0 deletions tests/runtest.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ set __CollectDumps=
set __DoCrossgen=
set __CrossgenAltJit=
set __PerfTests=
set __CoreFXTests=

:Arg_Loop
if "%1" == "" goto ArgsDone
Expand Down Expand Up @@ -78,6 +79,7 @@ if /i "%1" == "jitdisasm" (set __JitDisasm=1&shift&goto Arg_Loop)
if /i "%1" == "ilasmroundtrip" (set __IlasmRoundTrip=1&shift&goto Arg_Loop)
if /i "%1" == "GenerateLayoutOnly" (set __GenerateLayoutOnly=1&shift&goto Arg_Loop)
if /i "%1" == "PerfTests" (set __PerfTests=true&shift&goto Arg_Loop)
if /i "%1" == "CoreFXTests" (exit /b 0)
if /i "%1" == "runcrossgentests" (set RunCrossGen=true&shift&goto Arg_Loop)
if /i "%1" == "link" (set DoLink=true&set ILLINK=%2&shift&shift&goto Arg_Loop)
if /i "%1" == "tieredcompilation" (set COMPLUS_TieredCompilation=1&shift&goto Arg_Loop)
Expand Down