netci.groovy 7.4 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 65
                  steps {
                    batchFile("""set TEMP=%WORKSPACE%\\Binaries\\Temp
66
mkdir %TEMP%
67
set TMP=%TEMP%
J
Jared Parsons 已提交
68
.\\cibuild.cmd ${(configuration == 'debug') ? '/debug' : '/release'} ${(buildTarget == 'unit32') ? '/test32' : '/test64'}""")
69 70
                  }
                }
J
Jared Parsons 已提交
71

72
      def triggerPhraseOnly = false
J
Jared Parsons 已提交
73
      def triggerPhraseExtra = ""
J
Jason Malinowski 已提交
74
      Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
J
Jared Parsons 已提交
75 76
      Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
      addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
77 78
    }
  }
J
Jared Parsons 已提交
79
}
80

J
Jared Parsons 已提交
81 82 83 84 85
// Linux
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "linux_debug", isPr)
  def myJob = job(jobName) {
    description("Linux tests")
86 87 88 89
                  steps {
                    shell("./cibuild.sh --nocache --debug")
                  }
                }
90

J
Jared Parsons 已提交
91
  def triggerPhraseOnly = false
J
Jared Parsons 已提交
92
  def triggerPhraseExtra = "linux"
93
  Utilities.setMachineAffinity(myJob, 'Ubuntu14.04', 'latest-or-auto')
J
Jared Parsons 已提交
94 95 96 97 98 99 100 101 102
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
  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")
103 104 105 106 107
    label('mac-roslyn')
    steps {
      shell("./cibuild.sh --nocache --debug")
    }
  }
J
Jared Parsons 已提交
108 109

  def triggerPhraseOnly = true
J
Jared Parsons 已提交
110
  def triggerPhraseExtra = "mac"
111
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
J
Jared Parsons 已提交
112
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
113
  }
J
Jared Parsons 已提交
114 115 116 117 118 119

// Determinism
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "windows_determinism", isPr)
  def myJob = job(jobName) {
    description('Determinism tests')
J
Jared Parsons 已提交
120 121
    steps {
      batchFile("""set TEMP=%WORKSPACE%\\Binaries\\Temp
122 123 124 125
mkdir %TEMP%
set TMP=%TEMP%
.\\cibuild.cmd /testDeterminism""")
    }
126
  }
127

J
Jared Parsons 已提交
128
  def triggerPhraseOnly = false
129
  def triggerPhraseExtra = "determinism"
130
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
J
Jared Parsons 已提交
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
  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 {
      batchFile("""set TEMP=%WORKSPACE%\\Binaries\\Temp
mkdir %TEMP%
set TMP=%TEMP%
.\\cibuild.cmd /testBuildCorrectness""")
    }
  }

J
Jared Parsons 已提交
147
  def triggerPhraseOnly = false
J
Jared Parsons 已提交
148 149
  def triggerPhraseExtra = ""
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
J
Jared Parsons 已提交
150
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
151
}
152 153 154 155 156 157 158 159 160 161 162

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

163
  def triggerPhraseOnly = false
164
  def triggerPhraseExtra = "perf-correctness"
165
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
166 167
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}
J
Jared Parsons 已提交
168 169 170 171 172 173 174 175 176 177 178 179 180

// 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"
181
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
J
Jared Parsons 已提交
182 183
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}
M
Matt Mitchell 已提交
184

185
// Integration Tests
186
commitPullList.each { isPr ->
187
  def jobName = Utilities.getFullJobName(projectName, "integration", isPr)
188
  def myJob = job(jobName) {
189
    description('integration tests')
190 191 192 193
    steps {
      batchFile("""set TEMP=%WORKSPACE%\\Binaries\\Temp
mkdir %TEMP%
set TMP=%TEMP%
194
.\\cibuild.cmd /debug /testVsi""")
195 196 197
    }
  }

198
  def triggerPhraseOnly = false
199
  def triggerPhraseExtra = "integration"
200
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15-rc')
201 202 203
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}

M
Matt Mitchell 已提交
204 205 206 207 208 209
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.