yes_ship_it 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 444ecc2191ed065ffeb7d23921a8518897ef5f59
4
- data.tar.gz: 41ccaa7257b29964108a58bd27ddd5a9519984b8
3
+ metadata.gz: f0a3bdc9066a3756da3d10312af339a670ebb3b5
4
+ data.tar.gz: f0c52e701d5bc7ede706a76cdc1550d9d9199cfd
5
5
  SHA512:
6
- metadata.gz: e5ab4853e2fd9337988199767d0264046b49f3122c773bda25d15d0f182f9f75caa73fa30764cb6dfa4c53fc72b1dafb52ccdba7ed625a9fafbf2d2599042afb
7
- data.tar.gz: 9396162f0020b8ce79e9fc15475010f41b0da38a55c3f677172436a12e1c2d61b3a8d5152a07721688f1f5ab7037b6d9fc78d1a6323d3eb12da132c9a7fb84c4
6
+ metadata.gz: 881cc76db9867a69368e18a8e0f45ab05c8de8c008160897806d01cf3ed425600bfefe9ad2c388c73e458d859eb5298b396d08e709293148b1fe959b51ce3a10
7
+ data.tar.gz: 8593fe6bd2e0369073444351c81dfda0ba02c0728ace57d53401b97427c23c8c8a58e8d94ffd4d33d9d9397cea0c6e09f525c3a24a426159c57e16075a25f34b
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/CHANGELOG.md ADDED
@@ -0,0 +1,14 @@
1
+ # Change log of yes_ship_it
2
+
3
+ ## Version 0.0.2
4
+
5
+ * Don't run assertions when dependent assertions have failed
6
+ * Add support for including standard configs for certain scenarios. The first
7
+ and only one for now is ruby_gems for releasing Ruby Gems.
8
+ * Add helper command `yes_ship_it changelog` to show the git log with all
9
+ changes since last release as inspiration for the actual change log
10
+ * Check that the change log contains an entry for the version to be released
11
+
12
+ ## Version 0.0.1
13
+
14
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md CHANGED
@@ -58,12 +58,12 @@ A more detailed configuration could look like this:
58
58
 
59
59
  ```yaml
60
60
  assertions:
61
- ci_green
62
- release_notes
63
- version_number
64
- gem_built
65
- release_tagged
66
- gem_pushed
61
+ - ci_green
62
+ - release_notes
63
+ - version_number
64
+ - gem_built
65
+ - release_tagged
66
+ - gem_pushed
67
67
  ```
68
68
 
69
69
  There can be more configuration on a general level or the level of the
@@ -33,7 +33,8 @@ module YSI
33
33
 
34
34
  def assert(dry_run: false)
35
35
  if !dry_run
36
- if !system("gem build #{gemspec_file}")
36
+ `gem build #{gemspec_file}`
37
+ if $?.to_i != 0
37
38
  return nil
38
39
  end
39
40
  end
@@ -1,5 +1,7 @@
1
1
  module YSI
2
2
  class ChangeLog < Assertion
3
+ needs "version"
4
+
3
5
  attr_reader :error
4
6
 
5
7
  def initialize(engine)
@@ -16,10 +18,23 @@ module YSI
16
18
  return nil
17
19
  end
18
20
 
21
+ @error = check_content(File.read("CHANGELOG.md"))
22
+ if @error
23
+ return nil
24
+ end
25
+
19
26
  "CHANGELOG.md"
20
27
  end
21
28
 
22
29
  def assert(dry_run: false)
23
30
  end
31
+
32
+ def check_content(content)
33
+ if content =~ /#{engine.version}/
34
+ nil
35
+ else
36
+ return "Can't find version #{engine.version} in change log"
37
+ end
38
+ end
24
39
  end
25
40
  end
@@ -1,5 +1,7 @@
1
1
  module YSI
2
2
  class PublishedGem < Assertion
3
+ needs "built_gem"
4
+
3
5
  attr_accessor :error
4
6
 
5
7
  def initialize(engine)
@@ -1,11 +1,13 @@
1
1
  module YSI
2
2
  class PushedTag < Assertion
3
+ needs "tag"
4
+
3
5
  def display_name
4
6
  "pushed tag"
5
7
  end
6
8
 
7
9
  def tag
8
- "v#{@engine.version}"
10
+ @engine.tag
9
11
  end
10
12
 
11
13
  def check
data/assertions/tag.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  module YSI
2
2
  class Tag < Assertion
3
+ needs "version"
4
+
3
5
  def display_name
4
6
  "tag"
5
7
  end
6
8
 
7
9
  def tag
8
- "v#{@engine.version}"
10
+ @engine.tag
9
11
  end
10
12
 
11
13
  def check
data/bin/yes_ship_it CHANGED
@@ -2,8 +2,26 @@
2
2
 
3
3
  require_relative("../lib/yes_ship_it.rb")
4
4
 
5
- puts "Shipping..."
6
- puts
5
+ options = {}
6
+ option_parser = OptionParser.new do |opts|
7
+ opts.banner = "Usage: yes_ship_it [options] [command]"
8
+
9
+ opts.separator ""
10
+ opts.separator "Commands:"
11
+ opts.separator " changelog - show change log since last release"
12
+ opts.separator ""
13
+ opts.separator "Specific options:"
14
+
15
+ opts.on("--dry-run", "Just pretend. Don't change anything.") do |v|
16
+ options[:dry_run] = v
17
+ end
18
+
19
+ opts.on_tail("-h", "--help", "Show this message") do
20
+ puts opts
21
+ exit
22
+ end
23
+ end
24
+ option_parser.parse!
7
25
 
8
26
  config_file = "yes_ship_it.conf"
9
27
 
@@ -12,14 +30,29 @@ if !File.exist?(config_file)
12
30
  exit 1
13
31
  end
14
32
 
15
- engine = YSI::Engine.new
16
- engine.dry_run = ARGV == ["--dry-run"]
33
+ if ARGV == ["changelog"]
34
+ engine = YSI::Engine.new
35
+ engine.check_assertion(YSI::Version)
36
+ tag = `git tag`.split("\n").last
37
+ system("git log #{tag}..HEAD")
38
+ exit 0
39
+ elsif ARGV.empty?
40
+ puts "Shipping..."
41
+ puts
42
+
43
+ engine = YSI::Engine.new
44
+ engine.dry_run = options[:dry_run]
17
45
 
18
- begin
19
- engine.read(config_file)
46
+ begin
47
+ engine.read(config_file)
20
48
 
21
- exit engine.run
22
- rescue YSI::Error => e
23
- STDERR.puts e
49
+ exit engine.run
50
+ rescue YSI::Error => e
51
+ STDERR.puts e
52
+ exit 1
53
+ end
54
+ else
55
+ $stderr.puts "Unrecognized arguments: #{ARGV.join(" ")}"
56
+ puts option_parser
24
57
  exit 1
25
58
  end
@@ -0,0 +1,7 @@
1
+ assertions:
2
+ - version
3
+ - change_log
4
+ - tag
5
+ - built_gem
6
+ - published_gem
7
+ - pushed_tag
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module YSI
2
+ VERSION = "0.0.2"
3
+ end
@@ -3,8 +3,38 @@ module YSI
3
3
  attr_reader :error
4
4
  attr_accessor :engine
5
5
 
6
+ def self.class_for_name(name)
7
+ class_name = name.split("_").map { |n| n.capitalize }.join
8
+ begin
9
+ Object.const_get("YSI::" + class_name)
10
+ rescue NameError
11
+ raise YSI::Error.new("Error: Unknown assertion '#{name}'")
12
+ end
13
+ end
14
+
15
+ def self.needs(dependency)
16
+ @dependency_names ||= []
17
+ # Classes might not all be loaded yet, so delay class name lookup to
18
+ # first invocation of #needs
19
+ @dependency_names << dependency
20
+ end
21
+
22
+ def self.dependency_names
23
+ @dependency_names || []
24
+ end
25
+
6
26
  def initialize(engine)
7
27
  @engine = engine
8
28
  end
29
+
30
+ def needs
31
+ @dependencies ||= self.class.dependency_names.map do |d|
32
+ Assertion.class_for_name(d)
33
+ end
34
+ end
35
+
36
+ def needs?(dependency)
37
+ needs.include?(dependency)
38
+ end
9
39
  end
10
40
  end
@@ -5,15 +5,6 @@ module YSI
5
5
  attr_accessor :out
6
6
  attr_accessor :dry_run
7
7
 
8
- def self.class_for_assertion_name(name)
9
- class_name = name.split("_").map { |n| n.capitalize }.join
10
- begin
11
- Object.const_get("YSI::" + class_name)
12
- rescue NameError
13
- raise YSI::Error.new("Error: Unknown assertion '#{name}'")
14
- end
15
- end
16
-
17
8
  def initialize
18
9
  @assertions = []
19
10
  @out = STDOUT
@@ -22,30 +13,64 @@ module YSI
22
13
  def read(filename)
23
14
  config = YAML.load_file(filename)
24
15
 
25
- assertions = config["assertions"]
26
- if assertions
27
- assertions.each do |assertion|
28
- if assertion == "version_number"
29
- out.puts "Warning: use `version` instead of `version_number`."
30
- out.puts
31
- assertion = "version"
32
- end
16
+ config.each do |key,value|
17
+ if key == "include"
18
+ included_file = value
19
+ configs_path = File.expand_path("../../../configs", __FILE__)
20
+ read(File.join(configs_path, included_file + ".conf"))
21
+ elsif key == "assertions"
22
+ assertions = value
23
+ if assertions
24
+ assertions.each do |assertion|
25
+ if assertion == "version_number"
26
+ out.puts "Warning: use `version` instead of `version_number`."
27
+ out.puts
28
+ assertion = "version"
29
+ end
33
30
 
34
- @assertions << YSI::Engine.class_for_assertion_name(assertion).new(self)
31
+ @assertions << YSI::Assertion.class_for_name(assertion).new(self)
32
+ end
33
+ end
35
34
  end
36
35
  end
37
36
  end
38
37
 
38
+ def check_assertion(assertion_class)
39
+ assertion_class.new(self).check
40
+ end
41
+
39
42
  def project_name
40
43
  File.basename(Dir.pwd)
41
44
  end
42
45
 
46
+ def tag
47
+ "v#{version}"
48
+ end
49
+
50
+ def dependency_errored?(assertion, errored_assertions)
51
+ assertion.needs.each do |need|
52
+ errored_assertions.each do |errored_assertion|
53
+ if errored_assertion.class == need
54
+ return true
55
+ end
56
+ end
57
+ end
58
+ false
59
+ end
60
+
43
61
  def run
44
62
  failed_assertions = []
45
63
  errored_assertions = []
64
+ skipped_assertions = []
46
65
 
47
66
  @assertions.each do |assertion|
48
67
  out.print "Checking #{assertion.display_name}: "
68
+ if dependency_errored?(assertion, errored_assertions) ||
69
+ dependency_errored?(assertion, skipped_assertions)
70
+ out.puts "skip (because dependency errored)"
71
+ skipped_assertions << assertion
72
+ next
73
+ end
49
74
  success = assertion.check
50
75
  if success
51
76
  out.puts success
data/lib/yes_ship_it.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "yaml"
2
2
  require "rest-client"
3
+ require "optparse"
3
4
 
4
5
  require_relative "yes_ship_it/assertion.rb"
5
6
  require_relative "yes_ship_it/engine.rb"
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ include:
2
+ ruby_gem
@@ -24,8 +24,7 @@ Warning: use `version` instead of `version_number`.
24
24
 
25
25
  Checking version number: error
26
26
  Expected version in lib/version.rb
27
- Checking change log: error
28
- Expected change log in CHANGELOG.md
27
+ Checking change log: skip (because dependency errored)
29
28
 
30
29
  Couldn't ship red_herring. Help me.
31
30
  EOT
@@ -119,5 +118,79 @@ EOT
119
118
  working_directory: File.join(dir, "red_herring"))).
120
119
  to exit_with_success(expected_output)
121
120
  end
121
+
122
+ it "checks the change log" do
123
+ dir = given_directory
124
+
125
+ setup_test_git_repo("004", dir)
126
+
127
+ expected_output = <<EOT
128
+ Shipping...
129
+
130
+ Checking version number: 0.0.2
131
+ Checking change log: error
132
+ Can't find version 0.0.2 in change log
133
+ Checking built gem: fail
134
+ Checking tag: fail
135
+
136
+ Couldn't ship red_herring. Help me.
137
+ EOT
138
+
139
+ expect(run_command(working_directory: File.join(dir, "red_herring"))).
140
+ to exit_with_error(1, "", expected_output)
141
+ end
142
+
143
+ it "skips assertions with errored dependencies" do
144
+ dir = nil
145
+ given_directory do
146
+ dir = given_directory "test_project" do
147
+ given_file("yes_ship_it.conf", from: "yes_ship_it.include.conf")
148
+ end
149
+ end
150
+
151
+ expected_output = <<EOT
152
+ Shipping...
153
+
154
+ Checking version number: error
155
+ Expected version in lib/version.rb
156
+ Checking change log: skip (because dependency errored)
157
+ Checking tag: skip (because dependency errored)
158
+ Checking built gem: error
159
+ I need a gemspec: test_project.gemspec
160
+ Checking published gem: skip (because dependency errored)
161
+ Checking pushed tag: skip (because dependency errored)
162
+
163
+ Couldn't ship test_project. Help me.
164
+ EOT
165
+
166
+ expect(run_command(working_directory: dir)).
167
+ to exit_with_error(1, "", expected_output)
168
+ end
169
+ end
170
+
171
+ describe "changelog helper" do
172
+ it "shows changelog since last version" do
173
+ dir = given_directory
174
+
175
+ setup_test_git_repo("005", dir)
176
+
177
+ expected_output = <<EOT
178
+ commit 22cb6af3f7ea8385a8d0c62340c99265e0c8a63d
179
+ Author: Cornelius Schumacher <schumacher@kde.org>
180
+ Date: Fri Jul 10 23:54:01 2015 +0200
181
+
182
+ Implement magic method
183
+
184
+ commit 40ec45663e2a3cf32895b451cc43e667463af431
185
+ Author: Cornelius Schumacher <schumacher@kde.org>
186
+ Date: Fri Jul 10 23:50:08 2015 +0200
187
+
188
+ Add magic method
189
+ EOT
190
+
191
+ expect(run_command(args: ["changelog"],
192
+ working_directory: File.join(dir, "red_herring"))).
193
+ to exit_with_success(expected_output)
194
+ end
122
195
  end
123
196
  end
@@ -0,0 +1,15 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe YSI::Assertion do
4
+ describe ".class_for_name" do
5
+ it "creates VersionNumber class" do
6
+ expect(YSI::Assertion.class_for_name("version")).
7
+ to be(YSI::Version)
8
+ end
9
+
10
+ it "creates ChangeLog class" do
11
+ expect(YSI::Assertion.class_for_name("change_log")).
12
+ to be(YSI::ChangeLog)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,52 @@
1
+ require_relative "../spec_helper.rb"
2
+
3
+ describe YSI::ChangeLog do
4
+ describe "checks content of change log" do
5
+ it "when empty" do
6
+ engine = YSI::Engine.new
7
+ engine.version = "1.2.3"
8
+ a = YSI::ChangeLog.new(engine)
9
+ expect(a.check_content("")).to eq("Can't find version 1.2.3 in change log")
10
+ end
11
+
12
+ it "when no version" do
13
+ engine = YSI::Engine.new
14
+ engine.version = "1.2.3"
15
+ a = YSI::ChangeLog.new(engine)
16
+ content = <<EOT
17
+ # Change log
18
+
19
+ ## Version 1.0.0
20
+
21
+ * Some changes
22
+ EOT
23
+ expect(a.check_content(content)).to eq("Can't find version 1.2.3 in change log")
24
+ end
25
+
26
+ it "when all info is there" do
27
+ engine = YSI::Engine.new
28
+ engine.version = "1.2.3"
29
+ a = YSI::ChangeLog.new(engine)
30
+ content = <<EOT
31
+ # Change log
32
+
33
+ ## Version 1.2.3
34
+
35
+ * Some changes
36
+ EOT
37
+ expect(a.check_content(content)).to be_nil
38
+ end
39
+ end
40
+
41
+ describe "dependencies" do
42
+ it "#needs?" do
43
+ a = YSI::ChangeLog.new(YSI::Engine)
44
+ expect(a.needs?(YSI::Version)).to be(true)
45
+ end
46
+
47
+ it "#needs" do
48
+ a = YSI::ChangeLog.new(YSI::Engine)
49
+ expect(a.needs).to eq([YSI::Version])
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,15 @@
1
+ require_relative "../spec_helper.rb"
2
+
3
+ describe YSI::PushedTag do
4
+ describe "dependencies" do
5
+ it "#needs?" do
6
+ a = YSI::PushedTag.new(YSI::Engine)
7
+ expect(a.needs?(YSI::Tag)).to be(true)
8
+ end
9
+
10
+ it "#needs" do
11
+ a = YSI::PushedTag.new(YSI::Engine)
12
+ expect(a.needs).to eq([YSI::Tag])
13
+ end
14
+ end
15
+ end
@@ -5,18 +5,6 @@ include GivenFilesystemSpecHelpers
5
5
  describe YSI::Engine do
6
6
  use_given_filesystem
7
7
 
8
- describe "#class_for_assertion_name" do
9
- it "creates VersionNumber class" do
10
- expect(YSI::Engine.class_for_assertion_name("version")).
11
- to be(YSI::Version)
12
- end
13
-
14
- it "creates ChangeLog class" do
15
- expect(YSI::Engine.class_for_assertion_name("change_log")).
16
- to be(YSI::ChangeLog)
17
- end
18
- end
19
-
20
8
  describe "#read" do
21
9
  it "reads valid configuration" do
22
10
  path = nil
@@ -45,6 +33,13 @@ describe YSI::Engine do
45
33
  ysi.read(path)
46
34
  }.to raise_error YSI::Error
47
35
  end
36
+
37
+ it "throws error when file does not exist" do
38
+ ysi = YSI::Engine.new
39
+ expect {
40
+ ysi.read("/this/file/does/not/exist.conf")
41
+ }.to raise_error Errno::ENOENT
42
+ end
48
43
  end
49
44
 
50
45
  it "runs assertions" do
@@ -65,4 +60,48 @@ describe YSI::Engine do
65
60
 
66
61
  ysi.run
67
62
  end
63
+
64
+ it "runs assertion" do
65
+ ysi = YSI::Engine.new
66
+
67
+ expect_any_instance_of(YSI::Version).to receive(:check)
68
+
69
+ ysi.check_assertion(YSI::Version)
70
+ end
71
+
72
+ it "provides tag" do
73
+ ysi = YSI::Engine.new
74
+ ysi.version = "1.2.3"
75
+
76
+ expect(ysi.tag).to eq("v1.2.3")
77
+ end
78
+
79
+ it "loads standard config" do
80
+ ysi_standard = YSI::Engine.new
81
+ ysi_standard.read("configs/ruby_gem.conf")
82
+
83
+ ysi = YSI::Engine.new
84
+ ysi.read(given_file("yes_ship_it.include.conf"))
85
+
86
+ expect(ysi.assertions.count).to be >= 6
87
+ ysi_standard.assertions.each_with_index do |assertion, i|
88
+ expect(assertion.class).to eq(ysi.assertions[i].class)
89
+ end
90
+ end
91
+
92
+ describe "#dependency_errored?" do
93
+ it "returns true, if no dependency errored" do
94
+ engine = YSI::Engine.new
95
+ errored_assertions = []
96
+ assertion = YSI::ChangeLog.new(engine)
97
+ expect(engine.dependency_errored?(assertion, errored_assertions)).to be(false)
98
+ end
99
+
100
+ it "returns false, if a dependency errored" do
101
+ engine = YSI::Engine.new
102
+ errored_assertions = [YSI::Version.new(engine)]
103
+ assertion = YSI::ChangeLog.new(engine)
104
+ expect(engine.dependency_errored?(assertion, errored_assertions)).to be(true)
105
+ end
106
+ end
68
107
  end
@@ -1,5 +1,7 @@
1
1
  require_relative "../../lib/yes_ship_it.rb"
2
2
 
3
+ require "given_filesystem/spec_helpers"
4
+
3
5
  support = File.expand_path("../support", __FILE__) + "/*.rb"
4
6
 
5
7
  Dir[support].each { |f| require f }
Binary file
data/yes_ship_it.conf CHANGED
@@ -1,9 +1,3 @@
1
1
  # Experimental release automation. See https://github.com/cornelius/yes_ship_it.
2
-
3
- assertions:
4
- - version
5
- - change_log
6
- - built_gem
7
- - published_gem
8
- - tag
9
- - pushed_tag
2
+ include:
3
+ ruby_gem
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "yes_ship_it"
6
+ s.version = YSI::VERSION
7
+ s.license = 'MIT'
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Cornelius Schumacher']
10
+ s.email = ['schumacher@kde.org']
11
+ s.homepage = "http://github.com/cornelius/yes_ship_it"
12
+ s.summary = "The ultimate release script"
13
+ s.description = "Whenever the answer is 'Yes, ship it!' you will need yes_ship_it. It is the ultimate helper in releasing software.."
14
+
15
+ s.required_rubygems_version = ">= 1.3.6"
16
+ s.rubyforge_project = "yes_ship_it"
17
+
18
+ s.add_development_dependency "rspec", "~>3"
19
+ s.add_development_dependency "given_filesystem"
20
+ s.add_development_dependency "cli_tester"
21
+
22
+ s.files = `git ls-files`.split("\n")
23
+ s.require_path = 'lib'
24
+ 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.1
4
+ version: 0.0.2
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-07-03 00:00:00.000000000 Z
11
+ date: 2015-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -60,7 +60,10 @@ executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
+ - .gitignore
63
64
  - .rspec
65
+ - CHANGELOG.md
66
+ - Gemfile
64
67
  - README.md
65
68
  - assertions/built_gem.rb
66
69
  - assertions/change_log.rb
@@ -69,6 +72,8 @@ files:
69
72
  - assertions/tag.rb
70
73
  - assertions/version.rb
71
74
  - bin/yes_ship_it
75
+ - configs/ruby_gem.conf
76
+ - lib/version.rb
72
77
  - lib/yes_ship_it.rb
73
78
  - lib/yes_ship_it/assertion.rb
74
79
  - lib/yes_ship_it/engine.rb
@@ -77,15 +82,23 @@ files:
77
82
  - spec/data/red_herring-001.tar.gz
78
83
  - spec/data/red_herring-002.tar.gz
79
84
  - spec/data/red_herring-003.tar.gz
85
+ - spec/data/red_herring-004.tar.gz
86
+ - spec/data/red_herring-005.tar.gz
80
87
  - spec/data/yes_ship_it.conf
88
+ - spec/data/yes_ship_it.include.conf
81
89
  - spec/data/yes_ship_it.unknown.conf
82
90
  - spec/integration/cli_spec.rb
83
91
  - spec/integration/spec_helper.rb
92
+ - spec/unit/assertion_spec.rb
93
+ - spec/unit/assertions/change_log_spec.rb
94
+ - spec/unit/assertions/pushed_tag_spec.rb
84
95
  - spec/unit/assertions_spec.rb
85
96
  - spec/unit/engine_spec.rb
86
97
  - spec/unit/spec_helper.rb
87
98
  - spec/unit/support/assertion_examples.rb
99
+ - yes_ship_it-0.0.1.gem
88
100
  - yes_ship_it.conf
101
+ - yes_ship_it.gemspec
89
102
  homepage: http://github.com/cornelius/yes_ship_it
90
103
  licenses:
91
104
  - MIT