netci.groovy 8.1 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}"
    }
41
    def triggerPhrase = "(?i)^\\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 57 58 59
// 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]
} 

// Windows     
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 {
65
                    batchFile(""".\\build\\scripts\\cibuild.cmd ${(configuration == 'debug') ? '/debug' : '/release'} ${(buildTarget == 'unit32') ? '/test32' : '/test64'}""")
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

T
Ty Overby 已提交
78
// Ubuntu 14.04
J
Jared Parsons 已提交
79
commitPullList.each { isPr -> 
T
Ty Overby 已提交
80
  def jobName = Utilities.getFullJobName(projectName, "ubuntu_14_debug", isPr)
J
Jared Parsons 已提交
81
  def myJob = job(jobName) {
T
Ty Overby 已提交
82
    description("Ubuntu 14.04 tests")
83 84 85 86
                  steps {
                    shell("./cibuild.sh --nocache --debug")
                  }
                }
87

J
Jared Parsons 已提交
88
  def triggerPhraseOnly = false
J
Jared Parsons 已提交
89
  def triggerPhraseExtra = "linux"
90
  Utilities.setMachineAffinity(myJob, 'Ubuntu14.04', 'latest-or-auto')
J
Jared Parsons 已提交
91
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
T
Ty Overby 已提交
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
  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 已提交
109 110 111 112 113 114 115 116
  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")
117 118 119 120
    steps {
      shell("./cibuild.sh --nocache --debug")
    }
  }
J
Jared Parsons 已提交
121 122

  def triggerPhraseOnly = true
J
Jared Parsons 已提交
123
  def triggerPhraseExtra = "mac"
124
  Utilities.setMachineAffinity(myJob, 'OSX10.12', 'latest-or-auto')
125
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
J
Jared Parsons 已提交
126
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
127
  }
J
Jared Parsons 已提交
128 129 130 131 132 133

// Determinism
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "windows_determinism", isPr)
  def myJob = job(jobName) {
    description('Determinism tests')
J
Jared Parsons 已提交
134
    steps {
135
      batchFile(""".\\build\\scripts\\cibuild.cmd /testDeterminism""")
136
    }
137
  }
138

J
Jared Parsons 已提交
139
  def triggerPhraseOnly = false
140
  def triggerPhraseExtra = "determinism"
141
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'win2016-base')
J
Jared Parsons 已提交
142 143 144 145 146 147 148 149 150
  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 {
151
      batchFile(""".\\build\\scripts\\cibuild.cmd /testBuildCorrectness""")
J
Jared Parsons 已提交
152 153 154
    }
  }

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

// Perf Correctness
commitPullList.each { isPr ->
  def jobName = Utilities.getFullJobName(projectName, "perf_correctness", isPr)
  def myJob = job(jobName) {
    description('perf test correctness')
    steps {
167
      batchFile(""".\\build\\scripts\\cibuild.cmd /testPerfCorrectness""")
168 169 170
    }
  }

171
  def triggerPhraseOnly = false
172
  def triggerPhraseExtra = "perf-correctness"
173
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15-rc')
174 175
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}
J
Jared Parsons 已提交
176 177 178 179 180 181 182 183 184 185 186 187 188

// 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"
189
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'win2016-base')
J
Jared Parsons 已提交
190 191
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}
M
Matt Mitchell 已提交
192

193
// VS Integration Tests
194
commitPullList.each { isPr ->
195 196 197 198 199 200
  ['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 {
201
          batchFile(""".\\build\\scripts\\cibuild.cmd ${(configuration == 'debug') ? '/debug' : '/release'} /testVsi""")
202 203 204
        }
      }

205
      def triggerPhraseOnly = false
206
      def triggerPhraseExtra = ""
207
      Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15-0')
208 209
      Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
      addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
210 211 212 213
    }
  }
}

M
Matt Mitchell 已提交
214 215 216 217 218 219
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.