go_cd_feed 1.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 (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>