yes_ship_it 0.0.5 → 0.0.6

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/MIT-LICENSE +17 -0
  4. data/assertions/built_gem.rb +4 -10
  5. data/assertions/change_log.rb +6 -12
  6. data/assertions/published_gem.rb +7 -13
  7. data/assertions/pushed_code.rb +4 -6
  8. data/assertions/pushed_tag.rb +4 -6
  9. data/assertions/release_archive.rb +9 -14
  10. data/assertions/release_branch.rb +3 -4
  11. data/assertions/submitted_rpm.rb +21 -35
  12. data/assertions/tag.rb +5 -7
  13. data/assertions/version.rb +10 -6
  14. data/assertions/working_directory.rb +3 -4
  15. data/assertions/yes_it_shipped.rb +6 -12
  16. data/bin/yes_ship_it +23 -10
  17. data/lib/version.rb +1 -1
  18. data/lib/yes_ship_it/assertion.rb +9 -3
  19. data/lib/yes_ship_it/dry_executor.rb +15 -0
  20. data/lib/yes_ship_it/engine.rb +30 -18
  21. data/lib/yes_ship_it/exceptions.rb +3 -0
  22. data/lib/yes_ship_it/executor.rb +37 -0
  23. data/lib/yes_ship_it/git.rb +8 -7
  24. data/lib/yes_ship_it/init.rb +50 -0
  25. data/lib/yes_ship_it/plugin.rb +76 -0
  26. data/lib/yes_ship_it.rb +4 -0
  27. data/spec/data/init/ruby/lib/version.rb +3 -0
  28. data/spec/data/plugins/my_other_plugin.rb +14 -0
  29. data/spec/data/plugins/my_plugin.rb +14 -0
  30. data/spec/data/version/polkaversion.h +1 -0
  31. data/spec/data/yes_ship_it.plugins.conf +4 -0
  32. data/spec/integration/cli_spec.rb +155 -3
  33. data/spec/spec_helper.rb +2 -0
  34. data/spec/system/data/red_herring-checkout-dry-run.tar.gz +0 -0
  35. data/spec/system/data/red_herring-checkout-rpm.tar.gz +0 -0
  36. data/spec/system/dry_run_spec.rb +59 -0
  37. data/spec/system/rpm_spec.rb +62 -0
  38. data/spec/system/ruby_gem_spec.rb +2 -3
  39. data/spec/unit/assertion_spec.rb +11 -1
  40. data/spec/unit/assertions/change_log_spec.rb +6 -2
  41. data/spec/unit/assertions/published_gem_spec.rb +6 -4
  42. data/spec/unit/assertions/pushed_code_spec.rb +1 -1
  43. data/spec/unit/assertions/version_spec.rb +5 -0
  44. data/spec/unit/assertions/yes_it_shipped_spec.rb +1 -1
  45. data/spec/unit/dry_executor_spec.rb +5 -0
  46. data/spec/unit/engine_spec.rb +16 -0
  47. data/spec/unit/executor_spec.rb +26 -0
  48. data/spec/unit/git_spec.rb +5 -4
  49. data/spec/unit/init_spec.rb +49 -0
  50. data/spec/unit/plugin_spec.rb +18 -0
  51. data/spec/unit/support/assertion_examples.rb +4 -4
  52. data/spec/unit/support/executor_examples.rb +17 -0
  53. metadata +23 -3
@@ -117,8 +117,6 @@ EOT
117
117
  it "tells how to login" do
118
118
  @client.execute(["yes_ship_it.ruby2.1"], working_directory: "red_herring")
119
119
 
120
- expect(@client.exit_code).to eq(1)
121
-
122
120
  expected_output = <<EOT
123
121
  Shipping...
124
122
 
@@ -134,8 +132,9 @@ Asserting published gem: error
134
132
 
135
133
  Ran into an error. Stopping shipping.
136
134
  EOT
135
+ expect(@client.err).to eq("")
137
136
  expect(@client.out).to eq(expected_output)
138
- expect(@client.err.empty?).to be(true)
137
+ expect(@client.exit_code).to eq(1)
139
138
  end
140
139
  end
141
140
  end
@@ -1,6 +1,16 @@
1
1
  require_relative "spec_helper"
2
2
 
3
3
  describe YSI::Assertion do
4
+ describe ".class_name" do
5
+ it "converts simple name" do
6
+ expect(YSI::Assertion.class_name("simple")).to eq ("Simple")
7
+ end
8
+
9
+ it "converts multi-word name" do
10
+ expect(YSI::Assertion.class_name("multi_word")).to eq ("MultiWord")
11
+ end
12
+ end
13
+
4
14
  describe ".class_for_name" do
5
15
  it "creates VersionNumber class" do
6
16
  expect(YSI::Assertion.class_for_name("version")).
@@ -18,7 +28,7 @@ describe YSI::Assertion do
18
28
  parameter :some_thing
19
29
  parameter :some_other_thing, "default_hello"
20
30
 
21
- def display_name
31
+ def self.display_name
22
32
  "My Assertion"
23
33
  end
24
34
 
@@ -6,7 +6,9 @@ describe YSI::ChangeLog do
6
6
  engine = YSI::Engine.new
7
7
  engine.version = "1.2.3"
8
8
  a = YSI::ChangeLog.new(engine)
9
- expect(a.check_content("")).to eq("Can't find version 1.2.3 in change log")
9
+ expect {
10
+ a.check_content("")
11
+ }.to raise_error("Can't find version 1.2.3 in change log")
10
12
  end
11
13
 
12
14
  it "when no version" do
@@ -20,7 +22,9 @@ describe YSI::ChangeLog do
20
22
 
21
23
  * Some changes
22
24
  EOT
23
- expect(a.check_content(content)).to eq("Can't find version 1.2.3 in change log")
25
+ expect {
26
+ a.check_content(content)
27
+ }.to raise_error("Can't find version 1.2.3 in change log")
24
28
  end
25
29
 
26
30
  it "when all info is there" do
@@ -2,13 +2,15 @@ require_relative "../spec_helper.rb"
2
2
 
3
3
  describe YSI::PublishedGem do
4
4
  describe "#assert" do
5
- it "returns nil if there is an error" do
6
- engine = YSI::Engine
5
+ it "raises AssertionError if there is an error" do
6
+ engine = YSI::Engine.new
7
7
  allow(engine).to receive(:project_name).and_return("IdontExist")
8
8
  allow(engine).to receive(:version).and_return("0.0")
9
- assertion = YSI::PublishedGem.new(YSI::Engine)
9
+ assertion = YSI::PublishedGem.new(engine)
10
10
 
11
- expect(assertion.assert).to be(nil)
11
+ expect {
12
+ assertion.assert(engine.executor)
13
+ }.to raise_error(YSI::AssertionError)
12
14
  end
13
15
  end
14
16
  end
@@ -14,7 +14,7 @@ describe YSI::PushedCode do
14
14
  assertion = YSI::PushedCode.new(engine)
15
15
  Dir.chdir(File.join(dir, "red_herring")) do
16
16
  expect(assertion.check).to be(nil)
17
- expect(assertion.assert).to eq "pushed"
17
+ expect(assertion.assert(engine.executor)).to eq "pushed"
18
18
  end
19
19
  end
20
20
  end
@@ -40,5 +40,10 @@ EOT
40
40
  file = given_file("version/version.go")
41
41
  expect(subject.parse_version(file)).to eq("0.0.1")
42
42
  end
43
+
44
+ it "in C++" do
45
+ file = given_file("version/polkaversion.h")
46
+ expect(subject.parse_version(file)).to eq("0.8")
47
+ end
43
48
  end
44
49
  end
@@ -67,7 +67,7 @@ EOT
67
67
 
68
68
  assertion = YSI::YesItShipped.new(engine)
69
69
 
70
- expect(assertion.assert).to eq("dummy-1.1.1")
70
+ expect(assertion.assert(engine.executor)).to eq("dummy-1.1.1")
71
71
  end
72
72
  end
73
73
  end
@@ -0,0 +1,5 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe YSI::DryExecutor do
4
+ it_behaves_like "an executor"
5
+ end
@@ -149,4 +149,20 @@ EOT
149
149
  expect(@engine.config_url).to eq("https://raw.githubusercontent.com/cornelius/red_herring/master/yes_ship_it.conf")
150
150
  end
151
151
  end
152
+
153
+ describe "dry run" do
154
+ it "creates real executor by default" do
155
+ expect(subject.executor.class).to be(YSI::Executor)
156
+ end
157
+
158
+ it "sets dry run" do
159
+ subject.dry_run = true
160
+ expect(subject.executor.class).to be(YSI::DryExecutor)
161
+ end
162
+
163
+ it "unsets dry run" do
164
+ subject.dry_run = false
165
+ expect(subject.executor.class).to be(YSI::Executor)
166
+ end
167
+ end
152
168
  end
@@ -0,0 +1,26 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe YSI::Executor do
4
+ it_behaves_like "an executor"
5
+
6
+ describe "working directory" do
7
+ it "runs in the given working directory" do
8
+ working_directory = subject.run_command(["pwd"], working_directory: "/tmp")
9
+ expect(working_directory).to eq("/tmp\n")
10
+ end
11
+
12
+ it "sets back the working directory to the original value" do
13
+ current_working_directory = Dir.pwd
14
+ subject.run_command(["ls"], working_directory: "/tmp")
15
+ expect(Dir.pwd).to eq(current_working_directory)
16
+ end
17
+
18
+ it "sets back the working directory to the original value when there is an error" do
19
+ current_working_directory = Dir.pwd
20
+ expect {
21
+ subject.run_command(["ls /IMNOTTHERE"], working_directory: "/tmp")
22
+ }.to raise_error(YSI::AssertionError)
23
+ expect(Dir.pwd).to eq(current_working_directory)
24
+ end
25
+ end
26
+ end
@@ -4,9 +4,10 @@ include GivenFilesystemSpecHelpers
4
4
 
5
5
  describe YSI::Git do
6
6
  describe "#origin" do
7
+ subject { YSI::Git.new(YSI::Executor.new) }
7
8
 
8
9
  it "grabs the url without the extension" do
9
- allow(subject).to receive(:run_git).with("remote -v").and_return(<<EOT
10
+ allow(subject).to receive(:run_git).with(["remote","-v"]).and_return(<<EOT
10
11
  origin git@github.com:cornelius/red_herring (fetch)
11
12
  origin git@github.com:cornelius/red_herring (push)
12
13
  EOT
@@ -15,7 +16,7 @@ EOT
15
16
  end
16
17
 
17
18
  it "grabs the url with the extension" do
18
- allow(subject).to receive(:run_git).with("remote -v").and_return(<<EOT
19
+ allow(subject).to receive(:run_git).with(["remote","-v"]).and_return(<<EOT
19
20
  origin git@github.com:cornelius/red_herring.git (fetch)
20
21
  origin git@github.com:cornelius/red_herring.git (push)
21
22
  EOT
@@ -30,7 +31,7 @@ EOT
30
31
  it "returns true if local changes are not in remote branch" do
31
32
  dir = given_directory
32
33
  setup_test_git_repo("007", dir)
33
- git = YSI::Git.new(File.join(dir, "red_herring"))
34
+ git = YSI::Git.new(YSI::Executor.new, File.join(dir, "red_herring"))
34
35
 
35
36
  expect(git.needs_push?).to be(true)
36
37
  end
@@ -38,7 +39,7 @@ EOT
38
39
  it "returns false if local changes are in remote branch" do
39
40
  dir = given_directory
40
41
  setup_test_git_repo("008", dir)
41
- git = YSI::Git.new(File.join(dir, "red_herring"))
42
+ git = YSI::Git.new(YSI::Executor.new, File.join(dir, "red_herring"))
42
43
 
43
44
  expect(git.needs_push?).to be(false)
44
45
  end
@@ -0,0 +1,49 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe YSI::Init do
4
+ use_given_filesystem
5
+
6
+ it "falls back to generic project if it can not detect type" do
7
+ path = given_directory
8
+
9
+ init = YSI::Init.new(path)
10
+ out = double
11
+ allow(out).to receive(:puts)
12
+ init.out = out
13
+ init.setup_config
14
+
15
+ expected_config = <<-EOT
16
+ # Experimental release automation. See https://github.com/cornelius/yes_ship_it.
17
+ assertions:
18
+ - release_branch
19
+ - working_directory
20
+ - version
21
+ - change_log
22
+ - tag
23
+ - pushed_tag
24
+ - pushed_code
25
+ - yes_it_shipped
26
+ EOT
27
+ expect(File.read(File.join(path, "yes_ship_it.conf"))).to eq(expected_config)
28
+ end
29
+
30
+ it "detects ruby" do
31
+ path = nil
32
+ given_directory("init") do
33
+ path = given_directory_from_data("ruby", from: "init/ruby" )
34
+ end
35
+
36
+ init = YSI::Init.new(path)
37
+ out = double
38
+ allow(out).to receive(:puts)
39
+ init.out = out
40
+ init.setup_config
41
+
42
+ expected_config = <<-EOT
43
+ # Experimental release automation. See https://github.com/cornelius/yes_ship_it.
44
+ include:
45
+ ruby_gem
46
+ EOT
47
+ expect(File.read(File.join(path, "yes_ship_it.conf"))).to eq(expected_config)
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe YSI::Plugin do
4
+ use_given_filesystem
5
+
6
+ it "loads plugins" do
7
+ dir = given_directory do
8
+ given_directory "yes_ship_it" do
9
+ given_directory_from_data "assertions", from: "plugins"
10
+ end
11
+ end
12
+
13
+ expect(YSI::Plugin.new(dir).load).to eq({
14
+ "my_other_plugin" => YSI::MyOtherPlugin,
15
+ "my_plugin" => YSI::MyPlugin
16
+ })
17
+ end
18
+ end
@@ -7,6 +7,10 @@ shared_examples "an assertion" do
7
7
  expect(assertion.display_name).to be_a(String)
8
8
  end
9
9
 
10
+ it "has a display name as class method" do
11
+ expect(assertion.class.display_name).to be_a(String)
12
+ end
13
+
10
14
  it "checks" do
11
15
  expect(assertion).to respond_to(:check)
12
16
  end
@@ -14,8 +18,4 @@ shared_examples "an assertion" do
14
18
  it "asserts" do
15
19
  expect(assertion).to respond_to(:assert)
16
20
  end
17
-
18
- it "reports errors" do
19
- expect(assertion).to respond_to(:error)
20
- end
21
21
  end
@@ -0,0 +1,17 @@
1
+ shared_examples "an executor" do
2
+ it "runs command" do
3
+ expect(subject).to respond_to(:run_command)
4
+ end
5
+
6
+ it "posts http" do
7
+ expect(subject).to respond_to(:http_post)
8
+ end
9
+
10
+ it "puts http" do
11
+ expect(subject).to respond_to(:http_put)
12
+ end
13
+
14
+ it "deletes http" do
15
+ expect(subject).to respond_to(:http_delete)
16
+ end
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yes_ship_it
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cornelius Schumacher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-10 00:00:00.000000000 Z
11
+ date: 2016-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inifile
@@ -135,6 +135,7 @@ files:
135
135
  - ".rspec"
136
136
  - CHANGELOG.md
137
137
  - Gemfile
138
+ - MIT-LICENSE
138
139
  - README.md
139
140
  - USERS.md
140
141
  - assertions/built_gem.rb
@@ -154,11 +155,18 @@ files:
154
155
  - lib/version.rb
155
156
  - lib/yes_ship_it.rb
156
157
  - lib/yes_ship_it/assertion.rb
158
+ - lib/yes_ship_it/dry_executor.rb
157
159
  - lib/yes_ship_it/engine.rb
158
160
  - lib/yes_ship_it/exceptions.rb
161
+ - lib/yes_ship_it/executor.rb
159
162
  - lib/yes_ship_it/git.rb
163
+ - lib/yes_ship_it/init.rb
164
+ - lib/yes_ship_it/plugin.rb
165
+ - spec/data/init/ruby/lib/version.rb
160
166
  - spec/data/obs/mycroft.spec.erb
161
167
  - spec/data/obs/oscrc
168
+ - spec/data/plugins/my_other_plugin.rb
169
+ - spec/data/plugins/my_plugin.rb
162
170
  - spec/data/red_herring-000.tar.gz
163
171
  - spec/data/red_herring-001.tar.gz
164
172
  - spec/data/red_herring-002.tar.gz
@@ -168,18 +176,24 @@ files:
168
176
  - spec/data/red_herring-006.tar.gz
169
177
  - spec/data/red_herring-007.tar.gz
170
178
  - spec/data/red_herring-008.tar.gz
179
+ - spec/data/version/polkaversion.h
171
180
  - spec/data/version/version.go
172
181
  - spec/data/version/version.rb
173
182
  - spec/data/yes_ship_it.conf
174
183
  - spec/data/yes_ship_it.include.conf
184
+ - spec/data/yes_ship_it.plugins.conf
175
185
  - spec/data/yes_ship_it.unknown.conf
176
186
  - spec/integration/cli_spec.rb
177
187
  - spec/integration/spec_helper.rb
178
188
  - spec/spec_helper.rb
179
189
  - spec/system/data/red_herring-checkout-build.tar.gz
190
+ - spec/system/data/red_herring-checkout-dry-run.tar.gz
180
191
  - spec/system/data/red_herring-checkout-not-push.tar.gz
181
192
  - spec/system/data/red_herring-checkout-push.tar.gz
193
+ - spec/system/data/red_herring-checkout-rpm.tar.gz
182
194
  - spec/system/data/red_herring-remote.tar.gz
195
+ - spec/system/dry_run_spec.rb
196
+ - spec/system/rpm_spec.rb
183
197
  - spec/system/ruby_gem_spec.rb
184
198
  - spec/system/spec_helper.rb
185
199
  - spec/unit/assertion_spec.rb
@@ -194,10 +208,15 @@ files:
194
208
  - spec/unit/assertions/working_directory_spec.rb
195
209
  - spec/unit/assertions/yes_it_shipped_spec.rb
196
210
  - spec/unit/assertions_spec.rb
211
+ - spec/unit/dry_executor_spec.rb
197
212
  - spec/unit/engine_spec.rb
213
+ - spec/unit/executor_spec.rb
198
214
  - spec/unit/git_spec.rb
215
+ - spec/unit/init_spec.rb
216
+ - spec/unit/plugin_spec.rb
199
217
  - spec/unit/spec_helper.rb
200
218
  - spec/unit/support/assertion_examples.rb
219
+ - spec/unit/support/executor_examples.rb
201
220
  - yes_ship_it-0.0.1.gem
202
221
  - yes_ship_it.conf
203
222
  - yes_ship_it.gemspec
@@ -221,8 +240,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
240
  version: 1.3.6
222
241
  requirements: []
223
242
  rubyforge_project: yes_ship_it
224
- rubygems_version: 2.4.5.1
243
+ rubygems_version: 2.2.2
225
244
  signing_key:
226
245
  specification_version: 4
227
246
  summary: The ultimate release script
228
247
  test_files: []
248
+ has_rdoc: