rubyjobbuilderdsl 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +6 -0
  3. data/Gemfile.lock +33 -0
  4. data/LICENSE +19 -0
  5. data/Rakefile +12 -0
  6. data/docs/common.md +313 -0
  7. data/docs/flow.md +18 -0
  8. data/docs/freestyle.md +100 -0
  9. data/docs/gerrit.md +70 -0
  10. data/docs/git.md +88 -0
  11. data/docs/index.md +11 -0
  12. data/docs/multi.md +27 -0
  13. data/docs/overview.md +74 -0
  14. data/docs/postbuild.md +266 -0
  15. data/docs/view.md +13 -0
  16. data/lib/rubyjobbuilderdsl/builder.rb +69 -0
  17. data/lib/rubyjobbuilderdsl/buildstep/ant.rb +29 -0
  18. data/lib/rubyjobbuilderdsl/buildstep/copyartifact.rb +23 -0
  19. data/lib/rubyjobbuilderdsl/buildstep/inject_env.rb +18 -0
  20. data/lib/rubyjobbuilderdsl/buildstep/phase.rb +19 -0
  21. data/lib/rubyjobbuilderdsl/buildstep/phase_job.rb +26 -0
  22. data/lib/rubyjobbuilderdsl/buildstep/shell.rb +24 -0
  23. data/lib/rubyjobbuilderdsl/common/artifactory.rb +33 -0
  24. data/lib/rubyjobbuilderdsl/common/blocking_job.rb +11 -0
  25. data/lib/rubyjobbuilderdsl/common/build_timeout.rb +23 -0
  26. data/lib/rubyjobbuilderdsl/common/gerrit.rb +53 -0
  27. data/lib/rubyjobbuilderdsl/common/git.rb +76 -0
  28. data/lib/rubyjobbuilderdsl/common/logrotate.rb +24 -0
  29. data/lib/rubyjobbuilderdsl/common/parameter.rb +22 -0
  30. data/lib/rubyjobbuilderdsl/common/password.rb +12 -0
  31. data/lib/rubyjobbuilderdsl/common/pollscm.rb +10 -0
  32. data/lib/rubyjobbuilderdsl/common/scms.rb +18 -0
  33. data/lib/rubyjobbuilderdsl/common/throttle.rb +24 -0
  34. data/lib/rubyjobbuilderdsl/common/timed.rb +10 -0
  35. data/lib/rubyjobbuilderdsl/common/timestamps.rb +6 -0
  36. data/lib/rubyjobbuilderdsl/common.rb +140 -0
  37. data/lib/rubyjobbuilderdsl/deployer.rb +95 -0
  38. data/lib/rubyjobbuilderdsl/flow.rb +14 -0
  39. data/lib/rubyjobbuilderdsl/freestyle.rb +57 -0
  40. data/lib/rubyjobbuilderdsl/jenkins_client.rb +203 -0
  41. data/lib/rubyjobbuilderdsl/multijob.rb +24 -0
  42. data/lib/rubyjobbuilderdsl/postbuild/archive.rb +23 -0
  43. data/lib/rubyjobbuilderdsl/postbuild/chucknorris_publisher.rb +6 -0
  44. data/lib/rubyjobbuilderdsl/postbuild/claim_publisher.rb +6 -0
  45. data/lib/rubyjobbuilderdsl/postbuild/cloverphp_publisher.rb +36 -0
  46. data/lib/rubyjobbuilderdsl/postbuild/email_publisher.rb +23 -0
  47. data/lib/rubyjobbuilderdsl/postbuild/game_publisher.rb +6 -0
  48. data/lib/rubyjobbuilderdsl/postbuild/groovy.rb +10 -0
  49. data/lib/rubyjobbuilderdsl/postbuild/html_publisher.rb +27 -0
  50. data/lib/rubyjobbuilderdsl/postbuild/javadoc_publisher.rb +19 -0
  51. data/lib/rubyjobbuilderdsl/postbuild/logparser.rb +21 -0
  52. data/lib/rubyjobbuilderdsl/postbuild/nunit_publisher.rb +21 -0
  53. data/lib/rubyjobbuilderdsl/postbuild/pmd_publisher.rb +19 -0
  54. data/lib/rubyjobbuilderdsl/postbuild/script.rb +14 -0
  55. data/lib/rubyjobbuilderdsl/postbuild/tap_publisher.rb +44 -0
  56. data/lib/rubyjobbuilderdsl/postbuild/trigger.rb +38 -0
  57. data/lib/rubyjobbuilderdsl/postbuild/xunit_publisher.rb +35 -0
  58. data/lib/rubyjobbuilderdsl/postbuild.rb +146 -0
  59. data/lib/rubyjobbuilderdsl/view.rb +14 -0
  60. data/lib/rubyjobbuilderdsl/xml_generator.rb +839 -0
  61. data/lib/rubyjobbuilderdsl.rb +2 -0
  62. data/rubyjobbuilderdsl.gemspec +13 -0
  63. data/rubyjobbuilderdsl.sublime-project +14 -0
  64. data/run_tests.sh +7 -0
  65. data/sample/hello_mars.rb +27 -0
  66. data/sample/local.ini +4 -0
  67. data/test/test_ant.rb +38 -0
  68. data/test/test_archive.rb +24 -0
  69. data/test/test_artifactory.rb +26 -0
  70. data/test/test_blocking_job.rb +18 -0
  71. data/test/test_chucknorris_publisher.rb +17 -0
  72. data/test/test_claim_publisher.rb +17 -0
  73. data/test/test_cloverphp.rb +33 -0
  74. data/test/test_concurrent.rb +44 -0
  75. data/test/test_copyartifact.rb +45 -0
  76. data/test/test_default_setting.rb +29 -0
  77. data/test/test_email_publisher.rb +44 -0
  78. data/test/test_flow.rb +19 -0
  79. data/test/test_freestyle.rb +52 -0
  80. data/test/test_game_publisher.rb +17 -0
  81. data/test/test_gerrit.rb +117 -0
  82. data/test/test_git.rb +80 -0
  83. data/test/test_html_publisher.rb +57 -0
  84. data/test/test_inject.rb +23 -0
  85. data/test/test_javadoc.rb +22 -0
  86. data/test/test_logparser.rb +24 -0
  87. data/test/test_logrotate.rb +22 -0
  88. data/test/test_multijob.rb +50 -0
  89. data/test/test_nunit_publisher.rb +20 -0
  90. data/test/test_parameter.rb +44 -0
  91. data/test/test_password.rb +17 -0
  92. data/test/test_pmd.rb +22 -0
  93. data/test/test_pollscm.rb +15 -0
  94. data/test/test_postbuild_groovy.rb +21 -0
  95. data/test/test_postbuild_script.rb +24 -0
  96. data/test/test_postbuild_trigger.rb +170 -0
  97. data/test/test_scms.rb +31 -0
  98. data/test/test_tap_publisher.rb +25 -0
  99. data/test/test_timed.rb +15 -0
  100. data/test/test_timeout.rb +20 -0
  101. data/test/test_timestamps.rb +14 -0
  102. data/test/test_xml_generator.rb +28 -0
  103. data/test/test_xunit_publisher.rb +22 -0
  104. metadata +173 -0
@@ -0,0 +1,839 @@
1
+ require 'builder'
2
+
3
+ class BasicObject
4
+ def class
5
+ (class << self; self end).superclass
6
+ end
7
+ end
8
+
9
+ module JenkinsJob
10
+ class XmlGenerator
11
+ GENERATOR_BY_CLASS = {
12
+ FreeStyle => lambda { |generator, model, xml_node| generator.generate_freestyle(model, xml_node) },
13
+ Flow => lambda { |generator, model, xml_node| generator.generate_flow(model, xml_node) },
14
+ MultiJob => lambda { |generator, model, xml_node| generator.generate_multi_job(model, xml_node) },
15
+ View => lambda { |generator, model, xml_node| generator.generate_view(model, xml_node) },
16
+ Common::Throttle => lambda { |generator, model, xml_node| generator.generate_throttle(model, xml_node) },
17
+ Common::LogRotate => lambda { |generator, model, xml_node| generator.generate_logrotate(model, xml_node) },
18
+ Common::PollSCM => lambda { |generator, model, xml_node| generator.generate_pollscm(model, xml_node) },
19
+ Common::Timed => lambda { |generator, model, xml_node| generator.generate_timed(model, xml_node) },
20
+ Common::BuildTimeout => lambda { |generator, model, xml_node| generator.generate_build_timeout(model, xml_node) },
21
+ Common::Timestamps => lambda { |generator, model, xml_node| generator.generate_timestamps(model, xml_node) },
22
+ Common::Artifactory => lambda { |generator, model, xml_node| generator.generate_artifactory(model, xml_node) },
23
+ Common::Password => lambda { |generator, model, xml_node| generator.generate_password(model, xml_node) },
24
+ Common::Gerrit => lambda { |generator, model, xml_node| generator.generate_gerrit(model, xml_node) },
25
+ Common::GerritProject => lambda { |generator, model, xml_node| generator.generate_gerrit_project(model, xml_node) },
26
+ Common::Git => lambda { |generator, model, xml_node| generator.generate_git(model, xml_node) },
27
+ Common::Scms => lambda { |generator, model, xml_node| generator.generate_scms(model, xml_node) },
28
+ Common::Parameter => lambda { |generator, model, xml_node| generator.generate_param(model, xml_node) },
29
+ Common::PasswordParameter => lambda { |generator, model, xml_node| generator.generate_password_param(model, xml_node) },
30
+ Common::BlockingJob => lambda { |generator, model, xml_node| generator.generate_blocking_job(model, xml_node) },
31
+ BuildStep::Shell => lambda { |generator, model, xml_node| generator.generate_shell(model, xml_node) },
32
+ BuildStep::Powershell => lambda { |generator, model, xml_node| generator.generate_powershell(model, xml_node) },
33
+ BuildStep::Batch => lambda { |generator, model, xml_node| generator.generate_batch(model, xml_node) },
34
+ BuildStep::CopyArtifact => lambda { |generator, model, xml_node| generator.generate_copyartifact(model, xml_node) },
35
+ BuildStep::InjectEnv => lambda { |generator, model, xml_node| generator.generate_inject_env(model, xml_node) },
36
+ BuildStep::Ant => lambda { |generator, model, xml_node| generator.generate_ant(model, xml_node) },
37
+ BuildStep::Phase => lambda { |generator, model, xml_node| generator.generate_phase(model, xml_node) },
38
+ Postbuild::Postbuild => lambda { |generator, model, xml_node| generator.generate_postbuild(model, xml_node) },
39
+ Postbuild::Archive => lambda { |generator, model, xml_node| generator.generate_archive(model, xml_node) },
40
+ Postbuild::EmailPublisher => lambda { |generator, model, xml_node| generator.generate_email_publisher(model, xml_node) },
41
+ Postbuild::NUnitPublisher => lambda { |generator, model, xml_node| generator.generate_nunit_publisher(model, xml_node) },
42
+ Postbuild::XUnitPublisher => lambda { |generator, model, xml_node| generator.generate_xunit_publisher(model, xml_node) },
43
+ Postbuild::HtmlPublisher => lambda { |generator, model, xml_node| generator.generate_html_publisher(model, xml_node) },
44
+ Postbuild::LogParser => lambda { |generator, model, xml_node| generator.generate_logparser(model, xml_node) },
45
+ Postbuild::PostbuildScript => lambda { |generator, model, xml_node| generator.generate_postbuild_script(model, xml_node) },
46
+ Postbuild::PostbuildGroovy => lambda { |generator, model, xml_node| generator.generate_postbuild_groovy(model, xml_node) },
47
+ Postbuild::PostbuildTrigger => lambda { |generator, model, xml_node| generator.generate_postbuild_trigger(model, xml_node) },
48
+ Postbuild::CloverPhpPublisher => lambda { |generator, model, xml_node| generator.generate_clover_php(model, xml_node) },
49
+ Postbuild::JavaDocPublisher => lambda { |generator, model, xml_node| generator.generate_javadoc(model, xml_node) },
50
+ Postbuild::PMDPublisher => lambda { |generator, model, xml_node| generator.generate_pmd(model, xml_node) },
51
+ Postbuild::ClaimPublisher => lambda { |generator, model, xml_node| generator.generate_claim_publisher(model, xml_node) },
52
+ Postbuild::TapPublisher => lambda { |generator, model, xml_node| generator.generate_tap_publisher(model, xml_node) },
53
+ Postbuild::GamePublisher => lambda { |generator, model, xml_node| generator.generate_game_publisher(model, xml_node) },
54
+ Postbuild::ChuckNorrisPublisher => lambda { |generator, model, xml_node| generator.generate_chucknorris_publisher(model, xml_node) },
55
+ }
56
+
57
+ def generate(model, xml_node = ::Builder::XmlMarkup.new(:indent => 2))
58
+ if GENERATOR_BY_CLASS[model.class]
59
+ GENERATOR_BY_CLASS[model.class].call(self, model, xml_node)
60
+ else
61
+ fail "Missing XML generator for class #{model.class}"
62
+ end
63
+ end
64
+
65
+ def generate_common(model, project)
66
+ project.actions
67
+ if model.desc_
68
+ project.description(model.desc_)
69
+ else
70
+ project.description('<!-- Managed by Jenkins Job Builder -->')
71
+ end
72
+
73
+ project.keepDependencies(false)
74
+ project.blockBuildWhenDownstreamBuilding(false)
75
+ project.blockBuildWhenUpstreamBuilding(false)
76
+ project.concurrentBuild(model.concurrent_)
77
+ project.quietPeriod(model.quiet_period_) if model.quiet_period_
78
+
79
+ if model.node_
80
+ project.assignedNode(model.node_)
81
+ project.canRoam(false)
82
+ else
83
+ project.canRoam(true)
84
+ end
85
+
86
+ generate(model.logrotate_, project) if model.logrotate_
87
+
88
+ if model.properties_.empty? && model.parameters_.empty?
89
+ project.properties
90
+ else
91
+ project.properties do |properties|
92
+ model.properties_.values.each { |e| generate(e, properties) }
93
+
94
+ unless model.parameters_.empty?
95
+ properties.tag!('hudson.model.ParametersDefinitionProperty') do |node|
96
+ node.parameterDefinitions do |params_def|
97
+ model.parameters_.values.each { |e| generate(e, params_def) }
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ if model.scm_
105
+ generate(model.scm_, project)
106
+ else
107
+ project.scm(:class => 'hudson.scm.NullSCM')
108
+ end
109
+
110
+ unless model.triggers_.empty?
111
+ project.triggers(:class => 'vector') do |triggers|
112
+ model.triggers_.values.each { |e| generate(e, triggers) }
113
+ end
114
+ end
115
+
116
+ if model.postbuild_
117
+ project.publishers do |publishers|
118
+ generate(model.postbuild_, publishers)
119
+ end
120
+ else
121
+ project.publishers
122
+ end
123
+
124
+ if model.wrappers_.empty?
125
+ project.buildWrappers
126
+ else
127
+ project.buildWrappers do |wrappers|
128
+ model.wrappers_.values.each { |e| generate(e, wrappers) }
129
+ end
130
+ end
131
+ end
132
+
133
+ def generate_freestyle(model, root)
134
+ result = root.project do |project|
135
+ generate_common(model, project)
136
+ project.customWorkspace(model.workspace_) if model.workspace_
137
+ if model.builders_.empty?
138
+ project.builders
139
+ else
140
+ project.builders do |builders|
141
+ model.builders_.each { |e| generate(e, builders) }
142
+ end
143
+ end
144
+ end
145
+ result
146
+ end
147
+
148
+ def generate_flow(model, root)
149
+ result = root.tag!('com.cloudbees.plugins.flow.BuildFlow') do |project|
150
+ project.buildNeedsWorkspace(true)
151
+ project.dsl(model.dsl_)
152
+ generate_common(model, project)
153
+ end
154
+ result
155
+ end
156
+
157
+ def generate_multi_job(model, root)
158
+ result = root.tag!('com.tikal.jenkins.plugins.multijob.MultiJobProject', :plugin => 'jenkins-multijob-plugin@1.13') do |project|
159
+ generate_common(model, project)
160
+ if model.builders_.empty?
161
+ project.builders
162
+ else
163
+ project.builders do |builders|
164
+ model.builders_.each { |e| generate(e, builders) }
165
+ end
166
+ end
167
+ end
168
+ result
169
+ end
170
+
171
+ def generate_view(model, root)
172
+ result = root.tag!('hudson.model.ListView') do |view|
173
+ view.name(model.name)
174
+ view.filterExecutors(false)
175
+ view.filterQueue(false)
176
+ view.properties(:class => 'hudson.model.View$PropertyList')
177
+ view.jobNames do |jobs|
178
+ jobs.comparator(:class => 'hudson.util.CaseInsensitiveComparator')
179
+ end
180
+ view.jobFilters
181
+ view.columns do |cols|
182
+ cols.tag!('hudson.views.StatusColumn')
183
+ cols.tag!('hudson.views.WeatherColumn')
184
+ cols.tag!('hudson.views.JobColumn')
185
+ cols.tag!('hudson.views.LastSuccessColumn')
186
+ cols.tag!('hudson.views.LastFailureColumn')
187
+ cols.tag!('hudson.views.LastDurationColumn')
188
+ cols.tag!('hudson.views.BuildButtonColumn')
189
+ end
190
+ view.includeRegex(model.jobname_)
191
+ view.recurse(false)
192
+ end
193
+ result
194
+ end
195
+
196
+ def generate_shell(model, builders)
197
+ builders.tag!('hudson.tasks.Shell') do |shell|
198
+ shell.command(model.cmd_)
199
+ end
200
+ end
201
+
202
+ def generate_powershell(model, builders)
203
+ builders.tag!('hudson.plugins.powershell.PowerShell') do |shell|
204
+ shell.command(model.cmd_)
205
+ end
206
+ end
207
+
208
+ def generate_inject_env(model, builders)
209
+ builders.tag!('EnvInjectBuilder') do |inject|
210
+ inject.tag!('info') do |info|
211
+ info.propertiesFilePath(model.properties_file_) if model.properties_file_
212
+ info.propertiesContent(model.properties_content_)
213
+ end
214
+ end
215
+ end
216
+
217
+ def generate_batch(model, builders)
218
+ builders.tag!('hudson.tasks.BatchFile') do |batch|
219
+ batch.command(model.cmd_)
220
+ end
221
+ end
222
+
223
+ def generate_copyartifact(model, builders)
224
+ builders.tag!('hudson.plugins.copyartifact.CopyArtifact') do |copy|
225
+ copy.project(model.project_)
226
+ copy.filter(model.filter_) if model.filter_
227
+ if model.target_
228
+ copy.target(model.target_)
229
+ else
230
+ copy.target
231
+ end
232
+ copy.flatten(false)
233
+ copy.optional(false)
234
+ copy.parameters
235
+ if model.build_number_
236
+ copy.selector(:class => 'hudson.plugins.copyartifact.SpecificBuildSelector') do |s|
237
+ s.buildNumber(model.build_number_)
238
+ end
239
+ else
240
+ copy.selector(:class => 'hudson.plugins.copyartifact.StatusBuildSelector') do |s|
241
+ s.stable(false)
242
+ end
243
+ end
244
+ end
245
+ end
246
+
247
+ def generate_ant(model, builders)
248
+ builders.tag!('hudson.tasks.Ant', :plugin => 'ant@1.2') do |ant|
249
+ if model.targets_.empty?
250
+ ant.targets
251
+ else
252
+ ant.targets(model.targets_.join(' '))
253
+ end
254
+ ant.buildFile(model.buildfile_) if model.buildfile_
255
+ ant.properties(model.properties_.map { |k, v| "-D#{k}=#{v}" }.join(' ')) unless model.properties_.empty?
256
+ ant.antOpts(model.java_opts_.join(' ')) unless model.java_opts_.empty?
257
+ end
258
+ end
259
+
260
+ def generate_phase(model, builders)
261
+ builders.tag!('com.tikal.jenkins.plugins.multijob.MultiJobBuilder') do |phase|
262
+ phase.phaseName(model.name)
263
+ phase.phaseJobs do |phaseJobs|
264
+ model.jobs_.each do |job|
265
+ phaseJobs.tag!('com.tikal.jenkins.plugins.multijob.PhaseJobsConfig') do |conf|
266
+ conf.jobName(job.name)
267
+ conf.currParams(true)
268
+ conf.exposedSCM(true)
269
+ conf.disableJob(false)
270
+ conf.parsingRulesPath
271
+ conf.maxRetries(job.retries_)
272
+ if job.retries_ > 0
273
+ conf.enableRetryStrategy(true)
274
+ else
275
+ conf.enableRetryStrategy(false)
276
+ end
277
+ conf.enableCondition(false)
278
+ conf.abortAllJob(job.abort_others_)
279
+ conf.condition
280
+ conf.configs(:class => 'empty-list')
281
+ if job.ignore_result_
282
+ conf.killPhaseOnJobResultCondition('NEVER')
283
+ else
284
+ conf.killPhaseOnJobResultCondition('FAILURE')
285
+ end
286
+ conf.buildOnlyIfSCMChanges(false)
287
+ end
288
+ end
289
+ end
290
+ phase.continuationCondition('SUCCESSFUL')
291
+ end
292
+ end
293
+
294
+ def generate_throttle(model, properties)
295
+ properties.tag!('hudson.plugins.throttleconcurrents.ThrottleJobProperty') do |throttle|
296
+ throttle.maxConcurrentPerNode(model.max_per_node_)
297
+ throttle.maxConcurrentTotal(model.max_total_)
298
+ throttle.throttleEnabled(true)
299
+
300
+ if model.categories_
301
+ throttle.categories do |categories|
302
+ model.categories_.each { |cat| categories.string(cat) }
303
+ end
304
+ throttle.throttleOption('category')
305
+ else
306
+ throttle.throttleOption('project')
307
+ end
308
+ throttle.configVersion(1)
309
+ end
310
+ end
311
+
312
+ def generate_logrotate(model, project)
313
+ project.logRotator do |log|
314
+ log.daysToKeep(model.days_to_keep_) if model.days_to_keep_
315
+ log.numToKeep(model.num_to_keep_) if model.num_to_keep_
316
+ log.artifactDaysToKeep(model.artifact_days_to_keep_) if model.artifact_days_to_keep_
317
+ log.artifactNumToKeep(model.artifact_num_to_keep_) if model.artifact_num_to_keep_
318
+ end
319
+ end
320
+
321
+ def generate_pollscm(model, triggers)
322
+ triggers.tag!('hudson.triggers.SCMTrigger') do |scm|
323
+ scm.spec(model.value_)
324
+ end
325
+ end
326
+
327
+ def generate_timed(model, triggers)
328
+ triggers.tag!('hudson.triggers.TimerTrigger') do |timed|
329
+ timed.spec(model.value_)
330
+ end
331
+ end
332
+
333
+ def generate_gerrit(model, triggers)
334
+ triggers.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger') do |gerrit|
335
+ gerrit.spec
336
+ gerrit.gerritProjects do |gerrit_projects|
337
+ model.projects_.each { |p| generate(p, gerrit_projects) }
338
+ end
339
+
340
+ gerrit.skipVote do |skip_vote|
341
+ skip_vote.onSuccessful(false)
342
+ skip_vote.onFailed(false)
343
+ skip_vote.onUnstable(false)
344
+ skip_vote.onNotBuilt(false)
345
+ end
346
+ gerrit.silentMode(false)
347
+ gerrit.escapeQuotes(true)
348
+ gerrit.noNameAndEmailParameters(false)
349
+ gerrit.dynamicTriggerConfiguration('False')
350
+ gerrit.triggerConfigURL
351
+ gerrit.allowTriggeringUnreviewedPatches(false)
352
+
353
+ gerrit.triggerOnEvents do |events|
354
+ if model.patchset_uploaded_
355
+ events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginPatchsetCreatedEvent')
356
+ end
357
+
358
+ if model.change_merged_
359
+ events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginChangeMergedEvent')
360
+ end
361
+
362
+ model.comment_added_.each do |e|
363
+ events.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginCommentAddedEvent') do |comment|
364
+ comment.verdictCategory(e[:approval_category])
365
+ comment.commentAddedTriggerApprovalValue(e[:approval_value])
366
+ end
367
+ end
368
+ end
369
+
370
+ gerrit.buildStartMessage
371
+ gerrit.buildFailureMessage
372
+ gerrit.buildSuccessfulMessage
373
+ gerrit.buildUnstableMessage
374
+ gerrit.customUrl
375
+ gerrit.serverName('__ANY__')
376
+ end
377
+ end
378
+
379
+ def generate_gerrit_project(model, gerrit_projects)
380
+ gerrit_projects.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject') do |project|
381
+ project.compareType('PLAIN')
382
+ project.pattern(model.project_)
383
+ project.branches do |branches|
384
+ model.branches_.each do |pattern|
385
+ branches.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch') do |branch|
386
+ branch.compareType('ANT')
387
+ branch.pattern(pattern)
388
+ end
389
+ end
390
+ end
391
+ project.filePaths do |file_paths|
392
+ model.files_.each do |pattern|
393
+ file_paths.tag!('com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.FilePath') do |path|
394
+ path.compareType('ANT')
395
+ path.pattern(pattern)
396
+ end
397
+ end
398
+ end if model.files_
399
+ end
400
+ end
401
+
402
+ def generate_build_timeout(model, wrappers)
403
+ wrappers.tag!('hudson.plugins.build__timeout.BuildTimeoutWrapper') do |timeout|
404
+ timeout.timeoutMinutes(3)
405
+ timeout.failBuild(false)
406
+ timeout.writingDescription(false)
407
+ timeout.timeoutType(model.type_)
408
+ timeout.timeoutPercentage(model.elastic_percentage_)
409
+ timeout.timeoutMinutesElasticDefault(model.elastic_default_timeout_)
410
+ end
411
+ end
412
+
413
+ def generate_timestamps(_model, wrappers)
414
+ wrappers.tag!('hudson.plugins.timestamper.TimestamperBuildWrapper')
415
+ end
416
+
417
+ def generate_password(model, wrappers)
418
+ wrappers.tag!('EnvInjectPasswordWrapper', :plugin => 'envinject@1.90') do |env|
419
+ env.injectGlobalPasswords(true)
420
+ env.maskPasswordParameters(false)
421
+ env.passwordEntries do |entries|
422
+ entries.EnvInjectPasswordEntry do |entry|
423
+ entry.name(model.name_)
424
+ entry.value(model.password_)
425
+ end
426
+ end
427
+ end
428
+ end
429
+
430
+ def generate_artifactory(model, wrappers)
431
+ wrappers.tag!('org.jfrog.hudson.generic.ArtifactoryGenericConfigurator',
432
+ :plugin => 'artifactory@2.2.4') do |artifact|
433
+ artifact.details do |details|
434
+ details.artifactoryName(model.server_)
435
+ details.repositoryKey(model.repository_)
436
+ details.snapshotsRepositoryKey(model.repository_)
437
+ details.artifactoryUrl
438
+ details.stagingPlugin
439
+ end
440
+ artifact.deployPattern(model.deploy_.join(' '))
441
+ artifact.resolvePattern(model.resolve_.join(' '))
442
+ artifact.matrixParams
443
+ artifact.deployBuildInfo(model.build_info_)
444
+ artifact.includeEnvVars(false)
445
+ artifact.envVarsPatterns do |env|
446
+ env.includePatterns
447
+ env.excludePatterns('*password*,*secret*')
448
+ end
449
+ artifact.discardOldBuilds(false)
450
+ artifact.artifactdiscardBuildArtifacts(true)
451
+ end
452
+ end
453
+
454
+ def generate_git(model, project)
455
+ project.scm(:class => 'hudson.plugins.git.GitSCM', :plugin => 'git@2.0') do |scm|
456
+ scm.configVersion(2)
457
+
458
+ scm.userRemoteConfigs do |remote|
459
+ remote.tag!('hudson.plugins.git.UserRemoteConfig') do |user|
460
+ user.name('origin')
461
+ user.refspec(model.refspec_)
462
+ user.url(model.url_)
463
+ user.credentialsId(model.credentials_)
464
+ end
465
+ end
466
+
467
+ scm.branches do |branches|
468
+ model.branches_.each do |b|
469
+ branches.tag!('hudson.plugins.git.BranchSpec') do |spec|
470
+ spec.name(b)
471
+ end
472
+ end
473
+ end
474
+
475
+ scm.gitTool('jgit') if model.jgit_
476
+
477
+ scm.extensions do |ext|
478
+ generate_git_ext(model, ext)
479
+ end
480
+ end
481
+ end
482
+
483
+ def generate_scms(model, project)
484
+ project.scm(:class => 'org.jenkinsci.plugins.multiplescms.MultiSCM', :plugin => 'multiple-scms@0.3') do |scm|
485
+ unless model.scms_.empty?
486
+ scm.scms do |multiple_scms|
487
+ model.scms_.each { |e| generate(e, multiple_scms) }
488
+ end
489
+ end
490
+ end
491
+ end
492
+
493
+ def generate_git_ext(model, ext)
494
+ ext.tag!('hudson.plugins.git.extensions.impl.UserExclusion')
495
+ if model.choosing_strategy_ == 'gerrit'
496
+ ext.tag!('hudson.plugins.git.extensions.impl.BuildChooserSetting') do |strategy|
497
+ strategy.buildChooser(:class =>
498
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTriggerBuildChooser') do |gerrit|
499
+ gerrit.separator('#')
500
+ end
501
+ end
502
+ end
503
+ ext.tag!('hudson.plugins.git.extensions.impl.SubmoduleOption') do |submodule|
504
+ submodule.disableSubmodules(false)
505
+ submodule.recursiveSubmodules(false)
506
+ end
507
+ if model.basedir_
508
+ ext.tag!('hudson.plugins.git.extensions.impl.RelativeTargetDirectory') do |target|
509
+ target.relativeTargetDir(model.basedir_)
510
+ end
511
+ end
512
+ if model.reference_repo_
513
+ ext.tag!('hudson.plugins.git.extensions.impl.CloneOption') do |target|
514
+ target.reference(model.reference_repo_)
515
+ end
516
+ end
517
+ if model.git_config_name_
518
+ ext.tag!('hudson.plugins.git.extensions.impl.UserIdentity') do |identity|
519
+ identity.name(model.git_config_name_)
520
+ identity.email(model.git_config_email_)
521
+ end
522
+ end
523
+ ext.tag!('hudson.plugins.git.extensions.impl.CleanCheckout') if model.clean_
524
+ ext.tag!('hudson.plugins.git.extensions.impl.DisableRemotePoll') unless model.fastpoll_
525
+ ext.tag!('hudson.plugins.git.extensions.impl.WipeWorkspace') if model.wipe_workspace_
526
+ if model.files_
527
+ ext.tag!('hudson.plugins.git.extensions.impl.PathRestriction') do |restrict|
528
+ restrict.includedRegions(model.files_.join("\n"))
529
+ restrict.excludedRegions
530
+ end
531
+ else
532
+ ext.tag!('hudson.plugins.git.extensions.impl.PathRestriction')
533
+ end
534
+ end
535
+
536
+ def generate_param(model, params_def)
537
+ params_def.tag!('hudson.model.StringParameterDefinition') do |str_param|
538
+ str_param.name(model.name)
539
+ str_param.description(model.description_)
540
+ str_param.defaultValue(model.default_)
541
+ end
542
+ end
543
+
544
+ def generate_password_param(model, params_def)
545
+ params_def.tag!('hudson.model.PasswordParameterDefinition') do |str_param|
546
+ str_param.name(model.name)
547
+ str_param.description(model.description_)
548
+ str_param.defaultValue(model.default_)
549
+ end
550
+ end
551
+
552
+ def generate_blocking_job(model, properties)
553
+ properties.tag!('hudson.plugins.buildblocker.BuildBlockerProperty',
554
+ :plugin => 'build-blocker-plugin@1.4.1') do |blocker|
555
+
556
+ blocker.useBuildBlocker(true)
557
+ blocker.blockingJobs(model.jobs_.join("\n"))
558
+ end
559
+ end
560
+
561
+ def generate_postbuild(model, publishers)
562
+ model.publishers_.values.flatten.each { |e| generate(e, publishers) }
563
+ end
564
+
565
+ def generate_archive(model, publishers)
566
+ publishers.tag!('hudson.tasks.ArtifactArchiver') do |archive|
567
+ archive.artifacts(model.artifacts_)
568
+ archive.latestOnly(model.latest_only_) if model.latest_only_
569
+ archive.allowEmptyArchive(model.allow_empty_) if model.allow_empty_
570
+ end
571
+ end
572
+
573
+ def generate_email_publisher(model, publishers)
574
+ publishers.tag!('hudson.tasks.Mailer') do |email|
575
+ email.recipients(model.recipients_)
576
+ email.dontNotifyEveryUnstableBuild(!model.notify_every_unstable_build_)
577
+ email.sendToIndividuals(model.send_to_individuals_)
578
+ end
579
+ end
580
+
581
+ def generate_nunit_publisher(model, publishers)
582
+ publishers.tag!('hudson.plugins.nunit.NUnitPublisher') do |nunit|
583
+ nunit.testResultsPattern(model.test_results_pattern_)
584
+ nunit.debug(model.debug_)
585
+ nunit.keepJUnitReports(model.keep_junit_reports_)
586
+ nunit.skipJUnitArchiver(model.skip_junit_archiver_)
587
+ end
588
+ end
589
+
590
+ def generate_xunit_publisher(model, publishers)
591
+ publishers.tag!('xunit', :plugin => 'xunit@1.92') do |xunit|
592
+ xunit.types do |types|
593
+ types.NUnitJunitHudsonTestType do |nunit|
594
+ nunit.pattern(model.test_results_pattern_)
595
+ nunit.skipNoTestFiles(false)
596
+ nunit.failIfNotNew(true)
597
+ nunit.deleteOutputFiles(true)
598
+ nunit.stopProcessingIfError(true)
599
+ end
600
+ end
601
+ xunit.thresholds do |thresholds|
602
+ thresholds.tag!('org.jenkinsci.plugins.xunit.threshold.FailedThreshold') do |test|
603
+ if model.failed_threshold_[:total_failed_tests]
604
+ test.failureThreshold(model.failed_threshold_[:total_failed_tests])
605
+ else
606
+ test.failureThreshold
607
+ end
608
+ if model.failed_threshold_[:new_failed_tests]
609
+ test.failureNewThreshold(model.failed_threshold_[:new_failed_tests])
610
+ else
611
+ test.failureNewThreshold
612
+ end
613
+ if model.unstable_threshold_[:total_failed_tests]
614
+ test.unstableThreshold(model.unstable_threshold_[:total_failed_tests])
615
+ else
616
+ test.unstableThreshold
617
+ end
618
+ if model.unstable_threshold_[:new_failed_tests]
619
+ test.unstableNewThreshold(model.unstable_threshold_[:new_failed_tests])
620
+ else
621
+ test.unstableNewThreshold
622
+ end
623
+ end
624
+ thresholds.tag!('org.jenkinsci.plugins.xunit.threshold.SkippedThreshold') do |test|
625
+ if model.failed_threshold_[:total_skipped_tests]
626
+ test.failureThreshold(model.failed_threshold_[:total_skipped_tests])
627
+ else
628
+ test.failureThreshold
629
+ end
630
+ if model.failed_threshold_[:new_skipped_tests]
631
+ test.failureNewThreshold(model.failed_threshold_[:new_skipped_tests])
632
+ else
633
+ test.failureNewThreshold
634
+ end
635
+ if model.unstable_threshold_[:total_skipped_tests]
636
+ test.unstableThreshold(model.unstable_threshold_[:total_skipped_tests])
637
+ else
638
+ test.unstableThreshold
639
+ end
640
+ if model.unstable_threshold_[:new_skipped_tests]
641
+ test.unstableNewThreshold(model.unstable_threshold_[:new_skipped_tests])
642
+ else
643
+ test.unstableNewThreshold
644
+ end
645
+ end
646
+ end
647
+ xunit.thresholdMode(1)
648
+ xunit.extraConfiguration do |extra|
649
+ extra.testTimeMargin(3000)
650
+ end
651
+ end
652
+ end
653
+
654
+ def generate_html_publisher(model, publishers)
655
+ publishers.tag!('htmlpublisher.HtmlPublisher') do |html|
656
+ html.reportTargets do |target|
657
+ target.tag!('htmlpublisher.HtmlPublisherTarget') do |html_target|
658
+ html_target.reportName(model.name)
659
+ html_target.reportDir(model.dir_)
660
+ html_target.reportFiles(model.file_)
661
+ html_target.keepAll(model.keep_all_)
662
+ html_target.allowMissing(model.allow_missing_)
663
+ html_target.wrapperName('htmlpublisher-wrapper.html')
664
+ end
665
+ end
666
+ end
667
+ end
668
+
669
+ def generate_logparser(model, publishers)
670
+ publishers.tag!('hudson.plugins.logparser.LogParserPublisher') do |logparser|
671
+ logparser.unstableOnWarning(model.unstable_on_warning_)
672
+ logparser.failBuildOnError(model.fail_on_error_)
673
+ logparser.parsingRulesPath(model.rule_file_)
674
+ end
675
+ end
676
+
677
+ def generate_postbuild_script(model, publishers)
678
+ publishers.tag!('org.jenkinsci.plugins.postbuildscript.PostBuildScript') do |script|
679
+ script.buildSteps do |steps|
680
+ model.builders_.each { |e| generate(e, steps) }
681
+ end
682
+ end
683
+ end
684
+
685
+ def generate_postbuild_groovy(model, publishers)
686
+ publishers.tag!('org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder') do |recorder|
687
+ recorder.groovyScript(model.value_)
688
+ recorder.behavior(0)
689
+ end
690
+ end
691
+
692
+ def generate_postbuild_trigger(model, publishers)
693
+ publishers.tag!('hudson.plugins.parameterizedtrigger.BuildTrigger') do |trigger|
694
+ trigger.tag!('configs') do
695
+ generate_trigger_project(model, publishers)
696
+ end
697
+ end
698
+ end
699
+
700
+ def generate_trigger_project(model, publishers)
701
+ publishers.tag!('hudson.plugins.parameterizedtrigger.BuildTriggerConfig') do |project|
702
+ project.tag!('configs') do |config|
703
+ if model.predefined_parameters_
704
+ config.tag!('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do |params|
705
+ params.properties(model.predefined_parameters_)
706
+ end
707
+ end
708
+ if model.file_
709
+ config.tag!('hudson.plugins.parameterizedtrigger.FileBuildParameters') do |params|
710
+ params.propertiesFile(model.file_)
711
+ params.failTriggerOnMissing(model.fail_on_missing_) if model.fail_on_missing_
712
+ params.failTriggerOnMissing(false) unless model.fail_on_missing_
713
+ params.useMatrixChild(false)
714
+ params.onlyExactRuns(false)
715
+ end
716
+ end
717
+ if model.current_parameters_
718
+ config.tag!('hudson.plugins.parameterizedtrigger.CurrentBuildParameters')
719
+ end
720
+ if model.pass_through_git_commit_
721
+ config.tag!('hudson.plugins.git.GitRevisionBuildParameters') do |git|
722
+ git.combineQueuedCommits(true)
723
+ end
724
+ end
725
+ end
726
+ project.projects(model.project_.join(','))
727
+ project.condition('SUCCESS')
728
+ project.triggerWithNoParameters(model.trigger_with_no_parameters_)
729
+ end
730
+ end
731
+
732
+ def generate_clover_php(model, publishers)
733
+ publishers.tag!('org.jenkinsci.plugins.cloverphp.CloverPHPPublisher',
734
+ :plugin => 'cloverphp@0.3.3') do |clover|
735
+ clover.xmlLocation(model.xml_location_)
736
+ if model.html_report_dir_
737
+ clover.publishHtmlReport(true)
738
+ clover.reportDir(model.html_report_dir_)
739
+ end
740
+ clover.disableArchiving(!model.archive_)
741
+
742
+ if model.healthy_target_
743
+ clover.healthyTarget do |target|
744
+ target.methodCoverage(model.healthy_target_[:method])
745
+ target.statementCoverage(model.healthy_target_[:statement])
746
+ end
747
+ else
748
+ clover.healthyTarget
749
+ end
750
+
751
+ if model.unhealthy_target_
752
+ clover.unhealthyTarget do |target|
753
+ target.methodCoverage(model.unhealthy_target_[:method])
754
+ target.statementCoverage(model.unhealthy_target_[:statement])
755
+ end
756
+ else
757
+ clover.unhealthyTarget
758
+ end
759
+
760
+ if model.failing_target_
761
+ clover.failingTarget do |target|
762
+ target.methodCoverage(model.failing_target_[:method])
763
+ target.statementCoverage(model.failing_target_[:statement])
764
+ end
765
+ else
766
+ clover.failingTarget
767
+ end
768
+ end
769
+ end
770
+
771
+ def generate_javadoc(model, publishers)
772
+ publishers.tag!('hudson.tasks.JavadocArchiver',
773
+ :plugin => 'javadoc@1.1') do |doc|
774
+ doc.javadocDir(model.doc_dir_)
775
+ doc.keepAll(model.keep_all_)
776
+ end
777
+ end
778
+
779
+ def generate_pmd(model, publishers)
780
+ publishers.tag!('hudson.plugins.pmd.PmdPublisher',
781
+ :plugin => 'pmd@3.38') do |pmd|
782
+ pmd.healthy
783
+ pmd.unHealthy
784
+ pmd.thresholdLimit(model.threshold_limit_)
785
+ pmd.pluginName('[PMD]')
786
+ pmd.defaultEncoding
787
+ pmd.canRunOnFailed(false)
788
+ pmd.useStableBuildAsReference(false)
789
+ pmd.useDeltaValues(false)
790
+ pmd.thresholds do |analysis|
791
+ analysis.unstableTotalAll
792
+ analysis.unstableTotalHigh
793
+ analysis.unstableTotalNormal
794
+ analysis.unstableTotalLow
795
+ analysis.failedTotalAll
796
+ analysis.failedTotalHigh
797
+ analysis.failedTotalNormal
798
+ analysis.failedTotalLow
799
+ end
800
+ pmd.shouldDetectModules(false)
801
+ pmd.dontComputeNew(true)
802
+ pmd.doNotResolveRelativePaths(true)
803
+ pmd.pattern(model.pmd_results_)
804
+ end
805
+ end
806
+
807
+ def generate_claim_publisher(_, publishers)
808
+ publishers.tag!('hudson.plugins.claim.ClaimPublisher', :plugin => 'claim@2.3')
809
+ end
810
+
811
+ def generate_tap_publisher(model, publishers)
812
+ publishers.tag!('org.tap4j.plugin.TapPublisher',
813
+ :plugin => 'tap@1.20') do |tap|
814
+ tap.testResults(model.test_results_)
815
+ tap.failIfNoResults(model.fail_if_no_test_results_)
816
+ tap.failedTestsMarkBuildAsFailure(model.fail_if_test_fail_)
817
+ tap.includeCommentDiagnostics(model.include_diagnostics_)
818
+ tap.planRequired(model.require_plan_)
819
+ tap.verbose(model.verbose_)
820
+
821
+ tap.outputTapToConsole(false)
822
+ tap.enableSubtests(false)
823
+ tap.discardOldReports(false)
824
+ tap.todoIsFailure(false)
825
+ tap.validateNumberOfTests(false)
826
+ end
827
+ end
828
+
829
+ def generate_game_publisher(_, publishers)
830
+ publishers.tag!('hudson.plugins.cigame.GamePublisher', :plugin => 'ci-game@1.19')
831
+ end
832
+
833
+ def generate_chucknorris_publisher(_, publishers)
834
+ publishers.tag!('hudson.plugins.chucknorris.CordellWalkerRecorder', :plugin => 'chucknorris@0.5') do |chucknorris|
835
+ chucknorris.factGenerator
836
+ end
837
+ end
838
+ end
839
+ end