perf.groovy (135 lines of code) (raw):

// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // Import the utility functionality. import jobs.generation.ArchivalSettings; import jobs.generation.Utilities; import jobs.generation.TriggerBuilder; def project = GithubProject def branch = GithubBranchName def static getBuildJobName(def configuration, def os) { return configuration.toLowerCase() + '_' + os.toLowerCase() } // Setup SDK performance tests runs on Windows [true, false].each { isPR -> ['Windows_NT'].each { os -> ['Release'].each { config -> ['x64'].each { arch -> def jobName = "SDK_Perf_${os}_${arch}" def newJob = job(Utilities.getFullJobName(project, jobName, isPR)) { def perfWorkingDirectory = "%WORKSPACE%\\artifacts\\TestResults\\${config}\\Performance" // Set the label. label('windows_server_2016_clr_perf') wrappers { credentialsBinding { string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas') } } if (isPR) { parameters { stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form SDK <private|rolling> BenchviewCommitName') } } def runType = isPR ? 'private' : 'rolling' steps { // Build solution and run the performance tests batchFile("\"%WORKSPACE%\\build.cmd\" -configuration ${config} -ci -msbuildEngine dotnet -performanceTest /p:PerfIterations=10 /p:PerfOutputDirectory=\"${perfWorkingDirectory}\" /p:PerfCollectionType=stopwatch") // Upload perf results to BenchView batchFile("set perfWorkingDirectory=${perfWorkingDirectory}\n" + "set configuration=${config}\n" + "set architecture=${arch}\n" + "set OS=${os}\n" + "set runType=${runType}\n" + "\"%WORKSPACE%\\build\\uploadperftobenchview.cmd\"") } } def archiveSettings = new ArchivalSettings() archiveSettings.addFiles("artifacts/TestResults/${config}/Performance/**") archiveSettings.setAlwaysArchive() Utilities.addArchival(newJob, archiveSettings) Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}") newJob.with { logRotator { artifactDaysToKeep(30) daysToKeep(30) artifactNumToKeep(200) numToKeep(200) } wrappers { timeout { absolute(240) } } } if (isPR) { TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest() builder.setGithubContext("${os} ${arch} SDK Perf Tests") builder.triggerOnlyOnComment() //Phrase is "test Windows_NT x64 SDK Perf Tests" builder.setCustomTriggerPhrase("(?i).*test\\W+${os}\\W+${arch}\\W+sdk\\W+perf\\W+tests.*") builder.triggerForBranch(branch) builder.emitTrigger(newJob) } else { TriggerBuilder builder = TriggerBuilder.triggerOnCommit() builder.emitTrigger(newJob) Utilities.addPeriodicTrigger(newJob, "@daily", true) } } } } } // Setup SDK performance tests runs on Linux [true, false].each { isPR -> ['Ubuntu_16.04'].each { os -> ['Release'].each { config -> ['x64'].each { arch -> def jobName = "SDK_Perf_${os}_${arch}" def newJob = job(Utilities.getFullJobName(project, jobName, isPR)) { def perfWorkingDirectory = "\${WORKSPACE}/artifacts/TestResults/${config}/Performance" // Set the label. label('ubuntu_1604_clr_perf') wrappers { credentialsBinding { string('BV_UPLOAD_SAS_TOKEN', 'CoreCLR Perf BenchView Sas') } } if (isPR) { parameters { stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form SDK <private|rolling> BenchviewCommitName') } } def runType = isPR ? 'private' : 'rolling' steps { // Build solution and run the performance tests shell("./build.sh --configuration ${config} --ci --performancetest /p:PerfIterations=10 /p:PerfOutputDirectory=\"${perfWorkingDirectory}\" /p:PerfCollectionType=stopwatch") // Upload perf results to BenchView shell("export perfWorkingDirectory=${perfWorkingDirectory}\n" + "export configuration=${config}\n" + "export architecture=${arch}\n" + "export OS=${os}\n" + "export runType=${runType}\n" + "./build/uploadperftobenchview.sh") } } Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}") newJob.with { logRotator { artifactDaysToKeep(30) daysToKeep(30) artifactNumToKeep(200) numToKeep(200) } wrappers { timeout { absolute(240) } } } if (isPR) { TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest() builder.setGithubContext("${os} ${arch} SDK Perf Tests") builder.triggerOnlyOnComment() //Phrase is "test Ubuntu_16.04 x64 SDK Perf Tests" builder.setCustomTriggerPhrase("(?i).*test\\W+${os}\\W+${arch}\\W+sdk\\W+perf\\W+tests.*") builder.triggerForBranch(branch) builder.emitTrigger(newJob) } else { TriggerBuilder builder = TriggerBuilder.triggerOnCommit() builder.emitTrigger(newJob) Utilities.addPeriodicTrigger(newJob, "@daily", true) } } } } } Utilities.createHelperJob(this, project, branch, "Welcome to the ${project} Perf help", "Have a nice day!")