bellows 1.0.12 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,18 @@
1
+ * Fri July 27 2012 Dan Prince <dprince@redhat.com> - 1.1.1
2
+ - Fix issue where new tests weren't fired via stream task.
3
+ - Include swift in default project list.
4
+ - Add test for stream task.
5
+
6
+ * Fri July 27 2012 Dan Prince <dprince@redhat.com> - 1.1.0
7
+ - Add new Gerrit stream task to stream gerrit events and sync/fire
8
+ SmokeStack tests.
9
+ - Add support for per project test suite configurations.
10
+ - Optimize GET requests to SmokeStack for smoke_tests.
11
+ - Tasks now default to using the project list from the config file
12
+ if no project is specified. If a single project is specified then
13
+ the task will only operate on the specified project.
14
+ - Handle missing Gerrit owners in purge task.
15
+
1
16
  * Mon May 17 2012 Dan Prince <dprince@redhat.com> - 1.0.12
2
17
  - Ordering fix to ensure job types are displayed in Gerrit comments
3
18
  in the same order they are listed in the config file.
data/LICENSE.txt CHANGED
@@ -1,4 +1,5 @@
1
- Copyright (c) 2011 Dan Prince
1
+ Copyright (c) 2011-2012 Dan Prince
2
+ Copyright (c) 2012 Red Hat
2
3
 
3
4
  Permission is hereby granted, free of charge, to any person obtaining
4
5
  a copy of this software and associated documentation files (the
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.12
1
+ 1.1.1
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'pty'
2
3
 
3
4
  module Bellows
4
5
  class Gerrit
@@ -7,6 +8,11 @@ module Bellows
7
8
  return %x{ssh review gerrit #{command}}
8
9
  end
9
10
 
11
+ #defined here so we can easily stub out for testing
12
+ def self.stream_events_cmd
13
+ return "ssh review gerrit stream-events"
14
+ end
15
+
10
16
  def self.reviews(project, status="open", branch="master")
11
17
  reviews = []
12
18
  out=Gerrit.run_cmd(%{query status:#{status} project:openstack/#{project} branch:#{branch} limit:500 --current-patch-set --format JSON})
@@ -27,5 +33,22 @@ module Bellows
27
33
  Gerrit.run_cmd(%{review --verified #{verify_vote} -m \"'#{message}'\" #{revision}})
28
34
  end
29
35
 
36
+ def self.stream_events(type=nil)
37
+
38
+ PTY.spawn stream_events_cmd do |read, write, pid|
39
+ loop do
40
+ begin
41
+ data = JSON.parse(read.gets)
42
+ if type.nil? or data['type'] == type then
43
+ yield data
44
+ end
45
+ rescue
46
+ break
47
+ end
48
+ end
49
+ end
50
+
51
+ end
52
+
30
53
  end
31
54
  end
@@ -44,13 +44,15 @@ module Bellows
44
44
  job_type_list
45
45
  end
46
46
 
47
- def self.smoke_tests(project)
47
+ def self.smoke_tests(projects)
48
48
  tests = {}
49
49
  data = JSON.parse(Bellows::HTTP.get("/smoke_tests.json"))
50
50
  data.each do |item|
51
- branch = item['smoke_test']["#{project}_package_builder"]['branch']
52
- if branch and not branch.empty? then
53
- tests.store(Bellows::Util.short_spec(branch), item['smoke_test'])
51
+ projects.each do |project|
52
+ branch = item['smoke_test']["#{project}_package_builder"]['branch']
53
+ if branch and not branch.empty? then
54
+ tests.store(Bellows::Util.short_spec(branch), item['smoke_test'])
55
+ end
54
56
  end
55
57
  end
56
58
  tests
@@ -89,6 +91,7 @@ module Bellows
89
91
 
90
92
  end
91
93
 
94
+ # returns the ID of the created SmokeTest
92
95
  def self.create_smoke_test(project, description, refspec, config_template_ids, test_suite_ids)
93
96
 
94
97
  post_data = { "smoke_test[description]" => description }
@@ -114,7 +117,8 @@ module Bellows
114
117
  test_suite_ids.each {|id| test_suites << id.to_s}
115
118
  post_data.store("smoke_test[test_suite_ids][]", test_suites)
116
119
 
117
- Bellows::HTTP.post("/smoke_tests", post_data)
120
+ # Return the ID of the created smoke test
121
+ Bellows::HTTP.post("/smoke_tests", post_data).sub(/^.*\//, '')
118
122
 
119
123
  end
120
124
 
data/lib/bellows/tasks.rb CHANGED
@@ -12,106 +12,119 @@ module Bellows
12
12
  method_options :test => :boolean
13
13
  method_options :all => :boolean
14
14
  method_options :quiet => :boolean
15
- def sync(project, options=(options or {}))
16
- Util.validate_project(project)
15
+ def sync(project=nil, options=(options or {}))
16
+ projects = Util.projects(project)
17
17
  test = options[:test]
18
18
  all = options[:all]
19
- smoke_tests = Bellows::SmokeStack.smoke_tests(project)
19
+ smoke_tests = Bellows::SmokeStack.smoke_tests(projects)
20
20
  configs=Util.load_configs
21
- test_suite_ids = configs['test_suite_ids'].collect {|x| x.to_s }
22
- config_template_ids = configs['config_template_ids'].collect {|x| x.to_s }
23
-
24
- Bellows::Gerrit.reviews(project) do |review|
25
- owner = review['owner']['name']
26
- refspec = review['currentPatchSet']['ref']
27
- review_id = Bellows::Util.short_spec(refspec)
28
- smoke_test = smoke_tests[review_id]
29
- desc = owner + ": " +review['subject']
30
- if not smoke_test
31
- puts "Creating... " + desc
32
- Bellows::SmokeStack.create_smoke_test(project, desc, refspec, config_template_ids, test_suite_ids) if not test
33
- else
34
- if smoke_test["#{project}_package_builder"]['branch'] != refspec then
35
- puts "Updating... " + desc if not options[:quiet]
36
- puts "refspec: " + refspec if not options[:quiet]
37
- Bellows::SmokeStack.update_smoke_test(smoke_test['id'], {"#{project}_package_builder" => { "branch" => refspec}, "description" => desc, "status" => "Updated", "test_suite_ids" => test_suite_ids, "config_template_ids" => config_template_ids}) if not test
38
- elsif all then
39
- puts "Updating (all)... " + desc if not options[:quiet]
40
- Bellows::SmokeStack.update_smoke_test(smoke_test['id'], {"#{project}_package_builder" => { "branch" => refspec}, "description" => desc, "test_suite_ids" => test_suite_ids, "config_template_ids" => config_template_ids}) if not test
21
+
22
+ projects.each do |project|
23
+ Bellows::Gerrit.reviews(project) do |review|
24
+ owner = review['owner']['name']
25
+ refspec = review['currentPatchSet']['ref']
26
+ review_id = Bellows::Util.short_spec(refspec)
27
+ smoke_test = smoke_tests[review_id]
28
+ desc = owner + ": " +review['subject']
29
+ test_suite_ids, config_template_ids = Util.test_configs(project)
30
+ if not smoke_test
31
+ puts "Creating... " + desc
32
+ Bellows::SmokeStack.create_smoke_test(project, desc, refspec, config_template_ids, test_suite_ids) if not test
33
+ else
34
+ if smoke_test["#{project}_package_builder"]['branch'] != refspec then
35
+ puts "Updating... " + desc if not options[:quiet]
36
+ puts "refspec: " + refspec if not options[:quiet]
37
+ Bellows::SmokeStack.update_smoke_test(smoke_test['id'], {"#{project}_package_builder" => { "branch" => refspec}, "description" => desc, "status" => "Updated", "test_suite_ids" => test_suite_ids, "config_template_ids" => config_template_ids}) if not test
38
+ elsif all then
39
+ puts "Updating (all)... " + desc if not options[:quiet]
40
+ Bellows::SmokeStack.update_smoke_test(smoke_test['id'], {"#{project}_package_builder" => { "branch" => refspec}, "description" => desc, "test_suite_ids" => test_suite_ids, "config_template_ids" => config_template_ids}) if not test
41
+ end
41
42
  end
42
- end
43
- end
43
+ end # reviews
44
+ end # projects
44
45
  end
45
46
 
46
47
  desc "purge PROJECT", "Purge merged reviews from SmokeStack"
47
48
  method_options :test => :boolean
48
49
  method_options :quiet => :boolean
49
- def purge(project, options=(options or {}))
50
- Util.validate_project(project)
50
+ def purge(project=nil, options=(options or {}))
51
+ projects = Util.projects(project)
51
52
  test = options[:test]
52
- smoke_tests = Bellows::SmokeStack.smoke_tests(project)
53
- reviews = Bellows::Gerrit.reviews(project, "merged")
54
- reviews += Bellows::Gerrit.reviews(project, "abandoned")
55
- reviews.each do |review|
56
- refspec = review['currentPatchSet']['ref']
57
- review_id = Bellows::Util.short_spec(refspec)
58
- smoke_test = smoke_tests[review_id]
59
- desc = review['owner']['name'] + ": " +review['subject']
60
- if smoke_test
61
- puts "Deleting... " + desc if not options[:quiet]
62
- Bellows::HTTP.delete("/smoke_tests/#{smoke_test['id']}") if not test
53
+ smoke_tests = Bellows::SmokeStack.smoke_tests(projects)
54
+ projects.each do |project|
55
+ reviews = Bellows::Gerrit.reviews(project, "merged")
56
+ reviews += Bellows::Gerrit.reviews(project, "abandoned")
57
+ reviews.each do |review|
58
+ refspec = review['currentPatchSet']['ref']
59
+ review_id = Bellows::Util.short_spec(refspec)
60
+ smoke_test = smoke_tests[review_id]
61
+ desc = ""
62
+ if review['owner']['name'] then
63
+ desc = review['owner']['name']
64
+ end
65
+ if review['subject'] then
66
+ desc += ": " +review['subject']
67
+ end
68
+ if smoke_test
69
+ puts "Deleting... " + desc if not options[:quiet]
70
+ Bellows::HTTP.delete("/smoke_tests/#{smoke_test['id']}") if not test
71
+ end
63
72
  end
64
- end
73
+ end #projects
65
74
  end
66
75
 
67
76
  desc "fire PROJECT", "Run jobs for reviews without results."
68
77
  method_options :test => :boolean
69
78
  method_options :quiet => :boolean
70
79
  method_options :limit => :integer
71
- def fire(project, options=(options or {}))
72
- Util.validate_project(project)
80
+ def fire(project=nil, options=(options or {}))
81
+ projects = Util.projects(project)
73
82
  test = options[:test]
74
83
  limit = options[:limit] || 5
75
84
  jobs = Set.new
76
85
  Bellows::SmokeStack.jobs.each do |job|
77
- data = job.values[0]
78
- if data
79
- revision = data["#{project}_revision"]
80
- if revision and not revision.empty?
81
- jobs.add(revision[0,7])
82
- end
86
+ projects.each do |project|
87
+ data = job.values[0]
88
+ if data
89
+ revision = data["#{project}_revision"]
90
+ if revision and not revision.empty?
91
+ jobs.add(revision[0,7])
92
+ end
93
+ end
83
94
  end
84
95
  end
85
- smoke_tests = Bellows::SmokeStack.smoke_tests(project)
96
+ smoke_tests = Bellows::SmokeStack.smoke_tests(projects)
86
97
 
87
98
  count=0
88
- Bellows::Gerrit.reviews(project) do |review|
89
- revision = review['currentPatchSet']['revision'][0,7]
90
- desc = review['owner']['name'] + ": " +review['subject']
91
- if not jobs.include? revision
92
- puts "Running ... " + desc if not options[:quiet]
93
- refspec = review['currentPatchSet']['ref']
94
- review_id = Bellows::Util.short_spec(refspec)
95
- smoke_test = smoke_tests[review_id]
96
- if smoke_test then
97
- count += 1
98
- Bellows::HTTP.post("/smoke_tests/#{smoke_test['id']}/run_jobs", {}) if not test
99
- else
100
- puts "WARNING: no smoke test exists for: #{refspec}" if not options[:quiet]
101
- end
102
- if count >= limit.to_i then
103
- break
99
+ projects.each do |project|
100
+ Bellows::Gerrit.reviews(project) do |review|
101
+ revision = review['currentPatchSet']['revision'][0,7]
102
+ desc = review['owner']['name'] + ": " +review['subject']
103
+ if not jobs.include? revision
104
+ puts "Running ... " + desc if not options[:quiet]
105
+ refspec = review['currentPatchSet']['ref']
106
+ review_id = Bellows::Util.short_spec(refspec)
107
+ smoke_test = smoke_tests[review_id]
108
+ if smoke_test then
109
+ count += 1
110
+ Bellows::HTTP.post("/smoke_tests/#{smoke_test['id']}/run_jobs", {}) if not test
111
+ else
112
+ puts "WARNING: no smoke test exists for: #{refspec}" if not options[:quiet]
113
+ end
114
+ if count >= limit.to_i then
115
+ break
116
+ end
104
117
  end
105
- end
106
- end
118
+ end # reviews
119
+ end # project
107
120
  end
108
121
 
109
122
  desc "comment PROJECT", "Add gerrit comments for reviews w/ results."
110
123
  method_options :test => :boolean
111
124
  method_options :quiet => :boolean
112
125
  method_options :cache_file => :string, :required => true
113
- def comment(project, options=(options or {}))
114
- Util.validate_project(project)
126
+ def comment(project=nil, options=(options or {}))
127
+ projects = Util.projects(project)
115
128
  test = options[:test]
116
129
  cache_file = options[:cache_file]
117
130
  jobs = Bellows::SmokeStack.jobs
@@ -129,43 +142,89 @@ module Bellows
129
142
  end
130
143
 
131
144
  File.open(cache_file, 'a') do |file|
132
- Bellows::Gerrit.reviews(project) do |review|
133
- revision = review['currentPatchSet']['revision'][0,7]
134
- desc = review['owner']['name'] + ": " +review['subject']
135
- if not cached_hashes.include? revision
136
- refspec = review['currentPatchSet']['ref']
137
- patchset_num = review['currentPatchSet']['number']
138
- jobs_for_rev = Bellows::SmokeStack.jobs_with_hash(revision, jobs)
139
- if jobs_for_rev.count > 0 then
140
-
141
- job_types = Bellows::SmokeStack.job_types
142
- job_datas = []
143
- job_types.each do |job_type|
144
- job_data=Bellows::SmokeStack.job_data_for_type(jobs_for_rev, job_type['name'])
145
- job_datas << [job_type, job_data]
146
- end
147
-
148
- if Bellows::SmokeStack.complete?(job_datas) then
149
- puts "Commenting ... " + desc if not options[:quiet]
150
- message = "SmokeStack Results (patch set #{patchset_num}):\n"
151
- verify_vote = 1
152
- job_datas.each do |arr|
153
- job_type = arr[0]
154
- job_data = arr[1]
155
- message += "\t#{job_type['description']} #{job_data['status']}:#{job_data['msg']} http://smokestack.openstack.org/?go=/jobs/#{job_data['id']}\n"
156
- verify_vote = -1 if job_data['status'] == 'Failed'
145
+ projects.each do |project|
146
+ Bellows::Gerrit.reviews(project) do |review|
147
+ revision = review['currentPatchSet']['revision'][0,7]
148
+ desc = review['owner']['name'] + ": " +review['subject']
149
+ if not cached_hashes.include? revision
150
+ refspec = review['currentPatchSet']['ref']
151
+ patchset_num = review['currentPatchSet']['number']
152
+ jobs_for_rev = Bellows::SmokeStack.jobs_with_hash(revision, jobs)
153
+ if jobs_for_rev.count > 0 then
154
+
155
+ job_types = Bellows::SmokeStack.job_types
156
+ job_datas = []
157
+ job_types.each do |job_type|
158
+ job_data=Bellows::SmokeStack.job_data_for_type(jobs_for_rev, job_type['name'])
159
+ job_datas << [job_type, job_data]
157
160
  end
158
- puts message if not options[:quiet]
159
- out = Bellows::Gerrit.comment(review['currentPatchSet']['revision'], message, verify_vote) if not test
160
- puts out if not options[:quiet] and not test
161
- file.write revision + "\n" if not test
161
+
162
+ if Bellows::SmokeStack.complete?(job_datas) then
163
+ puts "Commenting ... " + desc if not options[:quiet]
164
+ message = "SmokeStack Results (patch set #{patchset_num}):\n"
165
+ verify_vote = 1
166
+ job_datas.each do |arr|
167
+ job_type = arr[0]
168
+ job_data = arr[1]
169
+ message += "\t#{job_type['description']} #{job_data['status']}:#{job_data['msg']} http://smokestack.openstack.org/?go=/jobs/#{job_data['id']}\n"
170
+ verify_vote = -1 if job_data['status'] == 'Failed'
171
+ end
172
+ puts message if not options[:quiet]
173
+ out = Bellows::Gerrit.comment(review['currentPatchSet']['revision'], message, verify_vote) if not test
174
+ puts out if not options[:quiet] and not test
175
+ file.write revision + "\n" if not test
176
+ end
177
+
162
178
  end
163
-
179
+
164
180
  end
181
+ end # reviews
182
+ end # projects
183
+ end # file
184
+ end
185
+
186
+ desc "stream", "Stream Gerrit events and sync data to SmokeStack."
187
+ method_options :test => :boolean
188
+ method_options :fire => :boolean
189
+ method_options :quiet => :boolean
190
+ def stream(options=(options or {}))
191
+ test = options[:test]
192
+ fire = options[:fire]
193
+ configs=Util.load_configs
194
+ projects = Util.projects
195
+
196
+ Bellows::Gerrit.stream_events('patchset-created') do |patchset|
197
+ project = patchset['change']['project'].sub(/.*\//, '')
198
+ if projects.include?(project) then
199
+ owner = patchset['change']['owner']['name']
200
+ refspec = patchset['patchSet']['ref']
201
+ review_id = Bellows::Util.short_spec(refspec)
202
+ smoke_tests = Bellows::SmokeStack.smoke_tests(projects)
203
+ smoke_test = smoke_tests[review_id]
204
+ desc = owner + ": " +patchset['change']['subject']
205
+ test_suite_ids, config_template_ids = Util.test_configs(project)
206
+
207
+ smoke_test_id = nil
208
+ if not smoke_test
209
+ # create new smoke test
210
+ puts "Creating... " + desc
211
+ smoke_test_id = Bellows::SmokeStack.create_smoke_test(project, desc, refspec, config_template_ids, test_suite_ids) if not test
212
+ else
213
+ # update existing smoke test
214
+ puts "Updating... " + desc if not options[:quiet]
215
+ puts "refspec: " + refspec if not options[:quiet]
216
+ Bellows::SmokeStack.update_smoke_test(smoke_test['id'], {"#{project}_package_builder" => { "branch" => refspec}, "description" => desc, "status" => "Updated", "test_suite_ids" => test_suite_ids, "config_template_ids" => config_template_ids}) if not test
217
+ smoke_test_id = smoke_test['id']
165
218
 
166
219
  end
167
- end
168
- end
220
+
221
+ # fire off tests
222
+ if not test and fire then
223
+ Bellows::HTTP.post("/smoke_tests/#{smoke_test_id}/run_jobs", {})
224
+ end
225
+
226
+ end # reviews
227
+ end # stream_events
169
228
  end
170
229
 
171
230
  end
data/lib/bellows/util.rb CHANGED
@@ -3,7 +3,7 @@ require 'yaml'
3
3
  module Bellows
4
4
  module Util
5
5
 
6
- DEFAULT_PROJECTS = ['nova', 'glance', 'keystone']
6
+ DEFAULT_PROJECTS = ['nova', 'glance', 'keystone', 'swift']
7
7
  @@configs=nil
8
8
 
9
9
  def self.load_configs
@@ -56,7 +56,14 @@ module Bellows
56
56
  end
57
57
  end
58
58
 
59
- def self.projects
59
+ # If a single project is provided return an array of that.
60
+ # Otherwise return the default projects from the config file or the default
61
+ # project list.
62
+ def self.projects(project=nil)
63
+ if not project.nil?
64
+ validate_project(project)
65
+ return [project]
66
+ end
60
67
  configs=self.load_configs
61
68
  proj_list = configs['projects']
62
69
  if proj_list.nil? or proj_list.empty? then
@@ -65,5 +72,21 @@ module Bellows
65
72
  return proj_list
66
73
  end
67
74
 
75
+ def self.test_configs(project=nil)
76
+ configs=load_configs
77
+ test_suite_ids = nil
78
+ config_template_ids = nil
79
+ # per project configs may be specified in the config file
80
+ if not project.nil? and configs[project] then
81
+ test_suite_ids = configs[project]['test_suite_ids'].collect {|x| x.to_s }
82
+ config_template_ids = configs[project]['config_template_ids'].collect {|x| x.to_s }
83
+ else
84
+ # if no configs specified use the configured defaults
85
+ test_suite_ids = configs['test_suite_ids'].collect {|x| x.to_s }
86
+ config_template_ids = configs['config_template_ids'].collect {|x| x.to_s }
87
+ end
88
+ return test_suite_ids, config_template_ids
89
+ end
90
+
68
91
  end
69
92
  end
@@ -0,0 +1 @@
1
+ {"type":"patchset-created","change":{"project":"openstack/nova","branch":"master","topic":"bug/993663","id":"I2060d39cbdabd20f410ebd501160a04c51641755","number":"7139","subject":"Create a utf8 version of the dns_domains table.","owner":{"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"url":"https://review.openstack.org/7139"},"patchSet":{"number":"5","revision":"f0c5b60445e4dc9f500c49332878b115362f0c83","ref":"refs/changes/39/7139/5","uploader":{"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"createdOn":1336495406},"uploader":{"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"}}
data/test/test_task.rb CHANGED
@@ -43,4 +43,25 @@ class TaskTest < Test::Unit::TestCase
43
43
 
44
44
  end
45
45
 
46
+ def test_stream
47
+
48
+ sample_config = fixture('config.yaml')
49
+ Bellows::Util.stubs(:load_configs).returns(YAML::load(sample_config))
50
+
51
+ smoke_tests_data = fixture('nova_smoke_tests.json')
52
+ Bellows::HTTP.stubs(:get).returns(smoke_tests_data)
53
+
54
+ cache_file=Tempfile.new('smokestack')
55
+
56
+ response = mock()
57
+ Bellows::HTTP.stubs(:post).returns(response)
58
+ tasks = Bellows::Tasks.new
59
+
60
+ stream_data = fixture('stream.json')
61
+ Bellows::Gerrit.stubs(:stream_events_cmd).returns("echo '#{stream_data}'")
62
+
63
+ tasks.stream(options={:quiet => true})
64
+
65
+ end
66
+
46
67
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bellows
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.12
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-17 00:00:00.000000000Z
12
+ date: 2012-07-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &5858420 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 1.0.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *5858420
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: jeweler
27
- requirement: &5857160 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 1.6.4
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *5857160
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.6.4
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: thor
38
- requirement: &5855760 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 0.14.6
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *5855760
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.14.6
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: json
49
- requirement: &5854600 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: 1.4.6
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *5854600
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.4.6
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: mocha
60
- requirement: &5853540 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ~>
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: 0.9.9
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *5853540
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.9.9
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: json
71
- requirement: &5852140 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '0'
77
102
  type: :runtime
78
103
  prerelease: false
79
- version_requirements: *5852140
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: thor
82
- requirement: &5824800 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,7 +117,12 @@ dependencies:
87
117
  version: '0'
88
118
  type: :runtime
89
119
  prerelease: false
90
- version_requirements: *5824800
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  description: CLI to drive SmokeStack test creation and maintenance based on Gerrit
92
127
  reviews.
93
128
  email: dan.prince@rackspace.com
@@ -117,6 +152,7 @@ files:
117
152
  - test/fixtures/gerrit.json
118
153
  - test/fixtures/jobs.json
119
154
  - test/fixtures/nova_smoke_tests.json
155
+ - test/fixtures/stream.json
120
156
  - test/helper.rb
121
157
  - test/test_smoke_stack.rb
122
158
  - test/test_task.rb
@@ -136,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
172
  version: '0'
137
173
  segments:
138
174
  - 0
139
- hash: 2565287707468473955
175
+ hash: -3831371658779170082
140
176
  required_rubygems_version: !ruby/object:Gem::Requirement
141
177
  none: false
142
178
  requirements:
@@ -145,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
181
  version: '0'
146
182
  requirements: []
147
183
  rubyforge_project:
148
- rubygems_version: 1.8.15
184
+ rubygems_version: 1.8.24
149
185
  signing_key:
150
186
  specification_version: 3
151
187
  summary: Fire it up! SmokeStack automation w/ Gerrit.