go_cd_feed 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rvmrc +1 -0
  4. data/.zeroci.yml +1 -0
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +32 -0
  7. data/README.textile +36 -0
  8. data/Rakefile +39 -0
  9. data/bin/go_api_client +3 -0
  10. data/go_api_client.gemspec +27 -0
  11. data/lib/go_api_client.rb +60 -0
  12. data/lib/go_api_client/atom.rb +4 -0
  13. data/lib/go_api_client/atom/author.rb +42 -0
  14. data/lib/go_api_client/atom/entry.rb +34 -0
  15. data/lib/go_api_client/atom/feed.rb +44 -0
  16. data/lib/go_api_client/atom/feed_page.rb +49 -0
  17. data/lib/go_api_client/commit.rb +30 -0
  18. data/lib/go_api_client/helpers.rb +1 -0
  19. data/lib/go_api_client/helpers/simple_attribute_support.rb +11 -0
  20. data/lib/go_api_client/http_fetcher.rb +43 -0
  21. data/lib/go_api_client/job.rb +64 -0
  22. data/lib/go_api_client/pipeline.rb +49 -0
  23. data/lib/go_api_client/stage.rb +57 -0
  24. data/lib/go_api_client/user.rb +36 -0
  25. data/lib/go_api_client/version.rb +9 -0
  26. data/ssh_keys/git-ci.zeroci.com +27 -0
  27. data/ssh_keys/git-ci.zeroci.com.pub +1 -0
  28. data/ssh_keys/git-ssh +3 -0
  29. data/test/fixtures/building/job_1.xml +41 -0
  30. data/test/fixtures/building/job_2.xml +43 -0
  31. data/test/fixtures/building/job_3.xml +40 -0
  32. data/test/fixtures/building/job_4.xml +40 -0
  33. data/test/fixtures/building/pipeline_1.xml +45 -0
  34. data/test/fixtures/building/pipeline_2.xml +39 -0
  35. data/test/fixtures/building/pipeline_3.xml +71 -0
  36. data/test/fixtures/building/stages.xml +180 -0
  37. data/test/fixtures/building/stages_1.xml +16 -0
  38. data/test/fixtures/building/stages_2.xml +16 -0
  39. data/test/fixtures/building/stages_3.xml +16 -0
  40. data/test/fixtures/building/stages_4.xml +16 -0
  41. data/test/fixtures/job_1_console.log.txt +82 -0
  42. data/test/fixtures/job_2_console.log.txt +82 -0
  43. data/test/fixtures/jobs_1.xml +29 -0
  44. data/test/fixtures/jobs_2.xml +29 -0
  45. data/test/fixtures/jobs_with_no_properties.xml +42 -0
  46. data/test/fixtures/ordering/go/api/jobs/1.xml +29 -0
  47. data/test/fixtures/ordering/go/api/jobs/10.xml +31 -0
  48. data/test/fixtures/ordering/go/api/jobs/2.xml +29 -0
  49. data/test/fixtures/ordering/go/api/jobs/3.xml +29 -0
  50. data/test/fixtures/ordering/go/api/jobs/4.xml +29 -0
  51. data/test/fixtures/ordering/go/api/jobs/5.xml +29 -0
  52. data/test/fixtures/ordering/go/api/jobs/6.xml +29 -0
  53. data/test/fixtures/ordering/go/api/jobs/7.xml +31 -0
  54. data/test/fixtures/ordering/go/api/jobs/8.xml +31 -0
  55. data/test/fixtures/ordering/go/api/jobs/9.xml +31 -0
  56. data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/1.xml +31 -0
  57. data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/2.xml +26 -0
  58. data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/3.xml +26 -0
  59. data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/4.xml +27 -0
  60. data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/5.xml +33 -0
  61. data/test/fixtures/ordering/go/api/pipelines/defaultPipeline/stages.xml +255 -0
  62. data/test/fixtures/ordering/go/api/stages/1.xml +14 -0
  63. data/test/fixtures/ordering/go/api/stages/10.xml +14 -0
  64. data/test/fixtures/ordering/go/api/stages/2.xml +14 -0
  65. data/test/fixtures/ordering/go/api/stages/3.xml +14 -0
  66. data/test/fixtures/ordering/go/api/stages/4.xml +14 -0
  67. data/test/fixtures/ordering/go/api/stages/5.xml +14 -0
  68. data/test/fixtures/ordering/go/api/stages/6.xml +14 -0
  69. data/test/fixtures/ordering/go/api/stages/7.xml +14 -0
  70. data/test/fixtures/ordering/go/api/stages/8.xml +14 -0
  71. data/test/fixtures/ordering/go/api/stages/9.xml +14 -0
  72. data/test/fixtures/pagination/stages.xml +636 -0
  73. data/test/fixtures/pagination/stages_before_7916973.xml +615 -0
  74. data/test/fixtures/pagination/stages_before_7959831.xml +615 -0
  75. data/test/fixtures/pipelines_1.xml +32 -0
  76. data/test/fixtures/stages.xml +63 -0
  77. data/test/fixtures/stages_1.xml +14 -0
  78. data/test/fixtures/stages_2.xml +14 -0
  79. data/test/fixtures/stages_empty.xml +9 -0
  80. data/test/go_api_client/atom/author_test.rb +27 -0
  81. data/test/go_api_client/atom/entry_test.rb +27 -0
  82. data/test/go_api_client/atom/feed_page_test.rb +41 -0
  83. data/test/go_api_client/atom/feed_test.rb +25 -0
  84. data/test/go_api_client/building_test.rb +38 -0
  85. data/test/go_api_client/commit_test.rb +38 -0
  86. data/test/go_api_client/job_test.rb +42 -0
  87. data/test/go_api_client/pipeline_test.rb +34 -0
  88. data/test/go_api_client/stage_test.rb +75 -0
  89. data/test/go_api_client/user_test.rb +27 -0
  90. data/test/test_helper.rb +31 -0
  91. metadata +272 -0
@@ -0,0 +1 @@
1
+ require 'go_api_client/helpers/simple_attribute_support'
@@ -0,0 +1,11 @@
1
+ module GoApiClient
2
+ module Helpers
3
+ module SimpleAttributesSupport
4
+ def initialize(attributes={})
5
+ attributes.each do |name, value|
6
+ send("#{name}=", value) unless value.to_s.empty?
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,43 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+
4
+ module GoApiClient
5
+ class HttpFetcher
6
+
7
+ def initialize(options={})
8
+ @username = options[:username]
9
+ @password = options[:password]
10
+ end
11
+
12
+ def get(url, options={})
13
+ uri = URI.parse(url)
14
+
15
+ puts "[DEBUG] fetching #{url}"
16
+
17
+ password = options[:password] || uri.password || @password
18
+ username = options[:username] || uri.user || @username
19
+ params = options[:params] || {}
20
+
21
+ uri.query = URI.encode_www_form(params) if params.any?
22
+
23
+ http = Net::HTTP.new(uri.host, uri.port)
24
+ http.use_ssl = uri.scheme == 'https'
25
+
26
+ res = http.start do |http|
27
+ req = Net::HTTP::Get.new(uri.request_uri)
28
+ req.basic_auth(username, password) if username || password
29
+ http.request(req)
30
+ end
31
+
32
+ case res
33
+ when Net::HTTPSuccess
34
+ return res
35
+ end
36
+ res.error!
37
+ end
38
+
39
+ def get_response_body(url, options={})
40
+ get(url, options).body
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,64 @@
1
+ module GoApiClient
2
+ class Job
3
+ attr_accessor :artifacts_uri, :console_log_url, :url, :identifier, :http_fetcher, :name
4
+
5
+ PROPERTIES = {
6
+ :duration => :cruise_job_duration,
7
+ :result => :cruise_job_result,
8
+ :scheduled => :cruise_timestamp_01_scheduled,
9
+ :assigned => :cruise_timestamp_02_assigned,
10
+ :preparing => :cruise_timestamp_03_preparing,
11
+ :building => :cruise_timestamp_04_building,
12
+ :completing => :cruise_timestamp_05_completing,
13
+ :completed => :cruise_timestamp_06_completed,
14
+ }
15
+
16
+ attr_accessor *PROPERTIES.keys
17
+
18
+ include GoApiClient::Helpers::SimpleAttributesSupport
19
+
20
+ def initialize(root, attributes={})
21
+ @root = root
22
+ super(attributes)
23
+ end
24
+
25
+ class << self
26
+ def from(url, attributes = {})
27
+ attributes[:http_fetcher] ||= GoApiClient::HttpFetcher.new
28
+ doc = Nokogiri::XML(attributes[:http_fetcher].get_response_body(url))
29
+ self.new(doc.root, attributes).parse!
30
+ end
31
+ end
32
+
33
+ def parse!
34
+ self.artifacts_uri = @root.xpath("./artifacts").first.attributes["baseUri"].value
35
+ self.url = href_from(@root.xpath("./link[@rel='self']"))
36
+ self.identifier = @root.xpath('./id').first.content
37
+ self.name = @root.attributes['name'].value
38
+ PROPERTIES.each do |variable, property_name|
39
+ property_value = @root.xpath("./properties/property[@name='#{property_name}']").first.content rescue nil
40
+
41
+ next if property_value.nil? || property_value.empty?
42
+
43
+ if property_name =~ /timestamp/
44
+ property_value = Time.parse(property_value).utc
45
+ elsif property_value =~ /^\d+$/
46
+ property_value = property_value.to_i
47
+ end
48
+ self.send("#{variable}=", property_value)
49
+ end
50
+
51
+ @root = nil
52
+ self
53
+ end
54
+
55
+ def console_log_url
56
+ @console_log_url ||= "#{artifacts_uri}/cruise-output/console.log"
57
+ end
58
+
59
+ private
60
+ def href_from(xml)
61
+ xml.first.attribute('href').value unless xml.empty?
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,49 @@
1
+ module GoApiClient
2
+ class Pipeline
3
+ attr_accessor :url, :commits, :label, :counter, :authors, :stages, :name, :http_fetcher, :identifier, :schedule_time
4
+
5
+ include GoApiClient::Helpers::SimpleAttributesSupport
6
+
7
+ def initialize(root, attributes={})
8
+ @root = root
9
+ super(attributes)
10
+ end
11
+
12
+ class << self
13
+ def from(url, attributes = {})
14
+ attributes[:http_fetcher] ||= GoApiClient::HttpFetcher.new
15
+ doc = Nokogiri::XML(attributes[:http_fetcher].get_response_body(url))
16
+ self.new(doc.root, attributes).parse!
17
+ end
18
+ end
19
+
20
+ def stages
21
+ @stages ||= []
22
+ end
23
+
24
+ def parse!
25
+ self.name = @root.attributes["name"].value
26
+ self.label = @root.attributes["label"].value
27
+ self.counter = @root.attributes["counter"].value.to_i
28
+ self.url = href_from(@root.xpath("./link[@rel='self']"))
29
+ self.identifier = @root.xpath("./id").first.content
30
+ self.schedule_time = Time.parse(@root.xpath('./scheduleTime').first.content).utc
31
+ self.commits = @root.xpath('./materials/material[@type != "DependencyMaterial"]/modifications/changeset').collect do |changeset|
32
+ Commit.new(changeset).parse!
33
+ end
34
+
35
+ @root = nil
36
+ self
37
+ end
38
+
39
+ def authors
40
+ @authors ||= stages.first.authors
41
+ end
42
+
43
+ private
44
+ def href_from(xml)
45
+ xml.first.attribute('href').value unless xml.empty?
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,57 @@
1
+ require 'time'
2
+ module GoApiClient
3
+ class Stage
4
+ attr_accessor :authors, :url, :name, :result, :jobs, :pipeline, :completed_at, :pipeline_cache, :http_fetcher, :counter, :identifier
5
+
6
+ include GoApiClient::Helpers::SimpleAttributesSupport
7
+
8
+ def initialize(root, attributes={})
9
+ @root = root
10
+ super(attributes)
11
+ end
12
+
13
+ class << self
14
+ def from(url, attributes = {})
15
+ attributes[:http_fetcher] ||= GoApiClient::HttpFetcher.new
16
+ doc = Nokogiri::XML(attributes[:http_fetcher].get_response_body(url))
17
+ self.new(doc.root, attributes).parse!
18
+ end
19
+ end
20
+
21
+ def parse!
22
+ self.name = @root.attributes['name'].value
23
+ self.counter = @root.attributes['counter'].value.to_i
24
+ self.url = href_from(@root.xpath("./link[@rel='self']"))
25
+ self.result = @root.xpath("./result").first.content
26
+ self.completed_at = Time.parse(@root.xpath("./updated").first.content).utc
27
+ self.jobs = @root.xpath("./jobs/job").collect do |job_element|
28
+ Job.from(job_element.attributes["href"].value, :http_fetcher => http_fetcher)
29
+ end
30
+ self.identifier = @root.xpath('./id').first.content
31
+
32
+ pipeline_link = @root.xpath("./pipeline").first.attributes["href"].value
33
+
34
+ pipeline = @pipeline_cache[pipeline_link] || Pipeline.from(pipeline_link, :http_fetcher => http_fetcher)
35
+ pipeline.stages << self
36
+
37
+ self.pipeline_cache[pipeline_link] ||= pipeline
38
+ @root = nil
39
+ self
40
+ end
41
+
42
+ def failed?
43
+ "Failed" == @result
44
+ end
45
+
46
+ def passed?
47
+ !failed?
48
+ end
49
+
50
+ private
51
+ def href_from(xml)
52
+ xml.first.attribute('href').value unless xml.empty?
53
+ end
54
+
55
+ end
56
+ end
57
+
@@ -0,0 +1,36 @@
1
+ module GoApiClient
2
+ class User
3
+
4
+ attr_accessor :name, :email
5
+
6
+ def initialize(name, email)
7
+ @name = name
8
+ @email = email
9
+ end
10
+
11
+ def ==(other)
12
+ other && self.class.equal?(other.class) &&
13
+ name == other.name &&
14
+ email == other.email
15
+ end
16
+
17
+ def hash
18
+ self.class.hash ^ name.hash ^ email.hash
19
+ end
20
+
21
+ def to_s
22
+ "#{name} <#{email}>"
23
+ end
24
+
25
+ def inspect
26
+ "User(#{to_s})"
27
+ end
28
+
29
+ class << self
30
+ def parse(str)
31
+ _, name, email = *str.match(/(.*) <(.+?)>/)
32
+ self.new(name.strip, email.strip)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ module GoApiClient
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 2
5
+ PATCH = 0
6
+ RELEASE = ENV['GO_PIPELINE_COUNTER']
7
+ VERSION = [MAJOR, MINOR, PATCH, RELEASE].compact.join('.')
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpQIBAAKCAQEAqtGGoK2+R+bUrPdiaXMOlp+r/qdsb9+8hBCIPHkmfDcGIxWT
3
+ /UY1x7EdWu3RC1BESwv4RMEtQvu+uCJi+tszRg3JNcZ/yrv0BxhYUTLRRdIlkzRK
4
+ j0eojlIUHsMZIL8KoO6obhT54K68Yr0OaylMxCXwY9bJv0SXkaxBlVf1b+N7A4j0
5
+ 9MNXUqRAX8w8BLBgW9nzFt0fEr38bsp2KnWEYMDJ+O+gCiP0eMbflHvnGHWOk9zf
6
+ yBh+nNuatEUTOzhMo9A93tyilq7uzMu8b1wE4NQehNXzkYtUrKHB4OdxZUIaHzZ6
7
+ M6ldxlTvcdHe1QDTJ/sr+EgwUi9gL4y1UZ1MNQIDAQABAoIBAQCMGqiad4bfQIPl
8
+ jk5ogRdREYunpbi6Fb9wboLfXtri/NqKwjMMhJ6tuCaEoxRXfDFXgGzUL8Go9ASc
9
+ 0I9wg4ONjNcgxTuhlAF2JFCj4NNmuhNZpoUU+chVWxrnlEuy4R6dmsII8Cl3ULpx
10
+ HfGKkWhGZXvC17PHrkHHGIr+LBPB/XKpQNTinMSDVFmdyFWsAoJsaZKTA9Kj+84b
11
+ Z3fORNZq8hJZlyRExr/uk4MlZ6GjfHJwF7lHFnFOq1+dV/1IaaqXgWKYAU/YrEHA
12
+ ZcxteMFEv5+6SCBRSmd9jrN9OEEimmeqNOGt2IpXywZ+I74KWKEncM2BzJ7L73R4
13
+ oJxhiHQtAoGBANHXZ9UZMDDd0zRGxhmUGk71aVWhsNquiQ/RV7JORVRlG7/1cVKd
14
+ 9SYCe9tIFjC0ZmvW7xpcfc7qivuno8JOFC8W+ETPGKZ6BWZcwXelQfWW8MJrmxO7
15
+ Q1UwlAq37fat5aC42581H7aGv3wWx21qg44Nrt3HRq4ncCHSGqzvDuQTAoGBANBk
16
+ qIDZY/UwAh7dwSvHB6lh2U4RgXOJXdklE9eaHpKFSfHkoAbLc8nNgwVI38Vgwh8L
17
+ YsembDnbWulocajIkeRAXMQSZlIpTS5KGp6Jt2LeWJeAgYro4o6n4daOFFLzKWPd
18
+ k80vK+vRT39N1BP0rPH3vwQPUyAy/pow3PEejseXAoGBAIkrHZyXEoFe/6i0etpN
19
+ jcT/dxOa1licrsvANGtB7t/0F+erMaCn0JBAH2aAAMFlq23i2fmJbFPNzXwjYVCq
20
+ aVc+1JtmJN7t9ImtKGplhHBdcpQkcwK67pDJaHx5LvyJQAmHzUiNGWXfP1yGJ2bG
21
+ sagyGZSvpuxAq3PwO6+/tSQxAoGBAIcTt+VNA+254KYBN2UY7W5tbl2cGzy4nYxS
22
+ 7DmkPIzcuMGCX/gHiFYWUAbs5Z8ayLk2uCCRTzVxacxBVusAlxBMZ9Tv2EMJYm3O
23
+ utJokeYUGXiaY12W9sNhLpHUJnheBUYmKdel6+I/Gjh6Si1lO3TcEYSgKlGEvGNV
24
+ qODh3cqhAoGAIwzj5FguiXvaZLagJkmeDH6zKdSKpEybiks6Br1H3/k73c2cN5F5
25
+ tFdmbCMUOjhZRJvNHDqxS9VNo4LNd/N54OAeNOnLuxR+WHiUiAaB6xUHy3DPPo7w
26
+ nv7QikVJH/hik3JChoCRY5IPIs9y0p4AHwNbUvjX+4adnCyjhkU8q40=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1 @@
1
+ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCq0Yagrb5H5tSs92Jpcw6Wn6v+p2xv37yEEIg8eSZ8NwYjFZP9RjXHsR1a7dELUERLC/hEwS1C+764ImL62zNGDck1xn/Ku/QHGFhRMtFF0iWTNEqPR6iOUhQewxkgvwqg7qhuFPngrrxivQ5rKUzEJfBj1sm/RJeRrEGVV/Vv43sDiPT0w1dSpEBfzDwEsGBb2fMW3R8SvfxuynYqdYRgwMn476AKI/R4xt+Ue+cYdY6T3N/IGH6c25q0RRM7OEyj0D3e3KKWru7My7xvXATg1B6E1fORi1SsocHg53FlQhofNnozqV3GVO9x0d7VANMn+yv4SDBSL2AvjLVRnUw1 saas@ira.corporate.thoughtworks.com
@@ -0,0 +1,3 @@
1
+ #! /bin/sh
2
+ BASEDIR=$(dirname $0)
3
+ exec ssh -o 'StrictHostKeyChecking=no' -i $BASEDIR/git-ci.zeroci.com $@
@@ -0,0 +1,41 @@
1
+
2
+ <?xml version="1.0" encoding="UTF-8"?>
3
+
4
+ <job name="Test">
5
+ <link rel="self"
6
+ href="http://go-server.1.project:8153/go/api/jobs/1.xml"/>
7
+ <id><![CDATA[urn:x-go.studios.thoughtworks.com:job-id:defaultPipeline:1:Units:1:Test]]></id>
8
+ <pipeline name="defaultPipeline" counter="1" label="1"/>
9
+ <stage name="Units" counter="1"
10
+ href="http://go-server.1.project:8153/go/api/stages/1.xml"/>
11
+ <result>Passed</result>
12
+ <state>Completed</state>
13
+ <properties>
14
+ <property
15
+ name="cruise_agent"><![CDATA[go-agent-01.1.project]]></property>
16
+ <property name="cruise_job_duration"><![CDATA[80]]></property>
17
+ <property name="cruise_job_id"><![CDATA[1]]></property>
18
+ <property name="cruise_job_result"><![CDATA[Passed]]></property>
19
+ <property name="cruise_pipeline_counter"><![CDATA[1]]></property>
20
+ <property name="cruise_pipeline_label"><![CDATA[1]]></property>
21
+ <property name="cruise_stage_counter"><![CDATA[1]]></property>
22
+ <property
23
+ name="cruise_timestamp_01_scheduled"><![CDATA[2012-06-05T08:33:09Z]]></property>
24
+ <property
25
+ name="cruise_timestamp_02_assigned"><![CDATA[2012-06-05T08:34:51Z]]></property>
26
+ <property
27
+ name="cruise_timestamp_03_preparing"><![CDATA[2012-06-05T08:34:56Z]]></property>
28
+ <property
29
+ name="cruise_timestamp_04_building"><![CDATA[2012-06-05T08:34:58Z]]></property>
30
+ <property
31
+ name="cruise_timestamp_05_completing"><![CDATA[2012-06-05T08:36:19Z]]></property>
32
+ <property
33
+ name="cruise_timestamp_06_completed"><![CDATA[2012-06-05T08:36:19Z]]></property>
34
+ </properties>
35
+ <agent uuid="0a0b859f-406d-4d22-9f7f-6f71d9b45a77"/>
36
+ <artifacts
37
+ baseUri="http://go-server.1.project:8153/go/files/defaultPipeline/1/Units/1/Test"
38
+ pathFromArtifactRoot="pipelines/defaultPipeline/1/Units/1/Test"/>
39
+ <resources/>
40
+ <environmentvariables/>
41
+ </job>
@@ -0,0 +1,43 @@
1
+
2
+ <?xml version="1.0" encoding="UTF-8"?>
3
+
4
+ <job name="Jasmine">
5
+ <link rel="self"
6
+ href="http://go-server.1.project:8153/go/api/jobs/2.xml"/>
7
+ <id><![CDATA[urn:x-go.studios.thoughtworks.com:job-id:defaultPipeline:1:Functionals:1:Jasmine]]></id>
8
+ <pipeline name="defaultPipeline" counter="1" label="1"/>
9
+ <stage name="Functionals" counter="1"
10
+ href="http://go-server.1.project:8153/go/api/stages/2.xml"/>
11
+ <result>Passed</result>
12
+ <state>Completed</state>
13
+ <properties>
14
+ <property
15
+ name="cruise_agent"><![CDATA[go-agent-01.1.project]]></property>
16
+ <property name="cruise_job_duration"><![CDATA[18]]></property>
17
+ <property name="cruise_job_id"><![CDATA[2]]></property>
18
+ <property name="cruise_job_result"><![CDATA[Passed]]></property>
19
+ <property name="cruise_pipeline_counter"><![CDATA[1]]></property>
20
+ <property name="cruise_pipeline_label"><![CDATA[1]]></property>
21
+ <property name="cruise_stage_counter"><![CDATA[1]]></property>
22
+ <property
23
+ name="cruise_timestamp_01_scheduled"><![CDATA[2012-06-05T08:36:19Z]]></property>
24
+ <property
25
+ name="cruise_timestamp_02_assigned"><![CDATA[2012-06-05T08:36:29Z]]></property>
26
+ <property
27
+ name="cruise_timestamp_03_preparing"><![CDATA[2012-06-05T08:36:39Z]]></property>
28
+ <property
29
+ name="cruise_timestamp_04_building"><![CDATA[2012-06-05T08:36:40Z]]></property>
30
+ <property
31
+ name="cruise_timestamp_05_completing"><![CDATA[2012-06-05T08:36:58Z]]></property>
32
+ <property
33
+ name="cruise_timestamp_06_completed"><![CDATA[2012-06-05T08:36:59Z]]></property>
34
+ </properties>
35
+ <agent uuid="0a0b859f-406d-4d22-9f7f-6f71d9b45a77"/>
36
+ <artifacts
37
+ baseUri="http://go-server.1.project:8153/go/files/defaultPipeline/1/Functionals/1/Jasmine"
38
+ pathFromArtifactRoot="pipelines/defaultPipeline/1/Functionals/1/Jasmine"/>
39
+ <resources/>
40
+ <environmentvariables>
41
+ <variable name="DISPLAY"><![CDATA[:1]]></variable>
42
+ </environmentvariables>
43
+ </job>
@@ -0,0 +1,40 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <job name="Test">
4
+ <link rel="self"
5
+ href="http://go-server.1.project:8153/go/api/jobs/3.xml"/>
6
+ <id><![CDATA[urn:x-go.studios.thoughtworks.com:job-id:defaultPipeline:2:Units:1:Test]]></id>
7
+ <pipeline name="defaultPipeline" counter="2" label="2"/>
8
+ <stage name="Units" counter="1"
9
+ href="http://go-server.1.project:8153/go/api/stages/3.xml"/>
10
+ <result>Failed</result>
11
+ <state>Completed</state>
12
+ <properties>
13
+ <property
14
+ name="cruise_agent"><![CDATA[go-agent-01.1.project]]></property>
15
+ <property name="cruise_job_duration"><![CDATA[39]]></property>
16
+ <property name="cruise_job_id"><![CDATA[3]]></property>
17
+ <property name="cruise_job_result"><![CDATA[Failed]]></property>
18
+ <property name="cruise_pipeline_counter"><![CDATA[2]]></property>
19
+ <property name="cruise_pipeline_label"><![CDATA[2]]></property>
20
+ <property name="cruise_stage_counter"><![CDATA[1]]></property>
21
+ <property
22
+ name="cruise_timestamp_01_scheduled"><![CDATA[2012-06-05T10:02:10Z]]></property>
23
+ <property
24
+ name="cruise_timestamp_02_assigned"><![CDATA[2012-06-05T10:02:19Z]]></property>
25
+ <property
26
+ name="cruise_timestamp_03_preparing"><![CDATA[2012-06-05T10:02:29Z]]></property>
27
+ <property
28
+ name="cruise_timestamp_04_building"><![CDATA[2012-06-05T10:02:29Z]]></property>
29
+ <property
30
+ name="cruise_timestamp_05_completing"><![CDATA[2012-06-05T10:03:09Z]]></property>
31
+ <property
32
+ name="cruise_timestamp_06_completed"><![CDATA[2012-06-05T10:03:09Z]]></property>
33
+ </properties>
34
+ <agent uuid="0a0b859f-406d-4d22-9f7f-6f71d9b45a77"/>
35
+ <artifacts
36
+ baseUri="http://go-server.1.project:8153/go/files/defaultPipeline/2/Units/1/Test"
37
+ pathFromArtifactRoot="pipelines/defaultPipeline/2/Units/1/Test"/>
38
+ <resources/>
39
+ <environmentvariables/>
40
+ </job>
@@ -0,0 +1,40 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <job name="Test">
4
+ <link rel="self"
5
+ href="http://go-server.1.project:8153/go/api/jobs/4.xml"/>
6
+ <id><![CDATA[urn:x-go.studios.thoughtworks.com:job-id:defaultPipeline:3:Units:1:Test]]></id>
7
+ <pipeline name="defaultPipeline" counter="3" label="3"/>
8
+ <stage name="Units" counter="1"
9
+ href="http://go-server.1.project:8153/go/api/stages/4.xml"/>
10
+ <result>Passed</result>
11
+ <state>Completed</state>
12
+ <properties>
13
+ <property
14
+ name="cruise_agent"><![CDATA[go-agent-01.1.project]]></property>
15
+ <property name="cruise_job_duration"><![CDATA[39]]></property>
16
+ <property name="cruise_job_id"><![CDATA[4]]></property>
17
+ <property name="cruise_job_result"><![CDATA[Passed]]></property>
18
+ <property name="cruise_pipeline_counter"><![CDATA[3]]></property>
19
+ <property name="cruise_pipeline_label"><![CDATA[3]]></property>
20
+ <property name="cruise_stage_counter"><![CDATA[1]]></property>
21
+ <property
22
+ name="cruise_timestamp_01_scheduled"><![CDATA[2012-06-05T14:39:27Z]]></property>
23
+ <property
24
+ name="cruise_timestamp_02_assigned"><![CDATA[2012-06-05T14:39:39Z]]></property>
25
+ <property
26
+ name="cruise_timestamp_03_preparing"><![CDATA[2012-06-05T14:39:49Z]]></property>
27
+ <property
28
+ name="cruise_timestamp_04_building"><![CDATA[2012-06-05T14:39:50Z]]></property>
29
+ <property
30
+ name="cruise_timestamp_05_completing"><![CDATA[2012-06-05T14:40:29Z]]></property>
31
+ <property
32
+ name="cruise_timestamp_06_completed"><![CDATA[2012-06-05T14:40:29Z]]></property>
33
+ </properties>
34
+ <agent uuid="0a0b859f-406d-4d22-9f7f-6f71d9b45a77"/>
35
+ <artifacts
36
+ baseUri="http://go-server.1.project:8153/go/files/defaultPipeline/3/Units/1/Test"
37
+ pathFromArtifactRoot="pipelines/defaultPipeline/3/Units/1/Test"/>
38
+ <resources/>
39
+ <environmentvariables/>
40
+ </job>