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,2 @@
1
+ require_relative './rubyjobbuilderdsl/builder'
2
+ require_relative './rubyjobbuilderdsl/deployer'
@@ -0,0 +1,13 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'rubyjobbuilderdsl'
3
+ s.version = '0.0.0'
4
+ s.date = '2014-08-13'
5
+ s.summary = 'Ruby Internal DSL for creating Jenkins jobs'
6
+ s.description = 'Ruby Internal DSL for creating Jenkins jobs'
7
+ s.authors = ['Huy Le']
8
+ s.email = 'lehuy20@gmail.com'
9
+ s.files = Dir['**/*']
10
+ s.license = 'MIT'
11
+ s.add_runtime_dependency 'nokogiri'
12
+ s.add_runtime_dependency 'builder'
13
+ end
@@ -0,0 +1,14 @@
1
+ {
2
+ "folders":
3
+ [
4
+ {
5
+ "path": ".",
6
+ "folder_exclude_patterns": [".bundle", "vendor"]
7
+ }
8
+ ],
9
+ "settings":
10
+ {
11
+ "tab_size": 2,
12
+ "translate_tabs_to_spaces": true
13
+ }
14
+ }
data/run_tests.sh ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/sh
2
+
3
+ set -ex
4
+
5
+ bundle install --deployment
6
+
7
+ bundle exec rake
@@ -0,0 +1,27 @@
1
+ require_relative '../lib/rubyjobbuilderdsl'
2
+
3
+ builder = JenkinsJob::Builder.new
4
+
5
+ builder.freestyle 'hello_mars' do
6
+ shell 'echo hello mars > hello_mars-1.0.$BUILD_NUMBER.txt && gzip hello_mars-1.0.$BUILD_NUMBER.txt'
7
+ end
8
+
9
+ builder.view 'test' do
10
+ job 'test-.*'
11
+ end
12
+
13
+ JenkinsJob::Deployer.new(builder).run do
14
+ disable_job 'hello_mars'
15
+ wipeout_workspace 'hello_mars'
16
+ delete_job 'hello_mars'
17
+ delete_view 'test'
18
+
19
+ each do |name, xml, type|
20
+ upload_view(name, xml) if type == :view
21
+ upload_job(name, xml) if type == :job
22
+ end
23
+
24
+ groovysh 'println "hello world"'
25
+ enable_job 'hello_mars'
26
+ trigger_job 'hello_mars'
27
+ end
data/sample/local.ini ADDED
@@ -0,0 +1,4 @@
1
+ [jenkins]
2
+ url=http://localhost:8080/
3
+ user=jenkins-jobs
4
+ password=7bb352e4f3da683c17247f3abf88f47c
data/test/test_ant.rb ADDED
@@ -0,0 +1,38 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlAnt < Test::Unit::TestCase
4
+ def test_ant
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ ant do
9
+ target 'clean', 'lint'
10
+ buildfile 'foo.xml'
11
+ java_opts '-Xmx512m', '-Xms512m'
12
+ property 'skipTest' => 'false'
13
+ end
14
+ end
15
+
16
+ actual = builder.config_as_xml_node('foo')
17
+ { 'hudson.tasks.Ant/targets' => 'clean lint',
18
+ 'hudson.tasks.Ant/buildFile' => 'foo.xml',
19
+ 'hudson.tasks.Ant/properties' => '-DskipTest=false',
20
+ 'hudson.tasks.Ant/antOpts' => '-Xmx512m -Xms512m',
21
+ }.each do |k, v|
22
+ assert_equal v, actual.xpath('./project/builders/' \
23
+ "#{k}").text, k
24
+ end
25
+ end
26
+
27
+ def test_ant_defalt_target
28
+ builder = JenkinsJob::Builder.new
29
+
30
+ builder.freestyle 'foo' do
31
+ ant do
32
+ end
33
+ end
34
+
35
+ actual = builder.config_as_xml_node('foo')
36
+ assert actual.at('./project/builders/hudson.tasks.Ant/targets')
37
+ end
38
+ end
@@ -0,0 +1,24 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlArchive < Test::Unit::TestCase
4
+ def test_postbuild_archive
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ postbuild do
9
+ archive do
10
+ file 'a/**',
11
+ 'b/**',
12
+ 'c/lib/**'
13
+ latest_only true
14
+ end
15
+ end
16
+ end
17
+
18
+ actual = builder.config_as_xml_node('foo')
19
+ { 'artifacts' => 'a/**,b/**,c/lib/**',
20
+ 'latestOnly' => 'true' }.each do |k, v|
21
+ assert_equal v, actual.xpath("./project/publishers/hudson.tasks.ArtifactArchiver/#{k}").text, k
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlArtifactory < Test::Unit::TestCase
4
+ def test_artifactory
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ artifactory do
9
+ server 'artifactory.mycompany.com'
10
+ repository 'bar'
11
+ deploy '*.gz'
12
+ end
13
+ end
14
+
15
+ actual = builder.config_as_xml_node('foo')
16
+ { 'details/artifactoryName' => 'artifactory.mycompany.com',
17
+ 'details/repositoryKey' => 'bar',
18
+ 'details/snapshotsRepositoryKey' => 'bar',
19
+ 'deployPattern' => '*.gz',
20
+ 'deployBuildInfo' => 'false',
21
+ 'includeEnvVars' => 'false',
22
+ }.each do |k, v|
23
+ assert_equal v, actual.xpath("./project/buildWrappers/org.jfrog.hudson.generic.ArtifactoryGenericConfigurator/#{k}").text, k
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlBlockingJob < Test::Unit::TestCase
4
+ def test_blocking_job
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'pre-deploy' do
8
+ blocked_by 'deploy', 'post-deploy'
9
+ end
10
+
11
+ actual = builder.config_as_xml_node('pre-deploy')
12
+
13
+ { 'useBuildBlocker' => 'true',
14
+ 'blockingJobs' => "deploy\npost-deploy" }.each do |k, v|
15
+ assert v, actual.xpath("./project/properties/hudson.plugins.buildblocker.BuildBlockerProperty/#{k}").text
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestChuckNorrisPublisher < Test::Unit::TestCase
4
+ def test_postbuild_chucknorris_publisher
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ postbuild do
9
+ chucknorris
10
+ end
11
+ end
12
+
13
+ actual = builder.config_as_xml_node('foo')
14
+
15
+ assert actual.at('./project/publishers/hudson.plugins.chucknorris.CordellWalkerRecorder/factGenerator')
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlClaimPublisher < Test::Unit::TestCase
4
+ def test_postbuild_nunit_publisher
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ postbuild do
9
+ allow_broken_build_claiming
10
+ end
11
+ end
12
+
13
+ actual = builder.config_as_xml_node('foo')
14
+
15
+ assert actual.at('./project/publishers/hudson.plugins.claim.ClaimPublisher')
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlCloverPhp < Test::Unit::TestCase
4
+ def test_clover_php
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ postbuild do
9
+ publish_cloverphp do
10
+ xml_location 'build/coverage_clover.xml'
11
+ html_report_dir 'build/coverage'
12
+ healthy_target :method => 70, :statement => 80
13
+ end
14
+ end
15
+ end
16
+
17
+ actual = builder.config_as_xml_node('foo')
18
+ { 'publishHtmlReport' => 'true',
19
+ 'reportDir' => 'build/coverage',
20
+ 'xmlLocation' => 'build/coverage_clover.xml',
21
+ 'disableArchiving' => 'false' }.each do |k, v|
22
+ assert_equal v, actual.xpath("./project/publishers/org.jenkinsci.plugins.cloverphp.CloverPHPPublisher/#{k}").text, k
23
+ end
24
+
25
+ { 'methodCoverage' => '70',
26
+ 'statementCoverage' => '80' }.each do |k, v|
27
+ assert_equal v, actual.xpath("./project/publishers/org.jenkinsci.plugins.cloverphp.CloverPHPPublisher/healthyTarget/#{k}").text, k
28
+ end
29
+ %w(unhealthyTarget failingTarget).each do |target|
30
+ assert actual.at("./project/publishers/org.jenkinsci.plugins.cloverphp.CloverPHPPublisher/#{target}")
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,44 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlConcurrent < Test::Unit::TestCase
4
+ def test_concurrent_per_project
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ concurrent do
9
+ max_per_node 2
10
+ max_total 0
11
+ end
12
+ end
13
+
14
+ actual = builder.config_as_xml_node('foo')
15
+
16
+ assert_equal 'true', actual.xpath('./project/concurrentBuild').text
17
+
18
+ { 'maxConcurrentPerNode' => '2', 'maxConcurrentTotal' => '0', 'throttleEnabled' => 'true',
19
+ 'throttleOption' => 'project', 'configVersion' => '1' }.each do |k, v|
20
+ assert_equal v, actual.xpath("./project/properties/hudson.plugins.throttleconcurrents.ThrottleJobProperty/#{k}").text, k
21
+ end
22
+ end
23
+
24
+ def test_concurrent_per_category
25
+ builder = JenkinsJob::Builder.new
26
+
27
+ builder.freestyle 'foo' do
28
+ concurrent do
29
+ max_per_node 2
30
+ max_total 0
31
+ category 'servicetest'
32
+ end
33
+ end
34
+
35
+ actual = builder.config_as_xml_node('foo')
36
+
37
+ assert_equal 'true', actual.xpath('./project/concurrentBuild').text
38
+
39
+ { 'maxConcurrentPerNode' => '2', 'maxConcurrentTotal' => '0', 'throttleEnabled' => 'true',
40
+ 'throttleOption' => 'category', 'configVersion' => '1', 'categories/string' => 'servicetest' }.each do |k, v|
41
+ assert_equal v, actual.xpath("./project/properties/hudson.plugins.throttleconcurrents.ThrottleJobProperty/#{k}").text, k
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,45 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlCopyArtifact < Test::Unit::TestCase
4
+ def test_copy_lastest
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ copyartifact 'bar' do
9
+ file 'a/**',
10
+ 'b/**'
11
+ end
12
+ end
13
+
14
+ actual = builder.config_as_xml_node('foo')
15
+
16
+ assert_equal 'bar', actual.xpath('./project/builders/hudson.plugins.copyartifact.CopyArtifact/project').text
17
+ assert_equal 'a/**,b/**', actual.xpath('./project/builders/hudson.plugins.copyartifact.CopyArtifact/filter').text
18
+ assert actual.at('./project/builders/hudson.plugins.copyartifact.CopyArtifact/target')
19
+
20
+ assert_equal 'false', actual.xpath('./project/builders/hudson.plugins.copyartifact.CopyArtifact/flatten').text
21
+ assert_equal 'false', actual.xpath('./project/builders/hudson.plugins.copyartifact.CopyArtifact/optional').text
22
+ assert actual.at('./project/builders/hudson.plugins.copyartifact.CopyArtifact/parameters')
23
+
24
+ assert_equal 'false', actual.xpath('./project/builders/hudson.plugins.copyartifact.CopyArtifact/' \
25
+ "selector[contains(@class,'hudson.plugins.copyartifact.StatusBuildSelector')]/stable").text
26
+ end
27
+
28
+ def test_copy_specific_build
29
+ builder = JenkinsJob::Builder.new
30
+
31
+ builder.freestyle 'foo' do
32
+ copyartifact 'bar' do
33
+ build_number '$ARTIFACT_BUILD_NUMBER'
34
+ file 'a/**',
35
+ 'b/**'
36
+ to '$BUILD_NUMBER'
37
+ end
38
+ end
39
+
40
+ actual = builder.config_as_xml_node('foo')
41
+
42
+ assert_equal '$ARTIFACT_BUILD_NUMBER', actual.xpath('./project/builders/hudson.plugins.copyartifact.CopyArtifact/' \
43
+ "selector[contains(@class,'hudson.plugins.copyartifact.SpecificBuildSelector')]/buildNumber").text
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlDefaultSetting < Test::Unit::TestCase
4
+ def test_created_jobs_inherit_default_setting
5
+ builder = JenkinsJob::Builder.new do
6
+ node 'windows'
7
+ quiet_period 5
8
+ end
9
+
10
+ builder.freestyle 'show-env' do
11
+ shell 'env'
12
+ end
13
+
14
+ builder.freestyle 'show-dir' do
15
+ shell 'pwd'
16
+ end
17
+
18
+ actual_show_env = builder.config_as_xml_node('show-env')
19
+ actual_show_dir = builder.config_as_xml_node('show-dir')
20
+
21
+ assert_equal '5', actual_show_env.xpath('./project/quietPeriod').text
22
+ assert_equal 'windows', actual_show_env.xpath('./project/assignedNode').text
23
+ assert_equal 'env', actual_show_env.xpath('./project/builders/hudson.tasks.Shell/command').text
24
+
25
+ assert_equal '5', actual_show_dir.xpath('./project/quietPeriod').text
26
+ assert_equal 'windows', actual_show_dir.xpath('./project/assignedNode').text
27
+ assert_equal 'pwd', actual_show_dir.xpath('./project/builders/hudson.tasks.Shell/command').text
28
+ end
29
+ end
@@ -0,0 +1,44 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlEmailPublisher < Test::Unit::TestCase
4
+ def test_postbuild_email_publisher
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ postbuild do
9
+ send_email 'test@example.com' do
10
+ notify_every_unstable_build false
11
+ send_to_individuals true
12
+ end
13
+ end
14
+ end
15
+
16
+ actual = builder.config_as_xml_node('foo')
17
+
18
+ { 'recipients' => 'test@example.com',
19
+ 'dontNotifyEveryUnstableBuild' => 'true',
20
+ 'sendToIndividuals' => 'true'
21
+ }.each do |k, v|
22
+ assert_equal v, actual.xpath("./project/publishers/hudson.tasks.Mailer/#{k}").text, k
23
+ end
24
+ end
25
+
26
+ def test_postbuild_email_publisher_defaults
27
+ builder = JenkinsJob::Builder.new
28
+
29
+ builder.freestyle 'foo' do
30
+ postbuild do
31
+ send_email 'test@example.com'
32
+ end
33
+ end
34
+
35
+ actual = builder.config_as_xml_node('foo')
36
+
37
+ { 'recipients' => 'test@example.com',
38
+ 'dontNotifyEveryUnstableBuild' => 'false',
39
+ 'sendToIndividuals' => 'false'
40
+ }.each do |k, v|
41
+ assert_equal v, actual.xpath("./project/publishers/hudson.tasks.Mailer/#{k}").text, k
42
+ end
43
+ end
44
+ end
data/test/test_flow.rb ADDED
@@ -0,0 +1,19 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlFlow < Test::Unit::TestCase
4
+ def test_flow
5
+ groovy_code = <<EOS
6
+ build("ops-" + params["GERRIT_BRANCH"], GERRIT_REFSPEC: "refs/heads/${params["GERRIT_BRANCH"]}",
7
+ GERRIT_BRANCH: params["GERRIT_BRANCH"])
8
+ EOS
9
+ builder = JenkinsJob::Builder.new
10
+ builder.flow 'foo' do
11
+ dsl groovy_code
12
+ end
13
+
14
+ actual = builder.config_as_xml_node('foo')
15
+ { 'buildNeedsWorkspace' => 'true', 'dsl' => groovy_code }.each do |k, v|
16
+ assert_equal v, actual.xpath("./com.cloudbees.plugins.flow.BuildFlow/#{k}").text, k
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,52 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlFreestyle < Test::Unit::TestCase
4
+ def test_freestyle
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ desc 'this is a foo'
9
+ workspace 'foo-$BUILD_NUMBER'
10
+ node 'windows'
11
+ quiet_period 5
12
+ end
13
+
14
+ actual = builder.config_as_xml_node('foo')
15
+
16
+ assert_equal '', actual.xpath('./project/actions').text
17
+ assert_equal 'this is a foo', actual.xpath('./project/description').text
18
+ assert_equal 'false', actual.xpath('./project/keepDependencies').text
19
+ assert_equal 'false', actual.xpath('./project/blockBuildWhenDownstreamBuilding').text
20
+ assert_equal 'false', actual.xpath('./project/concurrentBuild').text
21
+ assert_equal 'foo-$BUILD_NUMBER', actual.xpath('./project/customWorkspace').text
22
+ assert_equal '5', actual.xpath('./project/quietPeriod').text
23
+ assert_equal 'windows', actual.xpath('./project/assignedNode').text
24
+ assert_equal 'false', actual.xpath('./project/canRoam').text
25
+ assert_equal '', actual.xpath('./project/properties').text
26
+ assert_equal 'hudson.scm.NullSCM', actual.xpath('./project/scm').attr('class').text
27
+ assert_equal '', actual.xpath('./project/builders').text
28
+ assert_equal '', actual.xpath('./project/publishers').text
29
+ assert_equal '', actual.xpath('./project/buildWrappers').text
30
+ end
31
+
32
+ def test_builders
33
+ builder = JenkinsJob::Builder.new
34
+
35
+ builder.freestyle 'foo' do
36
+ powershell 'Get-Service bar.* | foreach { sc.exe stop $_.Name }'
37
+ shell 'rm -rf * || true'
38
+ batch 'c:\Nuget\NuGet.exe Install ServiceTestRunner -source ArtifactoryBuildScripts -config c:\Nuget\NuGet.Config'
39
+ end
40
+
41
+ actual = builder.config_as_xml_node('foo')
42
+
43
+ assert_equal 'Get-Service bar.* | foreach { sc.exe stop $_.Name }',
44
+ actual.xpath('./project/builders/hudson.plugins.powershell.PowerShell/command').text
45
+
46
+ assert_equal 'rm -rf * || true',
47
+ actual.xpath('./project/builders/hudson.tasks.Shell/command').text
48
+
49
+ assert_equal 'c:\Nuget\NuGet.exe Install ServiceTestRunner -source ArtifactoryBuildScripts -config c:\Nuget\NuGet.Config',
50
+ actual.xpath('./project/builders/hudson.tasks.BatchFile/command').text
51
+ end
52
+ end
@@ -0,0 +1,17 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestGamePublisher < Test::Unit::TestCase
4
+ def test_postbuild_game_publisher
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.freestyle 'foo' do
8
+ postbuild do
9
+ game
10
+ end
11
+ end
12
+
13
+ actual = builder.config_as_xml_node('foo')
14
+
15
+ assert actual.at('./project/publishers/hudson.plugins.cigame.GamePublisher')
16
+ end
17
+ end
@@ -0,0 +1,117 @@
1
+ require_relative './test_xml_generator'
2
+
3
+ class TestXmlGerrit < Test::Unit::TestCase
4
+ def test_gerrit_project
5
+ builder = JenkinsJob::Builder.new
6
+
7
+ builder.flow 'foo' do
8
+ gerrit do
9
+ patchset_uploaded
10
+
11
+ project 'foo/bar' do
12
+ branch 'master', 'release'
13
+ file 'a/**',
14
+ 'b/**'
15
+ end
16
+ end
17
+ end
18
+
19
+ actual = builder.config_as_xml_node('foo')
20
+
21
+ { 'compareType' => 'PLAIN', 'pattern' => 'foo/bar' }.each do |k, v|
22
+ assert_equal v, actual.xpath('./com.cloudbees.plugins.flow.BuildFlow/triggers/' \
23
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger/gerritProjects/' \
24
+ "com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject/#{k}").text, k
25
+ end
26
+
27
+ { 1 => { 'compareType' => 'ANT', 'pattern' => 'master' },
28
+ 2 => { 'compareType' => 'ANT', 'pattern' => 'release' } }.each do |item, data|
29
+ data.each do |k, v|
30
+ assert_equal v, actual.xpath('./com.cloudbees.plugins.flow.BuildFlow/triggers/' \
31
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger/gerritProjects/' \
32
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject/branches/' \
33
+ "com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch[#{item}]/#{k}").text, "item #{item}, #{k}"
34
+ end
35
+ end
36
+
37
+ { 1 => { 'compareType' => 'ANT', 'pattern' => 'a/**' },
38
+ 2 => { 'compareType' => 'ANT', 'pattern' => 'b/**' } }.each do |item, data|
39
+ data.each do |k, v|
40
+ assert_equal v, actual.xpath('./com.cloudbees.plugins.flow.BuildFlow/triggers/' \
41
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger/gerritProjects/' \
42
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject/filePaths/' \
43
+ "com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.FilePath[#{item}]/#{k}").text, "item #{item}, #{k}"
44
+ end
45
+ end
46
+ end
47
+
48
+ def test_patchset_uploaded
49
+ builder = JenkinsJob::Builder.new
50
+
51
+ builder.flow 'foo' do
52
+ gerrit do
53
+ patchset_uploaded
54
+ end
55
+ end
56
+
57
+ actual = builder.config_as_xml_node('foo')
58
+
59
+ assert actual.at('./com.cloudbees.plugins.flow.BuildFlow/triggers/' \
60
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger/triggerOnEvents/' \
61
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginPatchsetCreatedEvent')
62
+ end
63
+
64
+ def test_gerrit_change_merged
65
+ builder = JenkinsJob::Builder.new
66
+
67
+ builder.flow 'foo' do
68
+ gerrit do
69
+ change_merged
70
+ end
71
+ end
72
+
73
+ actual = builder.config_as_xml_node('foo')
74
+ assert actual.at('./com.cloudbees.plugins.flow.BuildFlow/triggers/' \
75
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger/triggerOnEvents/' \
76
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginChangeMergedEvent')
77
+ end
78
+
79
+ def test_gerrit_one_comment_added
80
+ builder = JenkinsJob::Builder.new
81
+
82
+ builder.flow 'foo' do
83
+ gerrit do
84
+ comment_added 'Code-Review' => '2'
85
+ end
86
+ end
87
+
88
+ actual = builder.config_as_xml_node('foo')
89
+ { 'verdictCategory' => 'Code-Review', 'commentAddedTriggerApprovalValue' => '2' }.each do |k, v|
90
+ assert_equal v, actual.xpath('./com.cloudbees.plugins.flow.BuildFlow/triggers/' \
91
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger/triggerOnEvents/' \
92
+ "com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginCommentAddedEvent/#{k}").text, k
93
+ end
94
+ end
95
+
96
+ def test_gerrit_more_comment_added
97
+ builder = JenkinsJob::Builder.new
98
+
99
+ builder.flow 'foo' do
100
+ gerrit do
101
+ comment_added 'Code-Review' => '2', 'Verified' => '1'
102
+ end
103
+ end
104
+
105
+ actual = builder.config_as_xml_node('foo')
106
+
107
+ { 1 => { 'verdictCategory' => 'Code-Review', 'commentAddedTriggerApprovalValue' => '2' },
108
+ 2 => { 'verdictCategory' => 'Verified', 'commentAddedTriggerApprovalValue' => '1' } }.each do |item, data|
109
+ data.each do |k, v|
110
+ assert_equal v, actual.xpath('./com.cloudbees.plugins.flow.BuildFlow/triggers/' \
111
+ 'com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger/triggerOnEvents/' \
112
+ "com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginCommentAddedEvent[#{item}]/#{k}").text,
113
+ "item #{item}, #{k}"
114
+ end
115
+ end
116
+ end
117
+ end