bourdain 1.6.0 → 1.6.1

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: d375a119ab4d7c7e96ab1b84b8c5e3116931f641
4
- data.tar.gz: 076696693e74e35c28a47ee8c2e7a5ba4f01ca24
3
+ metadata.gz: ce8924ef181043fcb63aac82f0bdb47411352ab3
4
+ data.tar.gz: 0bf26f7f20f2fc7d769101c38b6e89555c66fc1b
5
5
  SHA512:
6
- metadata.gz: a8840f296b116a7f81c4f667471c0765d2c5456aac303129791e4e290ba8cd6efbae5258cb9543dfe8af35af9a4beb1afbe965c18f9298a8f0f930089501d575
7
- data.tar.gz: 974c011362614fc2355e89ee1dccfe4caa8d88e36dbe72aef2ed2cd159a9968ddcafea1c7a86dc98cab1cba3750d1ae835f196e509a3acdca6242976202b0373
6
+ metadata.gz: f30fe73cda0c2a81d7efb27fc6061aa0876c17e2c1eb4df6768dbbaf6a1f7d0c2d5f3a2b2d5e506b5be230d4d8051e4f6512ab0e5550016254cf13e22f185542
7
+ data.tar.gz: ed5b93a7697822f9a50a4a7a7ee50b780a925b4ef2383a8b2fbfe03ddd4decc764854e65ee3531f980cb924534276abeaa43fbc94208988779fa9f9cf8073ffa
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.0
1
+ 1.6.1
@@ -1,6 +1,15 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- require 'rake'
1
+ begin
2
+ require 'rubygems'
3
+ require 'bundler'
4
+ require 'rake'
5
+ require 'json'
6
+ require 'jsonlint/rake_task'
7
+ rescue LoadError
8
+ puts "\e[31mCouldn't load required gems, have you run \e[35m`bundle exec tony check`\e[31m recently?\e[0m"
9
+ puts "\e[31mYou prolly need to \e[35m`bundle update`\e[31m with the latest Kitchen...\e[0m"
10
+ exit 2
11
+ end
12
+
4
13
 
5
14
 
6
15
  def master?
@@ -14,7 +23,17 @@ end
14
23
 
15
24
 
16
25
  def realm?
17
- `git ls-files` =~ /\bBerksfile\.lock\b/
26
+ !kitchen? && `git ls-files` =~ /\bBerksfile\.lock\b/
27
+ end
28
+
29
+
30
+ def kitchen?
31
+ `git ls-files` =~ /\bGemfile\b/
32
+ end
33
+
34
+
35
+ def versioned?
36
+ File.exist? 'VERSION'
18
37
  end
19
38
 
20
39
 
@@ -25,7 +44,7 @@ end
25
44
 
26
45
  def youre_dirty?
27
46
  dirty = `git diff HEAD --numstat`.split("\n").length > 0
28
- raise unless $?.exitstatus.zero?
47
+ raise '`git diff` failed' unless $?.exitstatus.zero?
29
48
  dirty
30
49
  end
31
50
 
@@ -38,10 +57,10 @@ end
38
57
 
39
58
 
40
59
  def youre_behind?
41
- `git fetch >/dev/null 2>&1`
42
- `git pull --tags >/dev/null 2>&1`
60
+ `git fetch --tags`
61
+ raise '`git fetch --tags` failed' unless $?.exitstatus.zero?
43
62
  behind = `git log ..origin/master --oneline`.split("\n").length > 0
44
- raise unless $?.exitstatus.zero?
63
+ raise '`git log` failed' unless $?.exitstatus.zero?
45
64
  return behind
46
65
  end
47
66
 
@@ -56,41 +75,107 @@ end
56
75
  def bump component
57
76
  youre_dirty!
58
77
  youre_behind!
59
- `tony bump #{component}`
78
+ `bundle exec tony bump #{component}`
79
+ raise '`tony bump` failed' unless $?.exitstatus.zero?
60
80
  if realm?
61
- `berks`
81
+ `bundle exec berks`
82
+ raise '`berks` failed' unless $?.exitstatus.zero?
62
83
  `git add Berksfile.lock`
84
+ raise '`git add` failed' unless $?.exitstatus.zero?
63
85
  end
64
86
  version = current_version
65
87
  `git add VERSION`
88
+ raise '`git add` failed' unless $?.exitstatus.zero?
66
89
  `git commit -m "Version bump to #{version}"`
90
+ raise '`git commit` failed' unless $?.exitstatus.zero?
67
91
  `git tag -a v#{version} -m v#{version}`
68
- raise 'Could not add tag' unless $?.exitstatus.zero?
92
+ raise '`git tag` failed' unless $?.exitstatus.zero?
69
93
  puts 'Version is now "%s"' % version
70
94
  end
71
95
 
72
96
 
73
- def bump_and_release component
74
- lint
75
- bump component
97
+ def bump_and_release component=nil
98
+ bump component unless component == :nop
76
99
  youre_dirty!
77
100
  youre_behind!
78
101
  `git push`
79
- raise 'Push failed' unless $?.exitstatus.zero?
80
- `git push --tag`
81
- raise 'Tag push failed' unless $?.exitstatus.zero?
102
+ raise '`git push` failed' unless $?.exitstatus.zero?
103
+ `git push --tags`
104
+ raise '`git push --tags` failed' unless $?.exitstatus.zero?
82
105
  end
83
106
 
84
107
 
85
108
  def repo_root_dir
86
- `git rev-parse --show-toplevel`.strip
109
+ root_dir = `git rev-parse --show-toplevel`.strip
110
+ raise '`git rev-parse` failed' unless $?.exitstatus.zero?
111
+ root_dir
112
+ end
113
+
114
+
115
+ def json_files kind
116
+ Dir[File.join(repo_root_dir, kind, '**', '*.json')]
117
+ end
118
+
119
+
120
+ def check_items kind
121
+ json_files(kind).each do |item_path|
122
+ item_name = File.basename(item_path, '.json')
123
+ item_file = File.read item_path
124
+ item = JSON.parse item_file
125
+ item_id = item['id'] || item['name']
126
+ if item_id && item_name != item_id
127
+ raise 'Invalid %s: %s' % [ kind, item_name ]
128
+ end
129
+ end
87
130
  end
88
131
 
89
132
 
90
- def lint
91
- system "knife cookbook test #{File.basename repo_root_dir} -o .."
92
- raise 'Failed "knife cookbook test"' unless $?.exitstatus.zero?
93
- system 'foodcritic .' # Merely a suggestion
133
+ def check_role_and_environment_naming
134
+ cookbook_name = File.basename repo_root_dir
135
+
136
+ env_names = json_files('environments').map { |f| File.basename(f, '.json') }
137
+
138
+ es = env_names.select { |n| !(n =~ /^#{cookbook_name}/) }
139
+ unless es.empty?
140
+ raise 'Hey, I found an environment not named after the realm! (%s)' % es.join(', ')
141
+ end
142
+
143
+ role_names = json_files('roles').map { |f| File.basename(f, '.json') }
144
+
145
+ rs = role_names.select { |n| !(n =~ /^#{cookbook_name}/) }
146
+ unless rs.empty?
147
+ raise 'Hey, I found a role not named after the realm! (%s)' % rs.join(', ')
148
+ end
149
+
150
+ cs = role_names & env_names
151
+
152
+ unless cs.empty?
153
+ raise "Hey, I found a role with the same name as an environment! (%s)" % cs.join(', ')
154
+ end
155
+ end
156
+
157
+
158
+ def prettify_json_files commit=false
159
+ puts 'Prettifying JSON files'
160
+ json_files('*').each do |path|
161
+ reformatted = JSON.pretty_generate(JSON.parse(File.read(path)))
162
+ File.open(path, 'w') { |f| f.puts reformatted }
163
+ `git add #{path} >/dev/null 2>&1`
164
+ end
165
+ `git commit -m 'Prettify JSON files [automated]'` if commit
166
+ end
167
+
168
+
169
+ def lint commit=false
170
+ if kitchen? # skip most linting
171
+ check_items 'data_bags'
172
+ prettify_json_files commit
173
+ return
174
+ end
175
+
176
+ system "bundle exec knife cookbook test #{File.basename repo_root_dir} -o .."
177
+ raise '`knife cookbook test` failed' unless $?.exitstatus.zero?
178
+ system 'bundle exec foodcritic .' # Merely a suggestion, no "raise" here
94
179
 
95
180
  unless realm?
96
181
  if Dir.exist? File.join(repo_root_dir, 'environments')
@@ -102,63 +187,202 @@ def lint
102
187
  end
103
188
 
104
189
  if Dir.exist? File.join(repo_root_dir, 'data_bags')
105
- raise "Hey, I found data bags--this isn't realm!"
190
+ raise "Hey, I found data bags, but this isn't realm!"
191
+ end
192
+
193
+ else # realm
194
+ check_items 'environments'
195
+ check_items 'roles'
196
+ check_items 'data_bags'
197
+ check_role_and_environment_naming
198
+ prettify_json_files commit
199
+ end
200
+ end
201
+
202
+
203
+ CHEFDK_PATH = '/opt/chefdk'
204
+ REQUIRE_RUBY_VERSION = '2.1'
205
+ RECOMMEND_RUBY_VERSION = '2.3'
206
+
207
+ def which cmd ; `which #{cmd}`.strip end
208
+
209
+ def shebang cmd
210
+ File.read(which(cmd)).lines.first.strip
211
+ rescue
212
+ puts "\e[31mCould not calculate shebang for %s\e[0m" % cmd.inspect
213
+ nil
214
+ end
215
+
216
+ def shebangs cmds ; Hash[cmds.map { |c| [ c, shebang(c) ] }] end
217
+
218
+ def check_installation
219
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new(REQUIRE_RUBY_VERSION)
220
+ puts "\e[31mWhoa! Looks like you got an old version of Ruby!\e[0m"
221
+ puts
222
+ puts <<-END.gsub(/^ +/,'').strip
223
+ Your Ruby installation is a little too old to support. We ask that
224
+ users upgrade to at least v#{REQUIRE_RUBY_VERSION}. We recommend at least v#{RECOMMEND_RUBY_VERSION} for best
225
+ results. There are lots of ways to accomplish this:
226
+
227
+ - Homebrew: `brew install ruby`
228
+ - Source: https://www.ruby-lang.org/en/documentation/installation#building-from-source
229
+ - chruby+ruby-install: https://github.com/postmodern/chruby#readme
230
+ - rbenv+ruby-build: https://github.com/rbenv/rbenv#readme
231
+ - RVM: https://rvm.io
232
+
233
+ Make sure you update Bundler, too (`gem install bundler`)
234
+
235
+ You should fix this ASAP.
236
+ END
237
+ raise
238
+ end
239
+
240
+ unless File.exist? CHEFDK_PATH
241
+ puts "\e[31mWhoa! Looks like you don't have ChefDK installed!\e[0m"
242
+ puts
243
+ puts <<-END.gsub(/^ +/,'').strip
244
+ While the Kitchen distributes all the Chef-related tooling you need,
245
+ some tools like Vagrant expect ChefDK to be installed. Chef provides
246
+ omnibus packages for most platforms:
247
+
248
+ - https://downloads.chef.io/chef-dk
249
+
250
+ Note that although ChefDK should be installed, it should not be on
251
+ your PATH, as the embedded tools may conflict with those provided by
252
+ the Kitchen. The Kitchen will use ChefDK as necessary.
253
+
254
+ You should fix this ASAP.
255
+ END
256
+ raise
257
+ end
258
+
259
+ if ENV['PATH'] =~ /chefdk/
260
+ puts "\e[31mWhoa! Looks like you got ChefDK on your PATH!\e[0m"
261
+ puts
262
+ puts <<-END.gsub(/^ +/,'').strip
263
+ The Kitchen distributes all the Chef-related tooling you need,
264
+ acting as a kind of ChefDK tailored for Blue Jeans. Unfortunately,
265
+ ChefDK sometimes distributes conflicting tooling, so we ask users
266
+ to avoid putting ChefDK on their PATH but leave it installed. The
267
+ Kitchen will use ChefDK as necessary.
268
+
269
+ You should fix this ASAP.
270
+ END
271
+ raise
272
+ end
273
+
274
+ err = false
275
+ { # Which commands important for what tooling
276
+ 'Ruby' => %w[ gem bundle ],
277
+ 'Chef' => %w[ rake berks tony foodcritic kitchen ]
278
+ }.each do |tooling, check_commands|
279
+ check_shebangs = shebangs check_commands
280
+ unless check_shebangs.values.uniq.size == 1
281
+ puts "\e[33mHead's up: I seem some conflicting shebang lines.\e[0m"
282
+ puts
283
+ puts <<-END.gsub(/^ +/,'')
284
+ The Kitchen depends on a stable, clean installation of #{tooling}
285
+ tooling. We expect that all these Gems are managed by the same
286
+ installation, but it's easy for things to get messy:
287
+ END
288
+ check_shebangs.each do |cmd, shebang|
289
+ puts '- %s: %s' % [
290
+ cmd, shebang ? shebang.inspect : 'missing?'
291
+ ]
292
+ end
293
+ puts <<-END.gsub(/^ +/,'').rstrip
294
+
295
+ Depending on your Ruby install method, this may not actually be an
296
+ issue at all, but it could aid in debugging. You might also try simply
297
+ prefixing your command with `bundle exec` to execute within the context
298
+ of the current gem bundle.
299
+ END
300
+ err = true
106
301
  end
107
302
  end
303
+
304
+ puts "\e[32mYour Kitchen installation looks good\e[0m" unless err
108
305
  end
109
306
 
110
307
 
111
308
 
309
+ JsonLint::RakeTask.new do |t|
310
+ t.paths = %w[ **/*.json ]
311
+ end
312
+
313
+ desc 'Check your Kitchen installation'
314
+ task :check do
315
+ check_installation
316
+ end
317
+
112
318
 
113
319
  desc 'Perform syntax check and linting'
114
- task :lint do
320
+ task lint: :jsonlint do
115
321
  lint
116
322
  end
323
+ task full_lint: :jsonlint do
324
+ lint true
325
+ end
117
326
 
118
327
 
119
328
  if test_kitchen?
120
329
  desc 'Execute default Test Kitchen test suite'
121
330
  task test: :lint do
122
- system 'kitchen test'
331
+ system 'bundle exec kitchen test'
123
332
  end
124
333
  end
125
334
 
126
335
 
127
- desc 'Print the current version'
128
- task :version do
129
- puts current_version
336
+ if versioned?
337
+ desc 'Print the current version'
338
+ task :version do
339
+ puts current_version
340
+ end
130
341
  end
131
342
 
132
343
 
344
+
133
345
  if master?
134
- namespace :release do
135
- desc 'Release new major version'
136
- task :major do
137
- bump_and_release :major
346
+ if kitchen?
347
+ desc 'Release a Kitchen update'
348
+ task release: %w[ check full_lint ] do
349
+ bump_and_release :nop
138
350
  end
139
351
 
140
- desc 'Release new minor version'
141
- task :minor do
142
- bump_and_release :minor
352
+ else
353
+ namespace :release do
354
+ desc 'Release new major version'
355
+ task major: %w[ check full_lint ] do
356
+ bump_and_release :major
357
+ end
358
+
359
+ desc 'Release new minor version'
360
+ task minor: %w[ check full_lint ] do
361
+ bump_and_release :minor
362
+ end
363
+
364
+ task patch: %w[ check full_lint ] do
365
+ bump_and_release :patch
366
+ end
143
367
  end
144
368
 
145
- task :patch do
146
- bump_and_release :patch
147
- end
369
+ desc 'Release a new patch version'
370
+ task release: %w[ release:patch ]
148
371
  end
149
372
 
150
- desc 'Release a new patch version'
151
- task release: %w[ release:patch ]
152
-
153
373
 
154
374
  if realm?
155
375
  desc 'Apply Berksfile lock to an environment'
156
376
  task :constrain, [ :env ] do |_, args|
157
- lint
377
+ check_installation
158
378
  youre_dirty!
159
379
  youre_behind!
380
+ envs = json_files('environments').map { |f| File.basename(f, '.json') }
381
+ raise 'Could not find local environment "%s"' % args[:env] unless envs.include?(args[:env])
160
382
  `git tag -a #{args[:env]} -m #{args[:env]} --force`
161
- `git push --tag --force`
383
+ raise '`git tag` failed' unless $?.exitstatus.zero?
384
+ `git push origin #{args[:env]} --force`
385
+ raise '`git push` failed' unless $?.exitstatus.zero?
162
386
  end
163
387
  end
164
388
  end
@@ -2,37 +2,3 @@
2
2
  # Cookbook Name:: <%= cookbook_name %>
3
3
  # Recipe:: <%= name %>
4
4
  #
5
- <%- attribute_ns = cookbook_name.gsub(/^(bjn|app|base|fork|realm)_/, '') -%>
6
-
7
- <%- if name == 'default' -%>
8
- # group node['<%= attribute_ns %>']['user'] do
9
- # system true
10
- # end
11
-
12
- # user node['<%= attribute_ns %>']['user'] do
13
- # gid node['<%= attribute_ns %>']['user']
14
- # shell '/bin/false'
15
- # system true
16
- # end
17
-
18
- # directory node['<%= attribute_ns %>']['logs'] do
19
- # owner node['<%= attribute_ns %>']['user']
20
- # group node['<%= attribute_ns %>']['user']
21
- # recursive true
22
- # end
23
-
24
- # directory node['<%= attribute_ns %>']['data'] do
25
- # owner node['<%= attribute_ns %>']['user']
26
- # group node['<%= attribute_ns %>']['user']
27
- # recursive true
28
- # end
29
-
30
- # ark '<%= attribute_ns %>' do
31
- # url node['<%= attribute_ns %>']['url']
32
- # checksum node['<%= attribute_ns %>']['checksum']
33
- # version node['<%= attribute_ns %>']['version']
34
- # home_dir node['<%= attribute_ns %>']['home']
35
- # owner node['<%= attribute_ns %>']['user']
36
- # group node['<%= attribute_ns %>']['user']
37
- # end
38
- <%- end -%>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bourdain
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Clemmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-18 00:00:00.000000000 Z
11
+ date: 2016-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pmap
@@ -157,8 +157,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
157
  version: '0'
158
158
  requirements: []
159
159
  rubyforge_project:
160
- rubygems_version: 2.5.1
160
+ rubygems_version: 2.4.5.1
161
161
  signing_key:
162
162
  specification_version: 4
163
163
  summary: Tools for badass chefs
164
164
  test_files: []
165
+ has_rdoc: