netci.groovy 8.8 KB
Newer Older
1 2 3
// Groovy Script: http://www.groovy-lang.org/syntax.html
// Jenkins DSL: https://github.com/jenkinsci/job-dsl-plugin/wiki

4
import jobs.generation.*;
J
Jared Parsons 已提交
5

J
Jared Parsons 已提交
6 7 8 9 10 11
// The input project name (e.g. dotnet/corefx)
def projectName = GithubProject
// The input branch name (e.g. master)
def branchName = GithubBranchName
// Folder that the project jobs reside in (project/branch)
def projectFoldername = Utilities.getFolderName(projectName) + '/' + Utilities.getFolderName(branchName)
J
Jared Parsons 已提交
12

J
Jared Parsons 已提交
13
static void addRoslynJob(def myJob, String jobName, String branchName, Boolean isPr, String triggerPhraseExtra, Boolean triggerPhraseOnly = false) {
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  def archiveSettings = new ArchivalSettings()
  archiveSettings.addFiles('Binaries/**/*.pdb')
  archiveSettings.addFiles('Binaries/**/*.xml')
  archiveSettings.addFiles('Binaries/**/*.log')
  archiveSettings.addFiles('Binaries/**/*.dmp')
  archiveSettings.addFiles('Binaries/**/*.zip')
  archiveSettings.addFiles('Binaries/**/*.png')
  archiveSettings.addFiles('Binaries/**/*.xml')
  archiveSettings.excludeFiles('Binaries/Obj/**')
  archiveSettings.excludeFiles('Binaries/Bootstrap/**')
  archiveSettings.excludeFiles('Binaries/**/nuget*.zip')
  // Only archive if failed/aborted
  archiveSettings.setArchiveOnFailure()
  archiveSettings.setFailIfNothingArchived()
  Utilities.addArchival(myJob, archiveSettings)
29

30
  // Create the standard job.  This will setup parameter, SCM, timeout, etc ...
31
  def projectName = 'dotnet/roslyn'
32
  def defaultBranch = "*/${branchName}"
33
  Utilities.standardJobSetup(myJob, projectName, isPr, defaultBranch)
34 35

  // Need to setup the triggers for the job
J
Jared Parsons 已提交
36
  if (isPr) {
J
Jared Parsons 已提交
37 38 39 40
    def triggerCore = "open|all|${jobName}"
    if (triggerPhraseExtra) {
      triggerCore = "${triggerCore}|${triggerPhraseExtra}"
    }
V
vsadov 已提交
41
    def triggerPhrase = "(?im)^\\s*(@?dotnet-bot\\,?\\s+)?(re)?test\\s+(${triggerCore})(\\s+please\\.?)?\\s*\$";
J
Jared Parsons 已提交
42 43
    def contextName = jobName
    Utilities.addGithubPRTriggerForBranch(myJob, branchName, contextName, triggerPhrase, triggerPhraseOnly)
44
  } else {
45
    Utilities.addGithubPushTrigger(myJob)
M
Matt Mitchell 已提交
46 47
    // TODO: Add once external email sending is available again
    // addEmailPublisher(myJob)
48 49 50
  }
}

J
Jared Parsons 已提交
51 52 53 54 55 56
// True when this is a PR job, false for commit.  On feature branches we do PR jobs only. 
def commitPullList = [false, true]
if (branchName.startsWith("features/")) {
  commitPullList = [true]
} 

V
vsadov 已提交
57
// Windows Desktop CLR
J
Jared Parsons 已提交
58 59
commitPullList.each { isPr -> 
  ['debug', 'release'].each { configuration ->
60
        ['unit32', 'unit64'].each { buildTarget ->
J
Jared Parsons 已提交
61
      def jobName = Utilities.getFullJobName(projectName, "windows_${configuration}_${buildTarget}", isPr)
62
            def myJob = job(jobName) {
J
Jared Parsons 已提交
63
        description("Windows ${configuration} tests on ${buildTarget}")
64
                  steps {
V
vsadov 已提交
65
                    batchFile(""".\\build\\scripts\\cibuild.cmd ${(configuration == 'debug') ? '-debug' : '-release'} ${(buildTarget == 'unit32') ? '-test32' : '-test64'} -testDesktop""")
66 67
                  }
                }
J
Jared Parsons 已提交
68

69
      def triggerPhraseOnly = false
J
Jared Parsons 已提交
70
      def triggerPhraseExtra = ""
71
      Utilities.setMachineAffinity(myJob, 'Windows_NT', 'win2016-base')
J
Jared Parsons 已提交
72 73
      Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
      addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
74 75
    }
  }
J
Jared Parsons 已提交
76
}
77

V
vsadov 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
// Windows CoreCLR
commitPullList.each { isPr ->
  ['debug', 'release'].each { configuration ->
    def jobName = Utilities.getFullJobName(projectName, "windows_coreclr_test", isPr)
    def myJob = job(jobName) {
      description("Windows CoreCLR unit tests")
            steps {
              batchFile(""".\\build\\scripts\\cibuild.cmd ${(configuration == 'debug') ? '-debug' : '-release'} -testCoreClr""")
            }
    }

    def triggerPhraseOnly = false
    def triggerPhraseExtra = ""
    Utilities.setMachineAffinity(myJob, 'Windows_NT', 'win2016-base')
    Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
    addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
  }
}

T
Ty Overby 已提交
97
// Ubuntu 14.04
J
Jared Parsons 已提交
98
commitPullList.each { isPr -> 
T
Ty Overby 已提交
99
  def jobName = Utilities.getFullJobName(projectName, "ubuntu_14_debug", isPr)
J
Jared Parsons 已提交
100
  def myJob = job(jobName) {
T
Ty Overby 已提交
101
    description("Ubuntu 14.04 tests")
102 103 104 105
                  steps {
                    shell("./cibuild.sh --nocache --debug")
                  }
                }
106

J
Jared Parsons 已提交
107
  def triggerPhraseOnly = false
J
Jared Parsons 已提交
108
  def triggerPhraseExtra = "linux"
109
  Utilities.setMachineAffinity(myJob, 'Ubuntu14.04', 'latest-or-auto')
J
Jared Parsons 已提交
110
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
T
Ty Overby 已提交
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}

// Ubuntu 16.04
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "ubuntu_16_debug", isPr)
  def myJob = job(jobName) {
    description("Ubuntu 16.04 tests")
                  steps {
                    shell("./cibuild.sh --nocache --debug")
                  }
                }

  def triggerPhraseOnly = false
  def triggerPhraseExtra = "linux"
  Utilities.setMachineAffinity(myJob, 'Ubuntu16.04', 'latest-or-auto')
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
J
Jared Parsons 已提交
128 129 130 131 132 133 134 135
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}

// Mac
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "mac_debug", isPr)
  def myJob = job(jobName) {
    description("Mac tests")
136 137 138 139
    steps {
      shell("./cibuild.sh --nocache --debug")
    }
  }
J
Jared Parsons 已提交
140 141

  def triggerPhraseOnly = true
J
Jared Parsons 已提交
142
  def triggerPhraseExtra = "mac"
V
vsadov 已提交
143
  Utilities.setMachineAffinity(myJob, 'OSX10.12', 'latest-or-auto')
144
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
J
Jared Parsons 已提交
145
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
146
  }
J
Jared Parsons 已提交
147 148 149 150 151 152

// Determinism
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "windows_determinism", isPr)
  def myJob = job(jobName) {
    description('Determinism tests')
J
Jared Parsons 已提交
153
    steps {
V
vsadov 已提交
154
      batchFile(""".\\build\\scripts\\cibuild.cmd -testDeterminism""")
155
    }
156
  }
157

J
Jared Parsons 已提交
158
  def triggerPhraseOnly = false
159
  def triggerPhraseExtra = "determinism"
160
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'win2016-base')
J
Jared Parsons 已提交
161 162 163 164 165 166 167 168 169
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}

// Build correctness tests
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "windows_build_correctness", isPr)
  def myJob = job(jobName) {
    description('Build correctness tests')
    steps {
V
vsadov 已提交
170
      batchFile(""".\\build\\scripts\\cibuild.cmd -testBuildCorrectness""")
J
Jared Parsons 已提交
171 172 173
    }
  }

J
Jared Parsons 已提交
174
  def triggerPhraseOnly = false
J
Jared Parsons 已提交
175
  def triggerPhraseExtra = ""
176
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'win2016-base')
J
Jared Parsons 已提交
177
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
178
}
179 180 181 182 183 184 185

// Perf Correctness
commitPullList.each { isPr ->
  def jobName = Utilities.getFullJobName(projectName, "perf_correctness", isPr)
  def myJob = job(jobName) {
    description('perf test correctness')
    steps {
V
vsadov 已提交
186
      batchFile(""".\\build\\scripts\\cibuild.cmd -testPerfCorrectness""")
187 188 189
    }
  }

190
  def triggerPhraseOnly = false
191
  def triggerPhraseExtra = "perf-correctness"
V
vsadov 已提交
192
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-dev15-1')
193 194
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}
J
Jared Parsons 已提交
195 196 197 198 199 200 201 202 203 204 205 206 207

// Microbuild
commitPullList.each { isPr ->
  def jobName = Utilities.getFullJobName(projectName, "microbuild", isPr)
  def myJob = job(jobName) {
    description('MicroBuild test')
    steps {
      batchFile(""".\\src\\Tools\\MicroBuild\\cibuild.cmd""")
    }
  }

  def triggerPhraseOnly = false
  def triggerPhraseExtra = "microbuild"
208
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'win2016-base')
J
Jared Parsons 已提交
209 210
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}
M
Matt Mitchell 已提交
211

212
// VS Integration Tests
213
commitPullList.each { isPr ->
214 215 216 217 218 219
  ['debug', 'release'].each { configuration ->
    ['vs-integration'].each { buildTarget ->
      def jobName = Utilities.getFullJobName(projectName, "windows_${configuration}_${buildTarget}", isPr)
      def myJob = job(jobName) {
        description("Windows ${configuration} tests on ${buildTarget}")
        steps {
V
vsadov 已提交
220
          batchFile(""".\\build\\scripts\\cibuild.cmd ${(configuration == 'debug') ? '-debug' : '-release'} -testVsi""")
221 222 223
        }
      }

224
      def triggerPhraseOnly = false
225
      def triggerPhraseExtra = ""
V
vsadov 已提交
226
      Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-dev15-1')
227 228
      Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
      addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
229 230 231 232
    }
  }
}

M
Matt Mitchell 已提交
233 234 235 236 237 238
JobReport.Report.generateJobReport(out)

// Make the call to generate the help job
Utilities.createHelperJob(this, projectName, branchName,
    "Welcome to the ${projectName} Repository",  // This is prepended to the help message
    "Have a nice day!")  // This is appended to the help message.  You might put known issues here.