poise-boiler 1.1.11 → 1.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +35 -0
- data/lib/poise_boiler/helpers/rake/bump.rb +126 -0
- data/lib/poise_boiler/helpers/rake/check.rb +166 -0
- data/lib/poise_boiler/helpers/rake/core.rb +1 -1
- data/lib/poise_boiler/helpers/rake/debug.rb +71 -0
- data/lib/poise_boiler/helpers/rake/release.rb +148 -0
- data/lib/poise_boiler/helpers/rake.rb +8 -0
- data/lib/poise_boiler/helpers/spec_helper.rb +4 -0
- data/lib/poise_boiler/kitchen.rb +10 -3
- data/lib/poise_boiler/version.rb +1 -1
- data/poise-boiler.gemspec +4 -3
- data/spec/helpers/{badge_spec.rb → rake/badge_spec.rb} +0 -0
- data/spec/helpers/rake/bump_spec.rb +100 -0
- data/spec/helpers/rake/check_spec.rb +123 -0
- data/spec/helpers/{travis_spec.rb → rake/travis_spec.rb} +0 -0
- data/spec/{rakefile_spec.rb → helpers/rake_spec.rb} +6 -1
- data/spec/{spec_helper_spec.rb → helpers/spec_helper_spec.rb} +0 -0
- metadata +54 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 72e3c9430dc7859ededecfbd2c4ada39ec9e7434
|
|
4
|
+
data.tar.gz: bf5924d728d0f96841d5c0fa88594444666fac4a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 63e59107f784622d23f813785a6924e449aeb842f11496dfed5dc22e8156ab905f887b08dcfd39389aa20640640c14c0bd0cd4b408831c856e0952125fcd26a0
|
|
7
|
+
data.tar.gz: ab1c13de56d88922fb0a1a9f861d7e5ac5e5f6f9d63785be34bd52020622560915bcdd55cc2d58b10347b795eab464b4911cff197afb1f047245ea77c814bf3c
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.2.0
|
|
4
|
+
|
|
5
|
+
* A full suite of release automation commands.
|
|
6
|
+
* Re-add the `travis` gem as a dependency now that it has removed the ancient
|
|
7
|
+
`pry` it depended on.
|
|
8
|
+
* Improved handling for setting test verbosity in a unified way.
|
|
9
|
+
|
|
3
10
|
## v1.1.11
|
|
4
11
|
|
|
5
12
|
* Make sure `ss` is available on EL7 for `port` resources in Serverspec.
|
data/README.md
CHANGED
|
@@ -46,6 +46,41 @@ and a `spec` task to run unit tests.
|
|
|
46
46
|
require 'poise_boiler/rakefile'
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
### Rake Tasks
|
|
50
|
+
|
|
51
|
+
#### `test`
|
|
52
|
+
|
|
53
|
+
Run all tests, specs, foodcritic, and kitchen.
|
|
54
|
+
|
|
55
|
+
#### `spec`
|
|
56
|
+
|
|
57
|
+
Run Rspec tests.
|
|
58
|
+
|
|
59
|
+
#### `badges`
|
|
60
|
+
|
|
61
|
+
Generate README badges for a project.
|
|
62
|
+
|
|
63
|
+
#### `debug`, `quiet`, `verbose`
|
|
64
|
+
|
|
65
|
+
Set the relevant mode environment variables. Can be abbreviated `d`, `q`, and `v`.
|
|
66
|
+
|
|
67
|
+
#### `check`
|
|
68
|
+
|
|
69
|
+
List uncommitted file changes and commits since the last release.
|
|
70
|
+
|
|
71
|
+
#### `checkall`
|
|
72
|
+
|
|
73
|
+
Run `quiet check` for all projects. This is specific to my folder layout and is
|
|
74
|
+
less likely to work for others.
|
|
75
|
+
|
|
76
|
+
#### `travis`
|
|
77
|
+
|
|
78
|
+
Run tests for Travis CI. This does some setup and then runs `rake test`.
|
|
79
|
+
|
|
80
|
+
#### `release`, `release:minor`, `release:major`
|
|
81
|
+
|
|
82
|
+
Create a new release and push toe RubyGems and Supermarket.
|
|
83
|
+
|
|
49
84
|
## `.kitchen.yml`
|
|
50
85
|
|
|
51
86
|
The `.kitchen.yml` helper sets up a default driver and default values for
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'git'
|
|
18
|
+
|
|
19
|
+
require 'halite/helper_base'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module PoiseBoiler
|
|
23
|
+
module Helpers
|
|
24
|
+
class Rake
|
|
25
|
+
# Helper methods for bumping gem versions.
|
|
26
|
+
#
|
|
27
|
+
# @api private
|
|
28
|
+
# @since 1.2.0
|
|
29
|
+
module BumpHelpers
|
|
30
|
+
VERSION_CONST = /(^\s*VERSION = ['"])([^'"]+)(['"]\s*$)/
|
|
31
|
+
|
|
32
|
+
def latest_tag
|
|
33
|
+
git = Git.open(base)
|
|
34
|
+
if git.tags.empty?
|
|
35
|
+
nil
|
|
36
|
+
else
|
|
37
|
+
tag_name = git.tags.last.name
|
|
38
|
+
if tag_name =~ /^v(.*)$/
|
|
39
|
+
$1
|
|
40
|
+
else
|
|
41
|
+
tag_name
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def bumped_version(type: :patch, release: false)
|
|
47
|
+
current_version = latest_tag
|
|
48
|
+
next_version = if current_version
|
|
49
|
+
parts = current_version.split(/\./).map(&:to_i)
|
|
50
|
+
bump_index = {major: 0, minor: 1, patch: 2}[type]
|
|
51
|
+
parts[bump_index] += 1
|
|
52
|
+
(bump_index+1..2).each {|n| parts[n] = 0 }
|
|
53
|
+
parts.map(&:to_s).join('.')
|
|
54
|
+
else
|
|
55
|
+
'1.0.0'
|
|
56
|
+
end
|
|
57
|
+
# Release mode means plain, otherwise .pre.
|
|
58
|
+
if release
|
|
59
|
+
next_version
|
|
60
|
+
else
|
|
61
|
+
next_version + '.pre'
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def find_version_rb
|
|
66
|
+
candidates = Dir[File.join(base, 'lib', '**', 'version.rb')]
|
|
67
|
+
candidates.min_by {|path| path.size }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def bump_version!(type: :patch, release: false, &block)
|
|
71
|
+
version_rb_path = find_version_rb
|
|
72
|
+
raise "Unable to find a version.rb in #{base}" unless version_rb_path
|
|
73
|
+
shell.say("Bumping version in #{version_rb_path}") if ENV['DEBUG']
|
|
74
|
+
content = IO.read(version_rb_path)
|
|
75
|
+
raise "Unable to find current version in #{version_rb_path}" unless VERSION_CONST =~ content
|
|
76
|
+
current_version = $2
|
|
77
|
+
version = bumped_version(type: type, release: release)
|
|
78
|
+
shell.say("Bumping gem version from #{current_version} to #{version}")
|
|
79
|
+
new_content = content.gsub(VERSION_CONST, "\\1#{version}\\3")
|
|
80
|
+
IO.write(version_rb_path, new_content)
|
|
81
|
+
begin
|
|
82
|
+
block.call if block
|
|
83
|
+
rescue Exception
|
|
84
|
+
# Restore the original version if anything goes wrong.
|
|
85
|
+
IO.write(version_rb_path, content)
|
|
86
|
+
raise
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Helper for a Rakefile to install tasks for bumping gem versions.
|
|
92
|
+
#
|
|
93
|
+
# @since 1.2.0
|
|
94
|
+
# @example Installing tasks
|
|
95
|
+
# require 'poise_boiler/helpers/rake/bump'
|
|
96
|
+
# PoiseBoiler::Helpers::Rake::Bump.install
|
|
97
|
+
# @example Bumping a patch version
|
|
98
|
+
# $ rake release:bump
|
|
99
|
+
# @example Bumping a minor version
|
|
100
|
+
# $ rake release:bump:minor
|
|
101
|
+
class Bump < Halite::HelperBase
|
|
102
|
+
include BumpHelpers
|
|
103
|
+
|
|
104
|
+
# Install the rake tasks.
|
|
105
|
+
#
|
|
106
|
+
# @return [void]
|
|
107
|
+
def install
|
|
108
|
+
# Delayed so that Rake doesn't need to be loaded to run this file.
|
|
109
|
+
extend ::Rake::DSL
|
|
110
|
+
|
|
111
|
+
task 'release:bump' do
|
|
112
|
+
bump_version!(type: :patch)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
task 'release:bump:minor' do
|
|
116
|
+
bump_version!(type: :minor)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
task 'release:bump:major' do
|
|
120
|
+
bump_version!(type: :major)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'git'
|
|
18
|
+
|
|
19
|
+
require 'halite/helper_base'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module PoiseBoiler
|
|
23
|
+
module Helpers
|
|
24
|
+
class Rake
|
|
25
|
+
# Helper for a Rakefile to install tasks for checking the state of projects.
|
|
26
|
+
#
|
|
27
|
+
# @since 1.2.0
|
|
28
|
+
# @example Installing tasks
|
|
29
|
+
# require 'poise_boiler/helpers/rake/check'
|
|
30
|
+
# PoiseBoiler::Helpers::Rake::Check.install
|
|
31
|
+
# @example Checking the current project
|
|
32
|
+
# $ rake release:check
|
|
33
|
+
class Check < Halite::HelperBase
|
|
34
|
+
# Install the rake tasks.
|
|
35
|
+
#
|
|
36
|
+
# @return [void]
|
|
37
|
+
def install
|
|
38
|
+
# Delayed so that Rake doesn't need to be loaded to run this file.
|
|
39
|
+
extend ::Rake::DSL
|
|
40
|
+
|
|
41
|
+
desc 'Check for unreleased commits'
|
|
42
|
+
task 'release:check' do
|
|
43
|
+
check_project(base, summary: !!ENV['QUIET'])
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
desc 'Check for unreleased commits in all projects'
|
|
47
|
+
task 'release:checkall' do
|
|
48
|
+
base_path = File.expand_path(ENV['POISE_ROOT'] || '~/src')
|
|
49
|
+
Dir.foreach(base_path) do |entry|
|
|
50
|
+
next unless entry =~ /^(poise|application|halite)/
|
|
51
|
+
next if entry =~ /^(application_examples|poise-docker|poise-dash|poise\.io|poise-repomgr)/
|
|
52
|
+
path = File.join(base_path, entry)
|
|
53
|
+
next unless Dir.exist?(File.join(path, '.git'))
|
|
54
|
+
check_project(path, header: "# #{entry}", summary: !ENV['VERBOSE'])
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Aliases for less typing.
|
|
59
|
+
task 'check' => %w{release:check}
|
|
60
|
+
task 'checkall' => %w{release:checkall}
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
# Check a project for changes.
|
|
66
|
+
#
|
|
67
|
+
# @param path [String] Path to the project's git repository.
|
|
68
|
+
# @return [void]
|
|
69
|
+
def check_project(path, header: nil, summary: false)
|
|
70
|
+
git = Git.open(path)
|
|
71
|
+
# Some checks for repos that aren't full projects.
|
|
72
|
+
return unless git.branches['master']
|
|
73
|
+
return unless git.remote('origin').url
|
|
74
|
+
changed = check_changed_files(git)
|
|
75
|
+
commits = check_commits(git)
|
|
76
|
+
shell.say(header, :blue) unless !header || (changed.empty? && commits.empty?)
|
|
77
|
+
display_changed_files(changed, summary: summary) unless changed.empty?
|
|
78
|
+
display_commits(commits, summary: summary) unless commits.empty?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Check for changed files, including new/untracked files.
|
|
82
|
+
#
|
|
83
|
+
# @params git [Git::Base] Git repository to operate on.
|
|
84
|
+
# @return [Array]
|
|
85
|
+
def check_changed_files(git)
|
|
86
|
+
git.status.select {|file| file.type || file.untracked }
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Display changed files.
|
|
90
|
+
#
|
|
91
|
+
# @params changed [Array] Output from {#check_changed_file}
|
|
92
|
+
# @return [void]
|
|
93
|
+
def display_changed_files(changed, summary: false)
|
|
94
|
+
shell.say("#{changed.size} file#{changed.size > 1 ? 's' : ''} with pending changes", :yellow)
|
|
95
|
+
return if summary
|
|
96
|
+
changed.each do |file|
|
|
97
|
+
color = if file.type == 'A' || file.untracked
|
|
98
|
+
:green
|
|
99
|
+
elsif file.type == 'D'
|
|
100
|
+
:red
|
|
101
|
+
end
|
|
102
|
+
shell.say("#{file.type || 'U'} #{file.path}", color)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Check for any commits that are not part of a release. Unpushed commits
|
|
107
|
+
# are displayed in red.
|
|
108
|
+
#
|
|
109
|
+
# @params git [Git::Base] Git repository to operate on.
|
|
110
|
+
# @return [Array]
|
|
111
|
+
def check_commits(git)
|
|
112
|
+
# Find either the latest tag (release) or the first commit in the repo.
|
|
113
|
+
last_release = if git.tags.empty?
|
|
114
|
+
git.log.last
|
|
115
|
+
else
|
|
116
|
+
git.tags.last
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Find all commits since the last release that are not only version bumps.
|
|
120
|
+
commits = git.log.between(last_release.sha, 'master').select do |commit|
|
|
121
|
+
if commit.message !~ /^bump.*for/i
|
|
122
|
+
changed_files = commit.diff_parent.stats[:files].keys
|
|
123
|
+
if changed_files.size != 1 || changed_files.first !~ /lib\/.*\/version\.rb/
|
|
124
|
+
true
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Find all pushed commits since the last release.
|
|
130
|
+
pushed_commits = git.log.between(last_release.sha, 'origin/master').inject(Set.new) do |memo, commit|
|
|
131
|
+
memo << commit.sha
|
|
132
|
+
memo
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
commits.map {|commit| [commit, pushed_commits.include?(commit.sha), last_release] }
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Display commits.
|
|
139
|
+
#
|
|
140
|
+
# @params changed [Array] Output from {#check_commits}
|
|
141
|
+
# @return [void]
|
|
142
|
+
def display_commits(commits, summary: false)
|
|
143
|
+
unpushed_count = commits.inject(0) {|memo, (_, pushed)| memo + (pushed ? 0 : 1) }
|
|
144
|
+
shell.say("#{commits.size} commit#{commits.size > 1 ? 's' : ''} #{unpushed_count > 0 ? "(#{unpushed_count} unpushed) " : ''}since #{commits.first[2].name}", unpushed_count > 0 ? :red : :yellow)
|
|
145
|
+
return if summary
|
|
146
|
+
commits.each do |commit, pushed|
|
|
147
|
+
color = pushed ? nil : :red
|
|
148
|
+
message = commit.message.strip
|
|
149
|
+
if message.empty?
|
|
150
|
+
shell.say("* #{commit.sha}", color)
|
|
151
|
+
else
|
|
152
|
+
message_lines = commit.message.strip.split(/\n/)
|
|
153
|
+
first_line = message_lines.shift
|
|
154
|
+
shell.say("* #{first_line}", color)
|
|
155
|
+
# Filter down to only the first para and indent to match the '* '.
|
|
156
|
+
message_lines = message_lines.take_while {|line| !line.strip.empty? }.map! {|line| ' '+line }
|
|
157
|
+
shell.say(message_lines.join("\n"), color) unless message_lines.empty?
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
@@ -46,7 +46,7 @@ module PoiseBoiler
|
|
|
46
46
|
t.rspec_opts = [].tap do |a|
|
|
47
47
|
a << '--color'
|
|
48
48
|
a << "--format #{ENV['CI'] ? 'documentation' : 'Fuubar'}"
|
|
49
|
-
a << '--backtrace' if ENV['DEBUG']
|
|
49
|
+
a << '--backtrace' if ENV['VERBOSE'] || ENV['DEBUG']
|
|
50
50
|
a << "--seed #{ENV['SEED']}" if ENV['SEED']
|
|
51
51
|
a << "--tag #{args[:tag]}" if args[:tag]
|
|
52
52
|
a << "--default-path test"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'halite/helper_base'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
module PoiseBoiler
|
|
21
|
+
module Helpers
|
|
22
|
+
class Rake
|
|
23
|
+
# Helper for a Rakefile to install tasks for managing verbose/debug output.
|
|
24
|
+
#
|
|
25
|
+
# @since 1.2.0
|
|
26
|
+
# @example Installing tasks
|
|
27
|
+
# require 'poise_boiler/helpers/rake/debug'
|
|
28
|
+
# PoiseBoiler::Helpers::Rake::Debug.install
|
|
29
|
+
# @example Runng a task in verbose mode
|
|
30
|
+
# $ rake verbose release
|
|
31
|
+
# @example Runng a task in debug mode
|
|
32
|
+
# $ rake debug release
|
|
33
|
+
class Debug < Halite::HelperBase
|
|
34
|
+
# Install the rake tasks.
|
|
35
|
+
#
|
|
36
|
+
# @return [void]
|
|
37
|
+
def install
|
|
38
|
+
# Delayed so that Rake doesn't need to be loaded to run this file.
|
|
39
|
+
extend ::Rake::DSL
|
|
40
|
+
|
|
41
|
+
desc 'Run further tasks in verbose mode'
|
|
42
|
+
task 'verbose' do
|
|
43
|
+
ENV['VERBOSE'] = '1'
|
|
44
|
+
ENV['DEBUG'] = nil
|
|
45
|
+
ENV['QUIET'] = nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
desc 'Run further tasks in debug mode'
|
|
49
|
+
task 'debug' do
|
|
50
|
+
ENV['VERBOSE'] = '1'
|
|
51
|
+
ENV['DEBUG'] = '1'
|
|
52
|
+
ENV['QUIET'] = nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
desc 'Run further tasks in quiet mode'
|
|
56
|
+
task 'quiet' do
|
|
57
|
+
ENV['VERBOSE'] = nil
|
|
58
|
+
ENV['DEBUG'] = nil
|
|
59
|
+
ENV['QUIET'] = '1'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Short alises.
|
|
63
|
+
task 'v' => %w{verbose}
|
|
64
|
+
task 'd' => %w{debug}
|
|
65
|
+
task 'q' => %w{quiet}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'halite/helper_base'
|
|
18
|
+
|
|
19
|
+
require_relative 'bump'
|
|
20
|
+
|
|
21
|
+
module PoiseBoiler
|
|
22
|
+
module Helpers
|
|
23
|
+
class Rake
|
|
24
|
+
# Helper for a Rakefile to install tasks for managing verbose/debug output.
|
|
25
|
+
#
|
|
26
|
+
# @since 1.2.0
|
|
27
|
+
# @example Installing tasks
|
|
28
|
+
# require 'poise_boiler/helpers/rake/debug'
|
|
29
|
+
# PoiseBoiler::Helpers::Rake::Debug.install
|
|
30
|
+
# @example Runng a task in verbose mode
|
|
31
|
+
# $ rake verbose release
|
|
32
|
+
# @example Runng a task in debug mode
|
|
33
|
+
# $ rake debug release
|
|
34
|
+
class Release < Halite::HelperBase
|
|
35
|
+
include BumpHelpers
|
|
36
|
+
|
|
37
|
+
# Install the rake tasks.
|
|
38
|
+
#
|
|
39
|
+
# @return [void]
|
|
40
|
+
def install
|
|
41
|
+
# Delayed so that Rake doesn't need to be loaded to run this file.
|
|
42
|
+
extend ::Rake::DSL
|
|
43
|
+
|
|
44
|
+
# Rename the original release task.
|
|
45
|
+
release_task = ::Rake.application.lookup('release')
|
|
46
|
+
if release_task
|
|
47
|
+
release_actions = release_task.actions.dup
|
|
48
|
+
task 'release:original' => release_task.prerequisites.dup do
|
|
49
|
+
release_actions.map(&:call)
|
|
50
|
+
end
|
|
51
|
+
release_task.clear
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# No-op Bundler's release:source_control_push task.
|
|
55
|
+
source_control_push_task = ::Rake.application.lookup('release:source_control_push')
|
|
56
|
+
source_control_push_task.clear if source_control_push_task
|
|
57
|
+
|
|
58
|
+
# Tag the release.
|
|
59
|
+
task 'release:tag' do
|
|
60
|
+
tag_release!(commit: false)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Make the new release tasks.
|
|
64
|
+
desc "Bump, tag, and release #{gem_name}"
|
|
65
|
+
task 'release' do
|
|
66
|
+
release_gem!(:patch)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
desc "Bump minor, tag, and release #{gem_name}"
|
|
70
|
+
task 'release:minor' do
|
|
71
|
+
release_gem!(:minor)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
desc "Bump major, tag, and release #{gem_name}"
|
|
75
|
+
task 'release:major' do
|
|
76
|
+
release_gem!(:major)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
|
|
82
|
+
def use_signed_tags?
|
|
83
|
+
!!sh('git config user.signingkey >/dev/null', verbose: false) {|ok, status| ok }
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def find_current_version
|
|
87
|
+
version_rb = find_version_rb
|
|
88
|
+
if version_rb
|
|
89
|
+
(IO.read(version_rb) =~ Bump::VERSION_CONST) && $2
|
|
90
|
+
else
|
|
91
|
+
nil
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def git_commit!(message)
|
|
96
|
+
sh(*['git', 'add', find_version_rb])
|
|
97
|
+
commit_cmd = ['git', 'commit', '-m', message]
|
|
98
|
+
sh(*commit_cmd)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def tag_release!(commit: true, &block)
|
|
102
|
+
# I can't use the gemspec because we might have changed the version.
|
|
103
|
+
current_version = find_current_version
|
|
104
|
+
unless current_version
|
|
105
|
+
raise "Unable to find current version of #{gem_name}"
|
|
106
|
+
end
|
|
107
|
+
if Gem::Version.create(current_version).prerelease?
|
|
108
|
+
raise "#{gem_name} has a prerelease version: #{current_version}"
|
|
109
|
+
end
|
|
110
|
+
unless File.exist?('CHANGELOG.md') && IO.read('CHANGELOG.md').include?("## v#{current_version}\n")
|
|
111
|
+
raise "No changelog entry found for #{current_version}"
|
|
112
|
+
end
|
|
113
|
+
answer = shell.ask("Are you certain you want to release #{gem_name} v#{current_version}?", limited_to: %w{y n})
|
|
114
|
+
if answer == 'n'
|
|
115
|
+
raise 'Aborting release'
|
|
116
|
+
end
|
|
117
|
+
git_commit!('Bump version for release.') if commit
|
|
118
|
+
tag_cmd = %w{git tag -a}
|
|
119
|
+
tag_cmd << '-s' if use_signed_tags?
|
|
120
|
+
tag_cmd.concat(['-m', "Release #{current_version}", "v#{current_version}"])
|
|
121
|
+
sh(*tag_cmd)
|
|
122
|
+
begin
|
|
123
|
+
block.call if block
|
|
124
|
+
rescue Exception
|
|
125
|
+
sh(*['git', 'tag', '-d', "v#{current_version}"])
|
|
126
|
+
raise
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def release_gem!(bump_type)
|
|
131
|
+
::Rake::Task['release:guard_clean'].invoke
|
|
132
|
+
bump_version!(type: bump_type, release: true) do
|
|
133
|
+
tag_release! do
|
|
134
|
+
# Run this as a subproc so it reloads the gemspec. Probably not
|
|
135
|
+
# as reliable as invoke, but safer.
|
|
136
|
+
sh(*['rake', 'release:original'], verbose: false)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
bump_version!(type: :patch)
|
|
140
|
+
git_commit!('Bump version for dev.')
|
|
141
|
+
sh(*['git', 'push'])
|
|
142
|
+
sh(*['git', 'push', '--tags'])
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
@@ -27,7 +27,11 @@ module PoiseBoiler
|
|
|
27
27
|
# @see Travis
|
|
28
28
|
class Rake < Halite::HelperBase
|
|
29
29
|
autoload :Badges, 'poise_boiler/helpers/rake/badges'
|
|
30
|
+
autoload :Bump, 'poise_boiler/helpers/rake/bump'
|
|
31
|
+
autoload :Check, 'poise_boiler/helpers/rake/check'
|
|
30
32
|
autoload :Core, 'poise_boiler/helpers/rake/core'
|
|
33
|
+
autoload :Debug, 'poise_boiler/helpers/rake/debug'
|
|
34
|
+
autoload :Release, 'poise_boiler/helpers/rake/release'
|
|
31
35
|
autoload :Travis, 'poise_boiler/helpers/rake/travis'
|
|
32
36
|
|
|
33
37
|
# Install all rake tasks.
|
|
@@ -36,6 +40,10 @@ module PoiseBoiler
|
|
|
36
40
|
def install
|
|
37
41
|
Core.install(gem_name: gem_name, base: base, **options)
|
|
38
42
|
Badges.install(gem_name: gem_name, base: base, **options)
|
|
43
|
+
Bump.install(gem_name: gem_name, base: base, **options)
|
|
44
|
+
Check.install(gem_name: gem_name, base: base, **options)
|
|
45
|
+
Debug.install(gem_name: gem_name, base: base, **options)
|
|
46
|
+
Release.install(gem_name: gem_name, base: base, **options)
|
|
39
47
|
Travis.install(gem_name: gem_name, base: base, **options)
|
|
40
48
|
end
|
|
41
49
|
end
|
|
@@ -72,6 +72,10 @@ module PoiseBoiler
|
|
|
72
72
|
config.include Halite::SpecHelper(gem_name ? gemspec : nil)
|
|
73
73
|
# Hide the spec helper from RSpec traces by default.
|
|
74
74
|
config.backtrace_exclusion_patterns << %r{/halite/spec_helper}
|
|
75
|
+
# In verbose mode, set Chef to log level debug by default.
|
|
76
|
+
if ENV['DEBUG']
|
|
77
|
+
config.before { chefspec_options[:log_level] ||= :debug }
|
|
78
|
+
end
|
|
75
79
|
end
|
|
76
80
|
end
|
|
77
81
|
end # /def install
|
data/lib/poise_boiler/kitchen.rb
CHANGED
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
#
|
|
16
16
|
|
|
17
17
|
require 'kitchen'
|
|
18
|
-
require 'kitchen-sync'
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
module PoiseBoiler
|
|
@@ -89,8 +88,8 @@ module PoiseBoiler
|
|
|
89
88
|
# Run some installs at provision so they are cached in the image.
|
|
90
89
|
# Install net-tools for netstat which is used by serverspec, and
|
|
91
90
|
# iproute for ss (only used on EL7).
|
|
92
|
-
"test ! -f /etc/debian_version || apt-get install -y net-tools",
|
|
93
|
-
"test ! -f /etc/redhat-release || yum -y install net-tools iproute",
|
|
91
|
+
"test ! -f /etc/debian_version || apt-get install -y net-tools rsync",
|
|
92
|
+
"test ! -f /etc/redhat-release || yum -y install net-tools iproute rsync",
|
|
94
93
|
# Make sure the hostname utilitiy is installed on CentOS 7. The
|
|
95
94
|
# ||true is for EL6 which has no hostname package. Sigh.
|
|
96
95
|
"test ! -f /etc/redhat-release || yum -y install hostname || true",
|
|
@@ -106,6 +105,14 @@ module PoiseBoiler
|
|
|
106
105
|
'name' => 'sftp',
|
|
107
106
|
'ssh_key' => docker_enabled ? File.expand_path('.kitchen/docker_id_rsa', root) : nil,
|
|
108
107
|
},
|
|
108
|
+
'provisioner' => {
|
|
109
|
+
'attributes' => {
|
|
110
|
+
'POISE_DEBUG' => !!((ENV['POISE_DEBUG'] && ENV['POISE_DEBUG'] != 'false') ||
|
|
111
|
+
(ENV['poise_debug'] && ENV['poise_debug'] != 'false') ||
|
|
112
|
+
(ENV['DEBUG'] && ENV['DEBUG'] != 'false')
|
|
113
|
+
),
|
|
114
|
+
},
|
|
115
|
+
},
|
|
109
116
|
'platforms' => expand_kitchen_platforms(platforms).map {|p| platform_definition(p) },
|
|
110
117
|
}.to_yaml.gsub(/---[ \n]/, '')
|
|
111
118
|
end
|
data/lib/poise_boiler/version.rb
CHANGED
data/poise-boiler.gemspec
CHANGED
|
@@ -37,13 +37,14 @@ Gem::Specification.new do |spec|
|
|
|
37
37
|
# Development gems
|
|
38
38
|
spec.add_dependency 'addressable', '~> 2.3'
|
|
39
39
|
spec.add_dependency 'rake', '~> 10.4'
|
|
40
|
-
|
|
40
|
+
spec.add_dependency 'travis', '~> 1.8', '>= 1.8.1'
|
|
41
41
|
spec.add_dependency 'yard', '~> 0.8'
|
|
42
42
|
spec.add_dependency 'yard-classmethods', '~> 1.0'
|
|
43
43
|
spec.add_dependency 'halite', '~> 1.0' # This is a circular dependency
|
|
44
44
|
spec.add_dependency 'mixlib-shellout', '>= 1.4', '< 3.0' # Chef 11 means shellout 1.4 :-(
|
|
45
|
-
spec.add_dependency 'pry'
|
|
45
|
+
spec.add_dependency 'pry'
|
|
46
46
|
spec.add_dependency 'pry-byebug'
|
|
47
|
+
spec.add_dependency 'git', '~> 1.2'
|
|
47
48
|
|
|
48
49
|
# Test gems
|
|
49
50
|
spec.add_dependency 'rspec', '~> 3.2'
|
|
@@ -58,7 +59,7 @@ Gem::Specification.new do |spec|
|
|
|
58
59
|
spec.add_dependency 'kitchen-vagrant'
|
|
59
60
|
spec.add_dependency 'vagrant-wrapper'
|
|
60
61
|
spec.add_dependency 'kitchen-docker'
|
|
61
|
-
spec.add_dependency 'kitchen-sync', '~>
|
|
62
|
+
spec.add_dependency 'kitchen-sync', '~> 2.0'
|
|
62
63
|
spec.add_dependency 'berkshelf', '~> 4.0'
|
|
63
64
|
|
|
64
65
|
# Travis gems
|
|
File without changes
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'spec_helper'
|
|
18
|
+
|
|
19
|
+
describe PoiseBoiler::Helpers::Rake::Bump do
|
|
20
|
+
rakefile "require 'poise_boiler/helpers/rake/bump'\nPoiseBoiler::Helpers::Rake::Bump.install"
|
|
21
|
+
before { command('git init && git config user.email "you@example.com" && git config user.name "Your Name" && git add Rakefile && git commit -m "first commit" && git tag -a v2.3.4 -m "Release 2.3.4"') }
|
|
22
|
+
file 'lib/mygem/version.rb', <<-EOH
|
|
23
|
+
module MyGem
|
|
24
|
+
VERSION = '1.0.0.pre'
|
|
25
|
+
end
|
|
26
|
+
EOH
|
|
27
|
+
def file_content
|
|
28
|
+
IO.read(File.join(temp_path, 'lib/mygem/version.rb'))
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe 'release:bump' do
|
|
32
|
+
rake_task 'release:bump'
|
|
33
|
+
|
|
34
|
+
it { is_expected.to eq "Bumping gem version from 1.0.0.pre to 2.3.5.pre\n" }
|
|
35
|
+
it { subject; expect(file_content).to eq <<-EOH }
|
|
36
|
+
module MyGem
|
|
37
|
+
VERSION = '2.3.5.pre'
|
|
38
|
+
end
|
|
39
|
+
EOH
|
|
40
|
+
end # /describe release:bump
|
|
41
|
+
|
|
42
|
+
describe 'release:bump:minor' do
|
|
43
|
+
rake_task 'release:bump:minor'
|
|
44
|
+
|
|
45
|
+
it { is_expected.to eq "Bumping gem version from 1.0.0.pre to 2.4.0.pre\n" }
|
|
46
|
+
it { subject; expect(file_content).to eq <<-EOH }
|
|
47
|
+
module MyGem
|
|
48
|
+
VERSION = '2.4.0.pre'
|
|
49
|
+
end
|
|
50
|
+
EOH
|
|
51
|
+
end # /describe release:bump:minor
|
|
52
|
+
|
|
53
|
+
describe 'release:bump:major' do
|
|
54
|
+
rake_task 'release:bump:major'
|
|
55
|
+
|
|
56
|
+
it { is_expected.to eq "Bumping gem version from 1.0.0.pre to 3.0.0.pre\n" }
|
|
57
|
+
it { subject; expect(file_content).to eq <<-EOH }
|
|
58
|
+
module MyGem
|
|
59
|
+
VERSION = '3.0.0.pre'
|
|
60
|
+
end
|
|
61
|
+
EOH
|
|
62
|
+
end # /describe release:bump:major
|
|
63
|
+
|
|
64
|
+
describe '#bumped_version' do
|
|
65
|
+
let(:instance) { described_class.new(gem_name: 'test') }
|
|
66
|
+
let(:bump_type) { :patch }
|
|
67
|
+
let(:bump_release) { false }
|
|
68
|
+
let(:bump_current) { nil }
|
|
69
|
+
subject { instance.send(:bumped_version, type: bump_type, release: bump_release) }
|
|
70
|
+
before do
|
|
71
|
+
allow(instance).to receive(:latest_tag).and_return(bump_current)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
context 'with no existing version' do
|
|
75
|
+
it { is_expected.to eq '1.0.0.pre' }
|
|
76
|
+
end # /context with no existing version
|
|
77
|
+
|
|
78
|
+
context 'with release mode' do
|
|
79
|
+
let(:bump_release) { true }
|
|
80
|
+
it { is_expected.to eq '1.0.0' }
|
|
81
|
+
end # /context with release mode
|
|
82
|
+
|
|
83
|
+
context 'with 1.2.3 and patch' do
|
|
84
|
+
let(:bump_current) { '1.2.3' }
|
|
85
|
+
it { is_expected.to eq '1.2.4.pre' }
|
|
86
|
+
end # /context with 1.2.3 and patch
|
|
87
|
+
|
|
88
|
+
context 'with 1.2.3 and minor' do
|
|
89
|
+
let(:bump_type) { :minor }
|
|
90
|
+
let(:bump_current) { '1.2.3' }
|
|
91
|
+
it { is_expected.to eq '1.3.0.pre' }
|
|
92
|
+
end # /context with 1.2.3 and minor
|
|
93
|
+
|
|
94
|
+
context 'with 1.2.3 and major' do
|
|
95
|
+
let(:bump_type) { :major }
|
|
96
|
+
let(:bump_current) { '1.2.3' }
|
|
97
|
+
it { is_expected.to eq '2.0.0.pre' }
|
|
98
|
+
end # /context with 1.2.3 and major
|
|
99
|
+
end # /describe #bumped_version
|
|
100
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'spec_helper'
|
|
18
|
+
|
|
19
|
+
describe PoiseBoiler::Helpers::Rake::Check do
|
|
20
|
+
rakefile "require 'poise_boiler/helpers/rake/check'\nPoiseBoiler::Helpers::Rake::Check.install"
|
|
21
|
+
CHECK_INITIALIZER = 'git init && git config user.email "you@example.com" && git config user.name "Your Name" && git add main.rb Rakefile && git commit -m "first commit" && git tag -a v1.0.0 -m "Release 1.0.0" && git remote add origin http://example.com/ && git branch -f origin/master'
|
|
22
|
+
|
|
23
|
+
describe 'check' do
|
|
24
|
+
rake_task 'release:check'
|
|
25
|
+
file 'main.rb'
|
|
26
|
+
before { command(CHECK_INITIALIZER) }
|
|
27
|
+
|
|
28
|
+
context 'with no files' do
|
|
29
|
+
its(:stdout) { is_expected.to eq '' }
|
|
30
|
+
end # /context with no files
|
|
31
|
+
|
|
32
|
+
context 'with an uncommitted file' do
|
|
33
|
+
file 'other.rb'
|
|
34
|
+
|
|
35
|
+
its(:stdout) { is_expected.to eq "1 file with pending changes\nU other.rb\n" }
|
|
36
|
+
end # /context with an uncommitted file
|
|
37
|
+
|
|
38
|
+
context 'with a new file' do
|
|
39
|
+
file 'other.rb'
|
|
40
|
+
before { command('git add other.rb') }
|
|
41
|
+
|
|
42
|
+
its(:stdout) { is_expected.to eq "1 file with pending changes\nA other.rb\n" }
|
|
43
|
+
end # /context with a new file
|
|
44
|
+
|
|
45
|
+
context 'with a modified file' do
|
|
46
|
+
file 'main.rb', 'content'
|
|
47
|
+
|
|
48
|
+
its(:stdout) { is_expected.to eq "1 file with pending changes\nM main.rb\n" }
|
|
49
|
+
end # /context with a modified file
|
|
50
|
+
|
|
51
|
+
context 'with a deleted file' do
|
|
52
|
+
before { command('rm main.rb') }
|
|
53
|
+
|
|
54
|
+
its(:stdout) { is_expected.to eq "1 file with pending changes\nD main.rb\n" }
|
|
55
|
+
end # /context with a deleted file
|
|
56
|
+
|
|
57
|
+
context 'with multiple files' do
|
|
58
|
+
file 'main.rb', 'content'
|
|
59
|
+
file 'other.rb'
|
|
60
|
+
|
|
61
|
+
its(:stdout) { is_expected.to eq "2 files with pending changes\nM main.rb\nU other.rb\n" }
|
|
62
|
+
end # /context with multiple files
|
|
63
|
+
|
|
64
|
+
context 'with a new commit' do
|
|
65
|
+
file 'other.rb'
|
|
66
|
+
before { command('git add other.rb && git commit -m "second commit" && git branch -f origin/master') }
|
|
67
|
+
|
|
68
|
+
its(:stdout) { is_expected.to eq "1 commit since v1.0.0\n* second commit\n" }
|
|
69
|
+
end # /context with a new commit
|
|
70
|
+
|
|
71
|
+
context 'with an unpushed commit' do
|
|
72
|
+
file 'other.rb'
|
|
73
|
+
before { command('git add other.rb && git commit -m "second commit"') }
|
|
74
|
+
|
|
75
|
+
its(:stdout) { is_expected.to eq "1 commit (1 unpushed) since v1.0.0\n* second commit\n" }
|
|
76
|
+
end # /context with an unpushed commit
|
|
77
|
+
|
|
78
|
+
context 'with multiple commits' do
|
|
79
|
+
file 'other.rb'
|
|
80
|
+
file 'third.rb'
|
|
81
|
+
before { command('git add other.rb && git commit -m "second commit" && git add third.rb && git commit -m "moar commits" && git branch -f origin/master') }
|
|
82
|
+
|
|
83
|
+
its(:stdout) { is_expected.to eq "2 commits since v1.0.0\n* moar commits\n* second commit\n" }
|
|
84
|
+
end # /context with multiple commits
|
|
85
|
+
|
|
86
|
+
context 'with quiet mode' do
|
|
87
|
+
file 'other.rb'
|
|
88
|
+
file 'third.rb'
|
|
89
|
+
before { command('git add other.rb && git commit -m "second commit" && git add third.rb') }
|
|
90
|
+
environment QUIET: 1
|
|
91
|
+
|
|
92
|
+
its(:stdout) { is_expected.to eq "1 file with pending changes\n1 commit (1 unpushed) since v1.0.0\n" }
|
|
93
|
+
end # /context with quiet mode
|
|
94
|
+
end # /describe check
|
|
95
|
+
|
|
96
|
+
describe 'checkall' do
|
|
97
|
+
rake_task 'release:checkall'
|
|
98
|
+
file 'poise/Rakefile'
|
|
99
|
+
file 'poise/main.rb'
|
|
100
|
+
before { command(CHECK_INITIALIZER, cwd: File.join(temp_path, 'poise')) }
|
|
101
|
+
around do |ex|
|
|
102
|
+
begin
|
|
103
|
+
ENV['POISE_ROOT'] = temp_path
|
|
104
|
+
ex.run
|
|
105
|
+
ensure
|
|
106
|
+
ENV['POISE_ROOT'] = nil
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
context 'with one changed repo' do
|
|
111
|
+
file 'poise/other.rb'
|
|
112
|
+
|
|
113
|
+
its(:stdout) { is_expected.to eq "# poise\n1 file with pending changes\n" }
|
|
114
|
+
end # /context with one changed repo
|
|
115
|
+
|
|
116
|
+
context 'with verbose mode' do
|
|
117
|
+
file 'poise/other.rb'
|
|
118
|
+
environment VERBOSE: 1
|
|
119
|
+
|
|
120
|
+
its(:stdout) { is_expected.to eq "# poise\n1 file with pending changes\nU other.rb\n" }
|
|
121
|
+
end # /context with verbose mode
|
|
122
|
+
end # /describe checkall
|
|
123
|
+
end
|
|
File without changes
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
require 'spec_helper'
|
|
18
18
|
|
|
19
19
|
describe 'poise_boiler/rake' do
|
|
20
|
-
file 'Rakefile', 'require "poise_boiler/
|
|
20
|
+
file 'Rakefile', 'require "poise_boiler/rake"'
|
|
21
21
|
file 'test.gemspec', <<-EOH
|
|
22
22
|
Gem::Specification.new do |spec|
|
|
23
23
|
spec.name = 'test'
|
|
@@ -35,6 +35,11 @@ EOH
|
|
|
35
35
|
its(:stdout) { is_expected.to include('rake release') }
|
|
36
36
|
its(:stdout) { is_expected.to include('rake spec') }
|
|
37
37
|
its(:stdout) { is_expected.to include('rake travis') }
|
|
38
|
+
its(:stdout) { is_expected.to include('rake debug') }
|
|
39
|
+
its(:stdout) { is_expected.to include('rake quiet') }
|
|
40
|
+
its(:stdout) { is_expected.to include('rake verbose') }
|
|
41
|
+
its(:stdout) { is_expected.to include('rake release:check') }
|
|
42
|
+
its(:stdout) { is_expected.to include('rake release:checkall') }
|
|
38
43
|
end # /describe list of tasks
|
|
39
44
|
|
|
40
45
|
describe 'specs in spec/' do
|
|
File without changes
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: poise-boiler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Noah Kantrowitz
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2016-01-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: addressable
|
|
@@ -38,6 +38,26 @@ dependencies:
|
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '10.4'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: travis
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '1.8'
|
|
48
|
+
- - ">="
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: 1.8.1
|
|
51
|
+
type: :runtime
|
|
52
|
+
prerelease: false
|
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
54
|
+
requirements:
|
|
55
|
+
- - "~>"
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: '1.8'
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: 1.8.1
|
|
41
61
|
- !ruby/object:Gem::Dependency
|
|
42
62
|
name: yard
|
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -128,6 +148,20 @@ dependencies:
|
|
|
128
148
|
- - ">="
|
|
129
149
|
- !ruby/object:Gem::Version
|
|
130
150
|
version: '0'
|
|
151
|
+
- !ruby/object:Gem::Dependency
|
|
152
|
+
name: git
|
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
|
154
|
+
requirements:
|
|
155
|
+
- - "~>"
|
|
156
|
+
- !ruby/object:Gem::Version
|
|
157
|
+
version: '1.2'
|
|
158
|
+
type: :runtime
|
|
159
|
+
prerelease: false
|
|
160
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
161
|
+
requirements:
|
|
162
|
+
- - "~>"
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: '1.2'
|
|
131
165
|
- !ruby/object:Gem::Dependency
|
|
132
166
|
name: rspec
|
|
133
167
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -274,14 +308,14 @@ dependencies:
|
|
|
274
308
|
requirements:
|
|
275
309
|
- - "~>"
|
|
276
310
|
- !ruby/object:Gem::Version
|
|
277
|
-
version: '
|
|
311
|
+
version: '2.0'
|
|
278
312
|
type: :runtime
|
|
279
313
|
prerelease: false
|
|
280
314
|
version_requirements: !ruby/object:Gem::Requirement
|
|
281
315
|
requirements:
|
|
282
316
|
- - "~>"
|
|
283
317
|
- !ruby/object:Gem::Version
|
|
284
|
-
version: '
|
|
318
|
+
version: '2.0'
|
|
285
319
|
- !ruby/object:Gem::Dependency
|
|
286
320
|
name: berkshelf
|
|
287
321
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -366,7 +400,11 @@ files:
|
|
|
366
400
|
- lib/poise_boiler/helpers.rb
|
|
367
401
|
- lib/poise_boiler/helpers/rake.rb
|
|
368
402
|
- lib/poise_boiler/helpers/rake/badges.rb
|
|
403
|
+
- lib/poise_boiler/helpers/rake/bump.rb
|
|
404
|
+
- lib/poise_boiler/helpers/rake/check.rb
|
|
369
405
|
- lib/poise_boiler/helpers/rake/core.rb
|
|
406
|
+
- lib/poise_boiler/helpers/rake/debug.rb
|
|
407
|
+
- lib/poise_boiler/helpers/rake/release.rb
|
|
370
408
|
- lib/poise_boiler/helpers/rake/travis.rb
|
|
371
409
|
- lib/poise_boiler/helpers/spec_helper.rb
|
|
372
410
|
- lib/poise_boiler/kitchen.rb
|
|
@@ -376,12 +414,14 @@ files:
|
|
|
376
414
|
- lib/poise_boiler/spec_helper.rb
|
|
377
415
|
- lib/poise_boiler/version.rb
|
|
378
416
|
- poise-boiler.gemspec
|
|
379
|
-
- spec/helpers/badge_spec.rb
|
|
380
|
-
- spec/helpers/
|
|
417
|
+
- spec/helpers/rake/badge_spec.rb
|
|
418
|
+
- spec/helpers/rake/bump_spec.rb
|
|
419
|
+
- spec/helpers/rake/check_spec.rb
|
|
420
|
+
- spec/helpers/rake/travis_spec.rb
|
|
421
|
+
- spec/helpers/rake_spec.rb
|
|
422
|
+
- spec/helpers/spec_helper_spec.rb
|
|
381
423
|
- spec/kitchen_spec.rb
|
|
382
|
-
- spec/rakefile_spec.rb
|
|
383
424
|
- spec/spec_helper.rb
|
|
384
|
-
- spec/spec_helper_spec.rb
|
|
385
425
|
homepage: https://github.com/poise/poise-boiler
|
|
386
426
|
licenses:
|
|
387
427
|
- Apache 2.0
|
|
@@ -408,10 +448,12 @@ signing_key:
|
|
|
408
448
|
specification_version: 4
|
|
409
449
|
summary: Boilerplate-reduction helpers for Poise/Halite-style gemss.
|
|
410
450
|
test_files:
|
|
411
|
-
- spec/helpers/badge_spec.rb
|
|
412
|
-
- spec/helpers/
|
|
451
|
+
- spec/helpers/rake/badge_spec.rb
|
|
452
|
+
- spec/helpers/rake/bump_spec.rb
|
|
453
|
+
- spec/helpers/rake/check_spec.rb
|
|
454
|
+
- spec/helpers/rake/travis_spec.rb
|
|
455
|
+
- spec/helpers/rake_spec.rb
|
|
456
|
+
- spec/helpers/spec_helper_spec.rb
|
|
413
457
|
- spec/kitchen_spec.rb
|
|
414
|
-
- spec/rakefile_spec.rb
|
|
415
458
|
- spec/spec_helper.rb
|
|
416
|
-
- spec/spec_helper_spec.rb
|
|
417
459
|
has_rdoc:
|