jenkins_pipeline_builder 0.5.2 → 0.6.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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +28 -43
  4. data/{spec/unit_tests/spec_helper.rb → .simplecov} +2 -15
  5. data/README.md +66 -11
  6. data/Rakefile +1 -25
  7. data/bin/generate +0 -1
  8. data/jenkins_pipeline_builder.gemspec +6 -6
  9. data/lib/jenkins_pipeline_builder.rb +14 -8
  10. data/lib/jenkins_pipeline_builder/builders.rb +207 -155
  11. data/lib/jenkins_pipeline_builder/cli/base.rb +1 -1
  12. data/lib/jenkins_pipeline_builder/cli/describe.rb +12 -8
  13. data/lib/jenkins_pipeline_builder/cli/list.rb +7 -7
  14. data/lib/jenkins_pipeline_builder/compiler.rb +62 -49
  15. data/lib/jenkins_pipeline_builder/extensions.rb +108 -0
  16. data/lib/jenkins_pipeline_builder/generator.rb +209 -160
  17. data/lib/jenkins_pipeline_builder/job_builder.rb +174 -105
  18. data/lib/jenkins_pipeline_builder/module_registry.rb +43 -59
  19. data/lib/jenkins_pipeline_builder/publishers.rb +166 -93
  20. data/lib/jenkins_pipeline_builder/pull_request.rb +7 -7
  21. data/lib/jenkins_pipeline_builder/triggers.rb +63 -40
  22. data/lib/jenkins_pipeline_builder/utils.rb +10 -10
  23. data/lib/jenkins_pipeline_builder/version.rb +1 -1
  24. data/lib/jenkins_pipeline_builder/view.rb +94 -123
  25. data/lib/jenkins_pipeline_builder/wrappers.rb +163 -96
  26. data/spec/lib/jenkins_pipeline_builder/compiler_spec.rb +31 -0
  27. data/spec/lib/jenkins_pipeline_builder/extensions_spec.rb +145 -0
  28. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/pullrequest_pipeline/PullRequest-10-SampleJob.yaml +2 -0
  29. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/pullrequest_pipeline/PullRequest-40-PullRequestGenerator.yaml +12 -0
  30. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/pullrequest_pipeline/project.yaml +12 -0
  31. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/SamplePipeline-10-Commit.yaml +3 -0
  32. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/SamplePipeline-20-Acceptance.yaml +3 -0
  33. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/SamplePipeline-30-Release.yaml +3 -0
  34. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/project.yaml +12 -0
  35. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/view.yaml +5 -0
  36. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline/jobs.tar.gz +0 -0
  37. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline/project.yaml +15 -0
  38. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/test_job.xml +48 -0
  39. data/spec/lib/jenkins_pipeline_builder/fixtures/view_test/duplicate_view.yaml +4 -0
  40. data/spec/lib/jenkins_pipeline_builder/fixtures/view_test/parent_view.yaml +9 -0
  41. data/spec/lib/jenkins_pipeline_builder/fixtures/view_test/regular_view.yaml +5 -0
  42. data/spec/lib/jenkins_pipeline_builder/generator_spec.rb +165 -0
  43. data/spec/lib/jenkins_pipeline_builder/module_registry_spec.rb +147 -0
  44. data/spec/lib/jenkins_pipeline_builder/pull_request_spec.rb +47 -0
  45. data/spec/lib/jenkins_pipeline_builder/spec_helper.rb +25 -0
  46. data/spec/lib/jenkins_pipeline_builder/utils_spec.rb +22 -0
  47. data/spec/lib/jenkins_pipeline_builder/view_spec.rb +54 -0
  48. metadata +54 -136
  49. data/lib/jenkins_pipeline_builder/extendable.rb +0 -42
  50. data/lib/jenkins_pipeline_builder/xml_helper.rb +0 -40
  51. data/spec/func_tests/spec_helper.rb +0 -18
  52. data/spec/func_tests/view_spec.rb +0 -90
  53. data/spec/unit_tests/compiler_spec.rb +0 -20
  54. data/spec/unit_tests/fixtures/files/Job-Build-Flow.xml +0 -57
  55. data/spec/unit_tests/fixtures/files/Job-Build-Flow.yaml +0 -22
  56. data/spec/unit_tests/fixtures/files/Job-Build-Maven.xml +0 -129
  57. data/spec/unit_tests/fixtures/files/Job-Build-Maven.yaml +0 -31
  58. data/spec/unit_tests/fixtures/files/Job-DSL.yaml +0 -14
  59. data/spec/unit_tests/fixtures/files/Job-DSL1.xml +0 -27
  60. data/spec/unit_tests/fixtures/files/Job-DSL2.xml +0 -25
  61. data/spec/unit_tests/fixtures/files/Job-Gem-Build.xml +0 -142
  62. data/spec/unit_tests/fixtures/files/Job-Gem-Build.yaml +0 -43
  63. data/spec/unit_tests/fixtures/files/Job-Generate-From-Template.xml +0 -32
  64. data/spec/unit_tests/fixtures/files/Job-Generate-From-Template.yaml +0 -8
  65. data/spec/unit_tests/fixtures/files/Job-Multi-Project.xml +0 -134
  66. data/spec/unit_tests/fixtures/files/Job-Multi-Project.yaml +0 -49
  67. data/spec/unit_tests/fixtures/files/archive_artifact.xml +0 -23
  68. data/spec/unit_tests/fixtures/files/archive_artifact.yaml +0 -5
  69. data/spec/unit_tests/fixtures/files/choice_parameter.xml +0 -39
  70. data/spec/unit_tests/fixtures/files/choice_parameter.yaml +0 -14
  71. data/spec/unit_tests/fixtures/files/concurrent_build.xml +0 -17
  72. data/spec/unit_tests/fixtures/files/concurrent_build.yaml +0 -4
  73. data/spec/unit_tests/fixtures/files/copy_artifact.xml +0 -30
  74. data/spec/unit_tests/fixtures/files/copy_artifact.yaml +0 -14
  75. data/spec/unit_tests/fixtures/files/discard_old.xml +0 -17
  76. data/spec/unit_tests/fixtures/files/discard_old.yaml +0 -8
  77. data/spec/unit_tests/fixtures/files/downstream.xml +0 -36
  78. data/spec/unit_tests/fixtures/files/downstream.yaml +0 -13
  79. data/spec/unit_tests/fixtures/files/downstream_blocking.xml +0 -19
  80. data/spec/unit_tests/fixtures/files/downstream_blocking.yaml +0 -15
  81. data/spec/unit_tests/fixtures/files/git_include_exclude.xml +0 -53
  82. data/spec/unit_tests/fixtures/files/git_include_exclude.yaml +0 -8
  83. data/spec/unit_tests/fixtures/files/groovy_postbuild.xml +0 -29
  84. data/spec/unit_tests/fixtures/files/groovy_postbuild.yaml +0 -9
  85. data/spec/unit_tests/fixtures/files/periodic_build.xml +0 -21
  86. data/spec/unit_tests/fixtures/files/periodic_build.yaml +0 -5
  87. data/spec/unit_tests/fixtures/files/post_build_script.xml +0 -28
  88. data/spec/unit_tests/fixtures/files/post_build_script.yaml +0 -11
  89. data/spec/unit_tests/fixtures/files/prepare_environment.xml +0 -17
  90. data/spec/unit_tests/fixtures/files/prepare_environment.yaml +0 -7
  91. data/spec/unit_tests/fixtures/files/project.yaml +0 -15
  92. data/spec/unit_tests/fixtures/files/properties_file.xml +0 -27
  93. data/spec/unit_tests/fixtures/files/properties_file.yaml +0 -8
  94. data/spec/unit_tests/fixtures/files/remote_job.xml +0 -18
  95. data/spec/unit_tests/fixtures/files/remote_job.yaml +0 -19
  96. data/spec/unit_tests/fixtures/files/rvm05.xml +0 -26
  97. data/spec/unit_tests/fixtures/files/rvm05.yaml +0 -5
  98. data/spec/unit_tests/fixtures/files/specific_priority.xml +0 -22
  99. data/spec/unit_tests/fixtures/files/specific_priority.yaml +0 -6
  100. data/spec/unit_tests/fixtures/files/throttle.xml +0 -17
  101. data/spec/unit_tests/fixtures/files/throttle.yaml +0 -8
  102. data/spec/unit_tests/fixtures/files/upstream.xml +0 -17
  103. data/spec/unit_tests/fixtures/files/upstream.yaml +0 -7
  104. data/spec/unit_tests/fixtures/pull_request/00.yaml +0 -14
  105. data/spec/unit_tests/fixtures/pull_request/10.yaml +0 -7
  106. data/spec/unit_tests/fixtures/pull_request/11.yaml +0 -4
  107. data/spec/unit_tests/fixtures/pull_request/project.yaml +0 -11
  108. data/spec/unit_tests/fixtures/templates/external_job.yaml +0 -4
  109. data/spec/unit_tests/fixtures/templates/project_with_jobs.yaml +0 -25
  110. data/spec/unit_tests/generator_spec.rb +0 -94
  111. data/spec/unit_tests/module_registry_spec.rb +0 -16
  112. data/spec/unit_tests/resolve_dependencies_spec.rb +0 -266
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a1e9094c74dee6457c8b9feb1f72c386bec441a6
4
- data.tar.gz: 3f9f57f5be8a20d1ed0ca2c0f988c99d827a05b9
3
+ metadata.gz: 7732d073bba8e738befc23bd6c71249ccbf23ff5
4
+ data.tar.gz: 122b6fe751d205a6b108fab75ac549efa987444f
5
5
  SHA512:
6
- metadata.gz: 5b8af333e06b4ccba511bb2f268081547b5208dcdffce6f1a3cdd14b6815e813e12f10b98071a95ac7ea4770522acf1f70e34e931ac3a051806fedb9a33a180c
7
- data.tar.gz: 55148fc5a1bb693af47ffc1f47f805195cce2ca6222dbeb5cf3c55b61eb592cb3304b3d4cae882da02dba4fb929846cd3e981074b57208f0f12868c871bec6b1
6
+ metadata.gz: 8a880f17364c6d7a44aefd11f6cadabb9b4aaf8107d539accc2c81ffd61c9cc33dafe277d2508e5d463c11b062ae88fc83708f7920aad5f360163fefd9631609
7
+ data.tar.gz: b0e8b310565ba4327071029011a7a734d9383c04a1275a2587d753a70715cb5385355bbb7354233c71e93157b9eebcc9843ed078f37fd191c541b366a1ad2ee9
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  out
3
3
  Gemfile.lock
4
4
  *.gem
5
+ .DS_Store
data/.rubocop.yml CHANGED
@@ -7,63 +7,48 @@
7
7
 
8
8
  #######
9
9
  # WIP
10
- # Offense count: 17
11
- Style/LineLength:
12
- Enabled: false
13
- Max: 120
14
-
15
- # Offense count: 8
16
- # Configuration parameters: CountComments.
17
- Style/MethodLength:
18
- Enabled: false
19
- Max: 30
10
+ Style/CyclomaticComplexity:
11
+ Max: 9
20
12
 
21
13
  ########
22
14
  # Fix these later
23
- # Offense count: 1
24
- Lint/Eval:
25
- Enabled: false
26
-
27
- # Offense count: 6
28
- Lint/ShadowingOuterLocalVariable:
29
- Enabled: false
30
-
31
- # Offense count: 2
32
- # Configuration parameters: EnforcedStyle, SupportedStyles.
33
- Style/ClassAndModuleChildren:
34
- Enabled: false
35
-
36
- # Offense count: 6
37
15
  # Configuration parameters: CountComments.
38
16
  Style/ClassLength:
39
- Enabled: false
40
- Max: 506
41
-
42
- # Offense count: 12
43
- Style/CyclomaticComplexity:
44
- Max: 20
17
+ #Enabled: false
18
+ Max: 500
45
19
 
46
- # Offense count: 17
47
- Style/Documentation:
48
- Enabled: false
20
+ #######
21
+ # Finalized settings
49
22
 
50
- Style/AccessModifierIndentation:
51
- Enabled: false
23
+ Style/LineLength:
24
+ Max: 120
25
+ Exclude:
26
+ - 'spec/lib/jenkins_pipeline_builder/compiler_spec.rb'
27
+ - 'spec/lib/jenkins_pipeline_builder/view_spec.rb'
28
+ - 'spec/lib/jenkins_pipeline_builder/pull_request_spec.rb'
52
29
 
53
- #######
54
- # We actually want these off
30
+ # Configuration parameters: CountComments.
31
+ Style/MethodLength:
32
+ Max: 25
55
33
 
56
- # Offense count: 2
57
- Lint/UselessSetterCall:
34
+ Style/Documentation:
58
35
  Enabled: false
59
36
 
60
- # Offense count: 9
61
37
  # Configuration parameters: EnforcedStyle, SupportedStyles.
62
38
  Style/Next:
63
- Enabled: false
39
+ Exclude:
40
+ - 'lib/jenkins_pipeline_builder/publishers.rb'
41
+ - 'lib/jenkins_pipeline_builder/triggers.rb'
42
+ - 'lib/jenkins_pipeline_builder/wrappers.rb'
43
+ - 'lib/jenkins_pipeline_builder/builders.rb'
44
+ - 'lib/jenkins_pipeline_builder/job_builder.rb'
64
45
 
65
- # Offense count: 7
66
46
  # Configuration parameters: EnforcedStyle, SupportedStyles.
67
47
  Style/VariableName:
68
- Enabled: false
48
+ Exclude:
49
+ - 'lib/jenkins_pipeline_builder/publishers.rb'
50
+ - 'lib/jenkins_pipeline_builder/triggers.rb'
51
+ - 'lib/jenkins_pipeline_builder/wrappers.rb'
52
+ - 'lib/jenkins_pipeline_builder/builders.rb'
53
+ - 'lib/jenkins_pipeline_builder/job_builder.rb'
69
54
  #######
@@ -1,12 +1,7 @@
1
- require 'logger'
2
- require 'rspec'
3
-
4
- require 'simplecov'
5
1
  require 'simplecov-rcov'
6
- require 'webmock/rspec'
7
-
8
2
  SimpleCov.profiles.define 'spec' do
9
3
  add_group 'jenkins_pipeline_builder', '/lib/'
4
+ add_filter 'spec'
10
5
  coverage_dir 'out/coverage'
11
6
  formatter SimpleCov::Formatter::MultiFormatter[
12
7
  SimpleCov::Formatter::Console,
@@ -20,13 +15,5 @@ class SimpleCov::Formatter::Console
20
15
  end
21
16
  end
22
17
 
23
- SimpleCov.start 'spec' # if ENV["COVERAGE"]
24
-
25
- require File.expand_path('../../../lib/jenkins_pipeline_builder', __FILE__)
26
- require 'rspec/matchers'
27
- require 'equivalent-xml'
18
+ SimpleCov.start 'spec' #if ENV["COVERAGE"]
28
19
 
29
- RSpec.configure do |config|
30
- config.before(:each) do
31
- end
32
- end
data/README.md CHANGED
@@ -169,7 +169,6 @@ Here's a high level overview of what's available:
169
169
  - params: |
170
170
  param1
171
171
  param2
172
- condition: FAILURE
173
172
  trigger_with_no_parameters: false
174
173
  # Below is Optional, values can be SUCCESS, FAILURE, UNSTABLE, never
175
174
  fail: FAILURE # Fail this build step if the triggered build is worse or equal to
@@ -251,6 +250,10 @@ Here's a high level overview of what's available:
251
250
  exclude: '' # Optional, exclude string/pattern
252
251
  latest_only: false # Optional, true or false, defaults to false
253
252
  allow_empty: false # Optional, true or false, defaults to false
253
+ - email_notifications:
254
+ recipients: 'test@example.com' # Whitepace-delimited list of recipients
255
+ send_if_unstable: false # Optional, default to true
256
+ send_to_individuals: true # Optional, default to false
254
257
  triggers:
255
258
  - git_push: true
256
259
  - scm_polling: 'H/5 * * * *'
@@ -330,25 +333,77 @@ If a set of Defaults is specified with the name global, that will be used by all
330
333
  param1: 'value 1'
331
334
  ```
332
335
 
336
+ Extending the Pipeline Builder
337
+ ------------------------------
338
+
339
+ Have a feature you want to test out before adding it to the source? Now you can create a quick "extension" to the pipeline builder to add new or overwrite existing functionality.
340
+
341
+ To add an extension, create an "extensions" directiroy inside of "pipeline" and create a file named "myExtension.rb" (or any name). Use `JenkinsPipelineBuilder.extend` to register your extension.
342
+
343
+ When registering, you must use one of the following register methods, depending on what category your change falls into:
344
+ * register_job_attribute
345
+ * register_builder
346
+ * register_publisher
347
+ * register_wrapper
348
+ * register_trigger
349
+
350
+ For help figuring out what category your change is, examine the config.xml for a job that uses your feature. If it is a first child of the root "project" node, your change is a job_attribute. Otherwise it should be either a builder, publisher, wrapper, or trigger, depending what child node it is found in the XML tree.
351
+
352
+ Here is an example of extending the pipeline builder with a new publisher:
353
+
354
+ ```ruby
355
+ JenkinsPipelineBuilder.extend do |registry|
356
+ registry.register_publisher :yaml_name, "Jenkins UI Name", "Description of this feature" { |params, xml| apply_extension(params, xml) }
357
+
358
+ def apply_extension(params, xml)
359
+ xml.send("new_element") {
360
+ xml.property params[:value]
361
+ }
362
+ end
363
+ end
364
+ ```
365
+
366
+ OR
367
+
368
+ ```ruby
369
+ JenkinsPipelineBuilder.extend do |registry|
370
+ registry.register_publisher :yaml_name, "Jenkins UI Name", "Description of this feature" do |params, xml|
371
+ xml.send("new_element") {
372
+ xml.property params[:value]
373
+ }
374
+ end
375
+ end
376
+ ```
377
+
378
+ Finally, you can add the new DSL in your YAML:
379
+
380
+ ```yaml
381
+ - job:
382
+ name: 'Example-Job'
383
+ publishers:
384
+ - yaml_name:
385
+ value: 'example'
386
+ ```
387
+
333
388
  PLUGINS:
334
389
  --------
335
390
 
336
391
  A number of the DSL options rely on Jenkins plugins, including:
337
392
 
338
- * ansicolor - "AnsiColor"
393
+ * ansicolor - "AnsiColor"
339
394
  * (view) type: 'categorizedView' - "categorized-view"
340
- * hipchat - "HipChat Plugin"
341
- * inject_env_vars - "Environment Injector Plugin"
342
- * priority - "Priority Sorter plugin"
343
- * downstream - "Parameterized Trigger plugin"
344
- * rvm - "Rvm"
345
- * throttle - "Throttle Concurrent Builds Plug-in"
346
- * timestamp - "Timestamper"
347
- * groovy_postbuild - "Groovy Postbuild"
395
+ * hipchat - "HipChat Plugin"
396
+ * inject_env_vars - "Environment Injector Plugin"
397
+ * priority - "Priority Sorter plugin"
398
+ * downstream - "Parameterized Trigger plugin"
399
+ * rvm - "Rvm"
400
+ * throttle - "Throttle Concurrent Builds Plug-in"
401
+ * timestamp - "Timestamper"
402
+ * groovy_postbuild - "Groovy Postbuild"
348
403
 
349
404
  Just about every plugin above can be installed through Jenkins (Manage Jenkins > Manage Plugins > Available)
350
405
 
351
- Exceptions:
406
+ For a list of all currently supported plugins run `generate list` or `generate list type` to see all of a specific type
352
407
 
353
408
  CONTRIBUTING:
354
409
  ----------------
data/Rakefile CHANGED
@@ -26,31 +26,7 @@ require 'rubocop/rake_task'
26
26
 
27
27
  RuboCop::RakeTask.new
28
28
 
29
- RSpec::Core::RakeTask.new(:spec, :tag) do |spec|
30
- spec.pattern = '.spec/**/*_spec.rb'
31
- spec.verbose = true
32
- spec.fail_on_error = false
33
- spec.rspec_opts = spec_output 'spec.xml'
34
- end
35
-
36
- def spec_output(filename)
37
- "--color --format documentation --format RspecJunitFormatter --out out/#{filename}"
38
- end
39
-
40
- RSpec::Core::RakeTask.new(:unit_tests) do |spec|
41
- spec.pattern = FileList['spec/unit_tests/*_spec.rb']
42
- spec.rspec_opts = ['--color', '--format documentation']
43
- end
44
-
45
- RSpec::Core::RakeTask.new(:func_tests) do |spec|
46
- spec.pattern = FileList['spec/func_tests/*_spec.rb']
47
- spec.rspec_opts = ['--color', '--format documentation']
48
- end
49
-
50
- RSpec::Core::RakeTask.new(:test) do |spec|
51
- spec.pattern = FileList['spec/*/*.rb']
52
- spec.rspec_opts = ['--color', '--format documentation']
53
- end
29
+ RSpec::Core::RakeTask.new
54
30
 
55
31
  YARD::Config.load_plugin 'thor'
56
32
  YARD::Rake::YardocTask.new do |t|
data/bin/generate CHANGED
@@ -19,7 +19,6 @@
19
19
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  # THE SOFTWARE.
22
- #
23
22
 
24
23
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
25
24
  require 'jenkins_pipeline_builder'
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = JenkinsPipelineBuilder::VERSION
9
9
  spec.authors = ['Igor Moochnick', 'Joseph Henrich']
10
10
  spec.email = %w(igor.moochnick@gmail.com crimsonknave@gmail.com)
11
- spec.description = %q(This is a simple and easy-to-use Jenkins Pipeline generator with features focused on
12
- automating Job & Pipeline creation from the YAML files checked-in with your application source code)
13
- spec.summary = %q(This gem is will boostrap your Jenkins pipelines)
11
+ spec.description = 'This is a simple and easy-to-use Jenkins Pipeline generator with features focused on
12
+ automating Job & Pipeline creation from the YAML files checked-in with your application source code'
13
+ spec.summary = 'This gem is will boostrap your Jenkins pipelines'
14
14
  spec.homepage = 'https://github.com/ConstantContact/jenkins_pipeline_builder'
15
15
  spec.license = 'MIT'
16
16
 
@@ -21,15 +21,15 @@ automating Job & Pipeline creation from the YAML files checked-in with your appl
21
21
 
22
22
  ENV['NOKOGIRI_USE_SYSTEM_LIBRARIES'] = 'true'
23
23
 
24
- spec.add_dependency 'nokogiri', '~> 1.5.0'
25
- spec.add_dependency 'jenkins_api_client', '~> 0.14.1'
24
+ spec.add_dependency 'nokogiri', '~> 1.6.0'
25
+ spec.add_dependency 'jenkins_api_client', '~> 1.0.0'
26
26
  spec.add_dependency 'thor', '>= 0.18.0'
27
27
  spec.add_dependency 'activesupport'
28
28
  spec.add_dependency 'archive-tar-minitar'
29
29
 
30
30
  spec.add_development_dependency 'bundler', '~> 1.3'
31
31
  spec.add_development_dependency 'rake'
32
- spec.add_development_dependency 'rspec', '~> 2.14'
32
+ spec.add_development_dependency 'rspec', '~> 3.0'
33
33
  spec.add_development_dependency 'bump'
34
34
  spec.add_development_dependency 'json'
35
35
  spec.add_development_dependency 'gem-release'
@@ -25,8 +25,6 @@ require 'active_support/core_ext'
25
25
 
26
26
  require 'jenkins_pipeline_builder/version'
27
27
  require 'jenkins_pipeline_builder/utils'
28
- require 'jenkins_pipeline_builder/xml_helper'
29
- require 'jenkins_pipeline_builder/extendable'
30
28
  require 'jenkins_pipeline_builder/compiler'
31
29
  require 'jenkins_pipeline_builder/module_registry'
32
30
  require 'jenkins_pipeline_builder/pull_request'
@@ -48,18 +46,26 @@ module JenkinsPipelineBuilder
48
46
  @credentials
49
47
  end
50
48
 
49
+ def logger
50
+ @_client.logger
51
+ end
52
+
51
53
  def registry
52
54
  generator.module_registry
53
55
  end
56
+
57
+ def load_registry
58
+ load 'jenkins_pipeline_builder/builders.rb'
59
+ load 'jenkins_pipeline_builder/job_builder.rb'
60
+ load 'jenkins_pipeline_builder/wrappers.rb'
61
+ load 'jenkins_pipeline_builder/publishers.rb'
62
+ load 'jenkins_pipeline_builder/triggers.rb'
63
+ end
54
64
  end
55
65
  end
56
66
  JenkinsPipelineBuilder.generator
57
- require 'jenkins_pipeline_builder/builders'
58
- require 'jenkins_pipeline_builder/job_builder'
59
- require 'jenkins_pipeline_builder/wrappers'
60
- require 'jenkins_pipeline_builder/publishers'
61
- require 'jenkins_pipeline_builder/triggers'
62
-
67
+ require 'jenkins_pipeline_builder/extensions'
68
+ JenkinsPipelineBuilder.load_registry
63
69
  require 'jenkins_pipeline_builder/cli/helper'
64
70
  require 'jenkins_pipeline_builder/cli/view'
65
71
  require 'jenkins_pipeline_builder/cli/pipeline'
@@ -18,207 +18,259 @@
18
18
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
20
  # THE SOFTWARE.
21
- #
22
21
 
23
- module JenkinsPipelineBuilder
24
- class Builders < Extendable
25
- register :multi_job do |params, xml|
26
- params[:phases].each do |name, content|
27
- xml.send('com.tikal.jenkins.plugins.multijob.MultiJobBuilder') do
28
- xml.phaseName name
29
- xml.phaseJobs do
30
- content[:jobs].each do |job|
31
- xml.send('com.tikal.jenkins.plugins.multijob.PhaseJobsConfig') do
32
- xml.jobName job[:name]
33
- xml.currParams job[:current_params] || false
34
- xml.exposedSCM job[:exposed_scm] || false
35
- if job[:config]
36
- xml.configs do
37
- if job[:config].key? :predefined_build_parameters
38
- xml.send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do
39
- xml.properties job[:config][:predefined_build_parameters].join "\n"
40
- end
22
+ builder do
23
+ name :multi_job
24
+ plugin_id 123
25
+ min_version 0
26
+ announced false
27
+
28
+ xml do |params|
29
+ params[:phases].each do |name, content|
30
+ send('com.tikal.jenkins.plugins.multijob.MultiJobBuilder') do
31
+ phaseName name
32
+ phaseJobs do
33
+ content[:jobs].each do |job|
34
+ send('com.tikal.jenkins.plugins.multijob.PhaseJobsConfig') do
35
+ jobName job[:name]
36
+ currParams job[:current_params] || false
37
+ exposedSCM job[:exposed_scm] || false
38
+ if job[:config]
39
+ configs do
40
+ if job[:config].key? :predefined_build_parameters
41
+ send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do
42
+ properties job[:config][:predefined_build_parameters].join "\n"
41
43
  end
42
44
  end
43
45
  end
44
46
  end
45
47
  end
46
48
  end
47
- xml.continuationCondition content[:continue_condition] || 'SUCCESSFUL'
48
49
  end
50
+ continuationCondition content[:continue_condition] || 'SUCCESSFUL'
49
51
  end
50
52
  end
53
+ end
54
+ end
51
55
 
52
- register :maven3 do |params, xml|
53
- xml.send('org.jfrog.hudson.maven3.Maven3Builder') do
54
- xml.mavenName params[:mavenName] || 'tools-maven-3.0.3'
55
- xml.rootPom params[:rootPom]
56
- xml.goals params[:goals]
57
- xml.mavenOpts params[:options]
58
- end
56
+ builder do
57
+ name :maven3
58
+ plugin_id 123
59
+ min_version 0
60
+ announced false
61
+
62
+ xml do |params|
63
+ send('org.jfrog.hudson.maven3.Maven3Builder') do
64
+ mavenName params[:mavenName] || 'tools-maven-3.0.3'
65
+ rootPom params[:rootPom]
66
+ goals params[:goals]
67
+ mavenOpts params[:options]
59
68
  end
69
+ end
70
+ end
60
71
 
61
- register :shell_command do |param, xml|
62
- xml.send('hudson.tasks.Shell') do
63
- xml.command param
64
- end
72
+ builder do
73
+ name :shell_command
74
+ plugin_id 123
75
+ min_version 0
76
+ announced false
77
+
78
+ xml do |param|
79
+ send('hudson.tasks.Shell') do
80
+ command param
65
81
  end
82
+ end
83
+ end
66
84
 
67
- register :inject_vars_file do |params, xml|
68
- xml.EnvInjectBuilder do
69
- xml.info do
70
- xml.propertiesFilePath params
71
- end
85
+ builder do
86
+ name :inject_vars_file
87
+ plugin_id 123
88
+ min_version 0
89
+ announced false
90
+
91
+ xml do |params|
92
+ EnvInjectBuilder do
93
+ info do
94
+ propertiesFilePath params
72
95
  end
73
96
  end
97
+ end
98
+ end
74
99
 
75
- register :blocking_downstream do |params, xml|
76
- colors = { 'SUCCESS' => { ordinal: 0, color: 'BLUE' }, 'FAILURE' => { ordinal: 2, color: 'RED' }, 'UNSTABLE' => { ordinal: 1, color: 'YELLOW' } }
77
- xml.send('hudson.plugins.parameterizedtrigger.TriggerBuilder', 'plugin' => 'parameterized-trigger') do
78
- xml.configs do
79
- xml.send('hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig') do
100
+ builder do
101
+ name :blocking_downstream
102
+ plugin_id 123
103
+ min_version 0
104
+ announced false
80
105
 
81
- xml.configs do
82
- params[:data] = [{ params: '' }] unless params[:data]
83
- params[:data].each do |config|
84
- if config[:params]
85
- xml.send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do
86
- xml.properties config[:params]
87
- end
106
+ xml do |params|
107
+ colors = {
108
+ 'SUCCESS' => { ordinal: 0, color: 'BLUE' },
109
+ 'FAILURE' => { ordinal: 2, color: 'RED' },
110
+ 'UNSTABLE' => { ordinal: 1, color: 'YELLOW' }
111
+ }
112
+ send('hudson.plugins.parameterizedtrigger.TriggerBuilder', 'plugin' => 'parameterized-trigger') do
113
+ configs do
114
+ send('hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig') do
115
+
116
+ configs do
117
+ params[:data] = [{ params: '' }] unless params[:data]
118
+ params[:data].each do |config|
119
+ if config[:params]
120
+ send('hudson.plugins.parameterizedtrigger.PredefinedBuildParameters') do
121
+ properties config[:params]
88
122
  end
89
- if config[:file]
90
- xml.send('hudson.plugins.parameterizedtrigger.FileBuildParameters') do
91
- xml.propertiesFile config[:file]
92
- xml.failTriggerOnMissing false
93
- end
123
+ end
124
+ if config[:file]
125
+ send('hudson.plugins.parameterizedtrigger.FileBuildParameters') do
126
+ propertiesFile config[:file]
127
+ failTriggerOnMissing false
94
128
  end
95
129
  end
96
130
  end
97
- xml.projects params[:project]
98
- xml.condition params[:condition] || 'SUCCESS'
99
- xml.triggerWithNoParameters params[:trigger_with_no_parameters] || false
100
- xml.block do
101
- if params[:fail] && colors.include?(params[:fail])
102
- xml.buildStepFailureThreshold do
103
- xml.name params[:fail]
104
- xml.ordinal colors[params[:fail]][:ordinal]
105
- xml.color colors[params[:fail]][:color]
106
- xml.completeBuild 'true'
107
- end
131
+ end
132
+ projects params[:project]
133
+ condition 'ALWAYS'
134
+ triggerWithNoParameters params[:trigger_with_no_parameters] || false
135
+ block do
136
+ if params[:fail] && colors.include?(params[:fail])
137
+ buildStepFailureThreshold do
138
+ name params[:fail]
139
+ ordinal colors[params[:fail]][:ordinal]
140
+ color colors[params[:fail]][:color]
141
+ completeBuild 'true'
108
142
  end
109
- if params[:mark_fail] && colors.include?(params[:mark_fail])
110
- xml.failureThreshold do
111
- xml.name params[:mark_fail]
112
- xml.ordinal colors[params[:mark_fail]][:ordinal]
113
- xml.color colors[params[:mark_fail]][:color]
114
- xml.completeBuild 'true'
115
- end
143
+ end
144
+ if params[:mark_fail] && colors.include?(params[:mark_fail])
145
+ failureThreshold do
146
+ name params[:mark_fail]
147
+ ordinal colors[params[:mark_fail]][:ordinal]
148
+ color colors[params[:mark_fail]][:color]
149
+ completeBuild 'true'
116
150
  end
117
- if params[:mark_unstable] && colors.include?(params[:mark_unstable])
118
- xml.unstableThreshold do
119
- xml.name params[:mark_unstable]
120
- xml.ordinal colors[params[:mark_unstable]][:ordinal]
121
- xml.color colors[params[:mark_unstable]][:color]
122
- xml.completeBuild 'true'
123
- end
151
+ end
152
+ if params[:mark_unstable] && colors.include?(params[:mark_unstable])
153
+ unstableThreshold do
154
+ name params[:mark_unstable]
155
+ ordinal colors[params[:mark_unstable]][:ordinal]
156
+ color colors[params[:mark_unstable]][:color]
157
+ completeBuild 'true'
124
158
  end
125
159
  end
126
- xml.buildAllNodesWithLabel false
127
160
  end
161
+ buildAllNodesWithLabel false
128
162
  end
129
163
  end
130
164
  end
165
+ end
166
+ end
131
167
 
132
- register :remote_job do |params, xml|
133
- parameters = params[:parameters][:content].split("\n") if params[:parameters] && params[:parameters][:content]
134
- xml.send('org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration', 'plugin' => 'Parameterized-Remote-Trigger') do
135
- xml.remoteJenkinsName params[:server]
136
- xml.job params[:job_name]
137
- xml.shouldNotFailBuild params[:continue_on_remote_failure] if params[:continue_on_remote_failure]
138
- xml.pollInterval params[:polling_interval] if params[:polling_interval]
139
- xml.blockBuildUntilComplete params[:blocking] if params[:blocking]
140
- xml.token
141
- if params[:parameters] && params[:parameters][:content]
142
- xml.parameters parameters.join("\n")
143
- xml.parameterList do
144
- parameters.each do |p|
145
- xml.string p
146
- end
147
- end
148
- elsif params[:parameters] && params[:parameters][:file]
149
- xml.loadParamsFromFile 'true'
150
- xml.parameterFile params[:parameters][:file]
151
- else
152
- xml.parameters
153
- xml.parameterList do
154
- xml.string
168
+ builder do
169
+ name :remote_job
170
+ plugin_id 123
171
+ min_version 0
172
+ announced false
173
+
174
+ xml do |params|
175
+ param_list = params[:parameters][:content].split("\n") if params[:parameters] && params[:parameters][:content]
176
+ send(
177
+ 'org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration',
178
+ 'plugin' => 'Parameterized-Remote-Trigger'
179
+ ) do
180
+ remoteJenkinsName params[:server]
181
+ job params[:job_name]
182
+ shouldNotFailBuild params[:continue_on_remote_failure] if params[:continue_on_remote_failure]
183
+ pollInterval params[:polling_interval] if params[:polling_interval]
184
+ blockBuildUntilComplete params[:blocking] if params[:blocking]
185
+ token
186
+ if params[:parameters] && params[:parameters][:content]
187
+ parameters params[:parameters][:content]
188
+ parameterList do
189
+ param_list.each do |p|
190
+ string p
155
191
  end
156
192
  end
157
- if params[:credentials] && params[:credentials][:type]
158
- xml.overrideAuth 'true'
159
- xml.auth do
160
- xml.send('org.jenkinsci.plugins.ParameterizedRemoteTrigger.Auth') do
161
- if params[:credentials][:type] == 'api_token'
162
- xml.authType 'apiToken'
163
- xml.username params[:credentials][:username]
164
- xml.API__TOKEN params[:credentials][:api_token]
165
- else
166
- xml.authType 'none'
167
- end
193
+ elsif params[:parameters] && params[:parameters][:file]
194
+ loadParamsFromFile 'true'
195
+ parameterFile params[:parameters][:file]
196
+ else
197
+ # This was here for some reason?
198
+ # parameters
199
+ parameterList do
200
+ string
201
+ end
202
+ end
203
+ if params[:credentials] && params[:credentials][:type]
204
+ overrideAuth 'true'
205
+ auth do
206
+ send('org.jenkinsci.plugins.ParameterizedRemoteTrigger.Auth') do
207
+ if params[:credentials][:type] == 'api_token'
208
+ authType 'apiToken'
209
+ username params[:credentials][:username]
210
+ API__TOKEN params[:credentials][:api_token]
211
+ else
212
+ authType 'none'
168
213
  end
169
214
  end
170
215
  end
171
216
  end
172
217
  end
218
+ end
219
+ end
173
220
 
174
- register :copy_artifact do |params, xml|
175
- xml.send('hudson.plugins.copyartifact.CopyArtifact', 'plugin' => 'copyartifact') do
176
- xml.project params[:project]
177
- xml.filter params[:artifacts]
178
- xml.target params[:target_directory]
179
- xml.parameters params[:filter] if params[:filter]
180
- if params[:selector] && params[:selector][:type]
181
- case params[:selector][:type]
182
- when 'saved'
183
- xml.send('selector', 'class' => 'hudson.plugins.copyartifact.SavedBuildSelector')
184
- when 'triggered'
185
- xml.send('selector', 'class' => 'hudson.plugins.copyartifact.TriggeredBuildSelector') do
186
- xml.fallbackToLastSuccessful params[:selector][:fallback] if params[:selector][:fallback]
187
- end
188
- when 'permalink'
189
- xml.send('selector', 'class' => 'hudson.plugins.copyartifact.PermalinkBuildSelector') do
190
- xml.id params[:selector][:id] if params[:selector][:id]
191
- end
192
- when 'specific'
193
- xml.send('selector', 'class' => 'hudson.plugins.copyartifact.SpecificBuildSelector') do
194
- xml.buildNumber params[:selector][:number] if params[:selector][:number]
195
- end
196
- when 'workspace'
197
- xml.send('selector', 'class' => 'hudson.plugins.copyartifact.WorkspaceSelector')
198
- when 'parameter'
199
- xml.send('selector', 'class' => 'hudson.plugins.copyartifact.ParameterizedBuildSelector') do
200
- xml.parameterName params[:selector][:param] if params[:selector][:param]
201
- end
202
- else
203
- xml.send('selector', 'class' => 'hudson.plugins.copyartifact.StatusBuildSelector') do
204
- xml.stable params[:selector][:stable] if params[:selector][:stable]
205
- end
221
+ builder do
222
+ name :copy_artifact
223
+ plugin_id 123
224
+ min_version 0
225
+ announced false
226
+
227
+ xml do |params|
228
+ send('hudson.plugins.copyartifact.CopyArtifact', 'plugin' => 'copyartifact') do
229
+ project params[:project]
230
+ filter params[:artifacts]
231
+ target params[:target_directory]
232
+ parameters params[:filter] if params[:filter]
233
+ if params[:selector] && params[:selector][:type]
234
+ case params[:selector][:type]
235
+ when 'saved'
236
+ send('selector', 'class' => 'hudson.plugins.copyartifact.SavedBuildSelector')
237
+ when 'triggered'
238
+ send('selector', 'class' => 'hudson.plugins.copyartifact.TriggeredBuildSelector') do
239
+ fallbackToLastSuccessful params[:selector][:fallback] if params[:selector][:fallback]
240
+ end
241
+ when 'permalink'
242
+ send('selector', 'class' => 'hudson.plugins.copyartifact.PermalinkBuildSelector') do
243
+ id params[:selector][:id] if params[:selector][:id]
244
+ end
245
+ when 'specific'
246
+ send('selector', 'class' => 'hudson.plugins.copyartifact.SpecificBuildSelector') do
247
+ buildNumber params[:selector][:number] if params[:selector][:number]
248
+ end
249
+ when 'workspace'
250
+ send('selector', 'class' => 'hudson.plugins.copyartifact.WorkspaceSelector')
251
+ when 'parameter'
252
+ send('selector', 'class' => 'hudson.plugins.copyartifact.ParameterizedBuildSelector') do
253
+ parameterName params[:selector][:param] if params[:selector][:param]
206
254
  end
207
255
  else
208
- xml.send('selector', 'class' => 'hudson.plugins.copyartifact.StatusBuildSelector')
256
+ send('selector', 'class' => 'hudson.plugins.copyartifact.StatusBuildSelector') do
257
+ stable params[:selector][:stable] if params[:selector][:stable]
258
+ end
209
259
  end
210
- if params[:fingerprint].nil?
211
- xml.doNotFingerprintArtifacts false
260
+ else
261
+ send('selector', 'class' => 'hudson.plugins.copyartifact.StatusBuildSelector')
262
+ end
263
+ if params[:fingerprint].nil?
264
+ doNotFingerprintArtifacts false
265
+ else
266
+ if params[:fingerprint].to_s == 'true'
267
+ doNotFingerprintArtifacts false
212
268
  else
213
- if params[:fingerprint].to_s == 'true'
214
- xml.doNotFingerprintArtifacts false
215
- else
216
- xml.doNotFingerprintArtifacts true
217
- end
269
+ doNotFingerprintArtifacts true
218
270
  end
219
- xml.flatten true if params[:flatten]
220
- xml.optional true if params[:optional]
221
271
  end
272
+ flatten true if params[:flatten]
273
+ optional true if params[:optional]
222
274
  end
223
275
  end
224
276
  end