puppetlabs_spec_helper 2.13.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rspec +0 -1
- data/.rubocop.yml +23 -6
- data/.rubocop_todo.yml +18 -18
- data/.travis.yml +14 -26
- data/CHANGELOG.md +95 -1
- data/CODEOWNERS +2 -0
- data/Gemfile +28 -10
- data/README.md +38 -41
- data/Rakefile +1 -1
- data/lib/puppetlabs_spec_helper/module_spec_helper.rb +10 -0
- data/lib/puppetlabs_spec_helper/puppet_spec_helper.rb +4 -2
- data/lib/puppetlabs_spec_helper/puppetlabs_spec/files.rb +2 -0
- data/lib/puppetlabs_spec_helper/puppetlabs_spec/fixtures.rb +7 -2
- data/lib/puppetlabs_spec_helper/puppetlabs_spec/matchers.rb +4 -2
- data/lib/puppetlabs_spec_helper/puppetlabs_spec/puppet_internals.rb +5 -2
- data/lib/puppetlabs_spec_helper/puppetlabs_spec_helper.rb +2 -0
- data/lib/puppetlabs_spec_helper/rake_tasks.rb +141 -77
- data/lib/puppetlabs_spec_helper/tasks/beaker.rb +12 -9
- data/lib/puppetlabs_spec_helper/tasks/check_symlinks.rb +4 -1
- data/lib/puppetlabs_spec_helper/tasks/fixtures.rb +161 -91
- data/lib/puppetlabs_spec_helper/version.rb +3 -1
- data/puppet_spec_helper.rb +2 -0
- data/puppetlabs_spec_helper.gemspec +6 -7
- data/puppetlabs_spec_helper.rb +2 -0
- metadata +55 -45
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rspec-puppet'
|
2
4
|
require 'puppetlabs_spec_helper/puppet_spec_helper'
|
3
5
|
require 'puppetlabs_spec_helper/puppetlabs_spec/puppet_internals'
|
@@ -50,6 +52,14 @@ if ENV['SIMPLECOV'] == 'yes'
|
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
55
|
+
# Add all spec lib dirs to LOAD_PATH
|
56
|
+
components = module_path.split(File::PATH_SEPARATOR).collect do |dir|
|
57
|
+
Dir.entries(dir).reject { |f| f =~ %r{^\.} }.collect { |f| File.join(dir, f, 'spec', 'lib') }
|
58
|
+
end
|
59
|
+
components.flatten.each do |d|
|
60
|
+
$LOAD_PATH << d if FileTest.directory?(d) && !$LOAD_PATH.include?(d)
|
61
|
+
end
|
62
|
+
|
53
63
|
RSpec.configure do |c|
|
54
64
|
c.environmentpath = spec_path if Puppet.version.to_f >= 4.0
|
55
65
|
c.module_path = module_path
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'puppetlabs_spec_helper/puppetlabs_spec_helper'
|
2
4
|
|
3
5
|
# Don't want puppet getting the command line arguments for rake or autotest
|
@@ -45,7 +47,7 @@ require 'puppetlabs_spec_helper/puppetlabs_spec/files'
|
|
45
47
|
# to compatibility mode for older versions of puppet.
|
46
48
|
begin
|
47
49
|
require 'puppet/test/test_helper'
|
48
|
-
rescue LoadError
|
50
|
+
rescue LoadError
|
49
51
|
end
|
50
52
|
|
51
53
|
# This is just a utility class to allow us to isolate the various version-specific
|
@@ -58,7 +60,7 @@ module Puppet
|
|
58
60
|
# Puppet's Settings singleton object, and other fun implementation details
|
59
61
|
# that code external to puppet should really never know about.
|
60
62
|
def self.initialize_via_fallback_compatibility(config)
|
61
|
-
|
63
|
+
warn('Warning: you appear to be using an older version of puppet; spec_helper will use fallback compatibility mode.')
|
62
64
|
config.before :all do
|
63
65
|
# nothing to do for now
|
64
66
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# This module provides some helper methods to assist with fixtures. It's
|
2
4
|
# methods are designed to help when you have a conforming fixture layout so we
|
3
5
|
# get project consistency.
|
@@ -14,6 +16,7 @@ module PuppetlabsSpec::Fixtures
|
|
14
16
|
callers = caller
|
15
17
|
while line = callers.shift
|
16
18
|
next unless found = line.match(%r{/spec/(.*)_spec\.rb:})
|
19
|
+
|
17
20
|
return fixtures(found[1])
|
18
21
|
end
|
19
22
|
raise "sorry, I couldn't work out your path from the caller stack!"
|
@@ -26,6 +29,7 @@ module PuppetlabsSpec::Fixtures
|
|
26
29
|
unless File.readable? file
|
27
30
|
raise "fixture '#{name}' for #{my_fixture_dir} is not readable"
|
28
31
|
end
|
32
|
+
|
29
33
|
file
|
30
34
|
end
|
31
35
|
|
@@ -37,12 +41,13 @@ module PuppetlabsSpec::Fixtures
|
|
37
41
|
|
38
42
|
# Provides a block mechanism for iterating across the files in your fixture
|
39
43
|
# area.
|
40
|
-
def my_fixtures(glob = '*', flags = 0)
|
44
|
+
def my_fixtures(glob = '*', flags = 0, &block)
|
41
45
|
files = Dir.glob(File.join(my_fixture_dir, glob), flags)
|
42
46
|
if files.empty?
|
43
47
|
raise "fixture '#{glob}' for #{my_fixture_dir} had no files!"
|
44
48
|
end
|
45
|
-
|
49
|
+
|
50
|
+
block_given? && files.each(&block)
|
46
51
|
files
|
47
52
|
end
|
48
53
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'stringio'
|
2
4
|
require 'rspec/expectations'
|
3
5
|
|
@@ -6,8 +8,8 @@ require 'rspec/expectations'
|
|
6
8
|
module RSpec
|
7
9
|
module Matchers
|
8
10
|
module BlockAliases
|
9
|
-
if method_defined? :
|
10
|
-
alias to should
|
11
|
+
if method_defined?(:should) && !method_defined?(:to)
|
12
|
+
alias to should
|
11
13
|
end
|
12
14
|
if method_defined? :should_not
|
13
15
|
alias to_not should_not unless method_defined? :to_not
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Initialize puppet for testing by loading the
|
2
4
|
# 'puppetlabs_spec_helper/puppet_spec_helper' library
|
3
5
|
require 'puppetlabs_spec_helper/puppet_spec_helper'
|
@@ -10,7 +12,7 @@ module PuppetlabsSpec
|
|
10
12
|
def scope(parts = {})
|
11
13
|
RSpec.deprecate('scope', replacement: 'rspec-puppet 2.2.0 provides a scope property')
|
12
14
|
|
13
|
-
if
|
15
|
+
if %r{^2\.[67]}.match?(Puppet.version)
|
14
16
|
# loadall should only be necessary prior to 3.x
|
15
17
|
# Please note, loadall needs to happen first when creating a scope, otherwise
|
16
18
|
# you might receive undefined method `function_*' errors
|
@@ -21,7 +23,7 @@ module PuppetlabsSpec
|
|
21
23
|
scope_parent = parts[:parent] || scope_compiler.topscope
|
22
24
|
scope_resource = parts[:resource] || resource(type: :node, title: scope_compiler.node.name)
|
23
25
|
|
24
|
-
scope = if
|
26
|
+
scope = if %r{^2\.[67]}.match?(Puppet.version)
|
25
27
|
Puppet::Parser::Scope.new(compiler: scope_compiler)
|
26
28
|
else
|
27
29
|
Puppet::Parser::Scope.new(scope_compiler)
|
@@ -67,6 +69,7 @@ module PuppetlabsSpec
|
|
67
69
|
# exists. This is a hack, but at least it's a hidden hack and not an
|
68
70
|
# exposed hack.
|
69
71
|
return nil unless Puppet::Parser::Functions.function(name)
|
72
|
+
|
70
73
|
scope.method("function_#{name}".intern)
|
71
74
|
end
|
72
75
|
module_function :function_method
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fileutils'
|
2
4
|
require 'rake'
|
3
5
|
require 'rspec/core/rake_task'
|
@@ -16,6 +18,24 @@ rescue LoadError
|
|
16
18
|
# ignore
|
17
19
|
end
|
18
20
|
|
21
|
+
begin
|
22
|
+
require 'puppet_blacksmith/rake_tasks'
|
23
|
+
rescue LoadError
|
24
|
+
# ignore
|
25
|
+
end
|
26
|
+
|
27
|
+
begin
|
28
|
+
require 'github_changelog_generator/task'
|
29
|
+
rescue LoadError
|
30
|
+
# ignore
|
31
|
+
end
|
32
|
+
|
33
|
+
begin
|
34
|
+
require 'puppet-strings/tasks'
|
35
|
+
rescue LoadError
|
36
|
+
# ignore
|
37
|
+
end
|
38
|
+
|
19
39
|
parallel_tests_loaded = false
|
20
40
|
begin
|
21
41
|
require 'parallel_tests'
|
@@ -29,12 +49,13 @@ task default: [:help]
|
|
29
49
|
pattern = 'spec/{aliases,classes,defines,functions,hosts,integration,plans,tasks,type_aliases,types,unit}/**/*_spec.rb'
|
30
50
|
|
31
51
|
RSpec::Core::RakeTask.new(:spec_standalone) do |t, args|
|
32
|
-
t.rspec_opts = [
|
52
|
+
t.rspec_opts = []
|
33
53
|
t.rspec_opts << ENV['CI_SPEC_OPTIONS'] unless ENV['CI_SPEC_OPTIONS'].nil?
|
34
54
|
if ENV['CI_NODE_TOTAL'] && ENV['CI_NODE_INDEX']
|
35
55
|
ci_total = ENV['CI_NODE_TOTAL'].to_i
|
36
56
|
ci_index = ENV['CI_NODE_INDEX'].to_i
|
37
57
|
raise "CI_NODE_INDEX must be between 1-#{ci_total}" unless ci_index >= 1 && ci_index <= ci_total
|
58
|
+
|
38
59
|
files = Rake::FileList[pattern].to_a
|
39
60
|
per_node = (files.size / ci_total.to_f).ceil
|
40
61
|
t.pattern = if args.extras.nil? || args.extras.empty?
|
@@ -90,16 +111,17 @@ end
|
|
90
111
|
desc 'Parallel spec tests'
|
91
112
|
task :parallel_spec_standalone do |_t, args|
|
92
113
|
raise 'Add the parallel_tests gem to Gemfile to enable this task' unless parallel_tests_loaded
|
114
|
+
|
93
115
|
if Rake::FileList[pattern].to_a.empty?
|
94
116
|
warn 'No files for parallel_spec to run against'
|
95
117
|
else
|
96
|
-
begin
|
97
|
-
args = ['-t', 'rspec']
|
98
|
-
args.push('--').concat(ENV['CI_SPEC_OPTIONS'].strip.split(' ')).push('--') unless ENV['CI_SPEC_OPTIONS'].nil? || ENV['CI_SPEC_OPTIONS'].strip.empty?
|
99
|
-
args.concat(Rake::FileList[pattern].to_a)
|
100
118
|
|
101
|
-
|
102
|
-
|
119
|
+
args = ['-t', 'rspec']
|
120
|
+
args.push('--').concat(ENV['CI_SPEC_OPTIONS'].strip.split(' ')).push('--') unless ENV['CI_SPEC_OPTIONS'].nil? || ENV['CI_SPEC_OPTIONS'].strip.empty?
|
121
|
+
args.concat(Rake::FileList[pattern].to_a)
|
122
|
+
|
123
|
+
ParallelTests::CLI.new.run(args)
|
124
|
+
|
103
125
|
end
|
104
126
|
end
|
105
127
|
|
@@ -124,14 +146,15 @@ namespace :build do
|
|
124
146
|
desc 'Build Puppet module with PDK'
|
125
147
|
task :pdk do
|
126
148
|
begin
|
149
|
+
require 'pdk/util'
|
127
150
|
require 'pdk/module/build'
|
128
151
|
|
129
|
-
path = PDK::Module::Build.invoke(:
|
152
|
+
path = PDK::Module::Build.invoke(force: true, 'target-dir': File.join(Dir.pwd, 'pkg'))
|
130
153
|
puts "Module built: #{path}"
|
131
154
|
rescue LoadError
|
132
155
|
_ = `pdk --version`
|
133
156
|
unless $CHILD_STATUS.success?
|
134
|
-
|
157
|
+
warn 'Unable to build module. Please install PDK or add the `pdk` gem to your Gemfile.'
|
135
158
|
abort
|
136
159
|
end
|
137
160
|
|
@@ -149,52 +172,34 @@ require 'puppet-lint/tasks/puppet-lint'
|
|
149
172
|
# Must clear as it will not override the existing puppet-lint rake task since we require to import for
|
150
173
|
# the PuppetLint::RakeTask
|
151
174
|
Rake::Task[:lint].clear
|
152
|
-
#
|
175
|
+
# Utilize PuppetLint global configuration so that these settings can be tweaked by
|
176
|
+
# spec_helper.rb in an individual module
|
153
177
|
PuppetLint.configuration.relative = true
|
154
|
-
PuppetLint
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
]
|
178
|
+
PuppetLint.configuration.ignore_paths ||= []
|
179
|
+
PuppetLint.configuration.ignore_paths << '.vendor/**/*.pp'
|
180
|
+
PuppetLint.configuration.ignore_paths << 'bundle/**/*.pp'
|
181
|
+
PuppetLint.configuration.ignore_paths << 'pkg/**/*.pp'
|
182
|
+
PuppetLint.configuration.ignore_paths << 'spec/**/*.pp'
|
183
|
+
PuppetLint.configuration.ignore_paths << 'tests/**/*.pp'
|
184
|
+
PuppetLint.configuration.ignore_paths << 'types/**/*.pp'
|
185
|
+
PuppetLint.configuration.ignore_paths << 'vendor/**/*.pp'
|
186
|
+
puppet_lint_disable_checks = %w[
|
187
|
+
80chars
|
188
|
+
140chars
|
189
|
+
class_inherits_from_params_class
|
190
|
+
class_parameter_defaults
|
191
|
+
disable_autoloader_layout
|
192
|
+
documentation
|
193
|
+
single_quote_string_with_variables
|
194
|
+
]
|
195
|
+
puppet_lint_disable_checks.each do |check|
|
196
|
+
PuppetLint.configuration.send("disable_#{check}")
|
174
197
|
end
|
198
|
+
PuppetLint::RakeTask.new(:lint)
|
175
199
|
|
176
200
|
desc 'Run puppet-lint and fix issues automatically'
|
177
201
|
PuppetLint::RakeTask.new(:lint_fix) do |config|
|
178
|
-
config.fail_on_warnings = true
|
179
202
|
config.fix = true
|
180
|
-
config.disable_checks = %w[
|
181
|
-
80chars
|
182
|
-
140chars
|
183
|
-
class_inherits_from_params_class
|
184
|
-
class_parameter_defaults
|
185
|
-
disable_autoloader_layout
|
186
|
-
documentation
|
187
|
-
single_quote_string_with_variables
|
188
|
-
]
|
189
|
-
config.ignore_paths = [
|
190
|
-
'.vendor/**/*.pp',
|
191
|
-
'bundle/**/*.pp',
|
192
|
-
'pkg/**/*.pp',
|
193
|
-
'spec/**/*.pp',
|
194
|
-
'tests/**/*.pp',
|
195
|
-
'types/**/*.pp',
|
196
|
-
'vendor/**/*.pp',
|
197
|
-
]
|
198
203
|
end
|
199
204
|
|
200
205
|
require 'puppet-syntax/tasks/puppet-syntax'
|
@@ -202,7 +207,8 @@ PuppetSyntax.exclude_paths ||= []
|
|
202
207
|
PuppetSyntax.exclude_paths << 'spec/fixtures/**/*'
|
203
208
|
PuppetSyntax.exclude_paths << 'pkg/**/*'
|
204
209
|
PuppetSyntax.exclude_paths << 'vendor/**/*'
|
205
|
-
PuppetSyntax.exclude_paths << '
|
210
|
+
PuppetSyntax.exclude_paths << '.vendor/**/*'
|
211
|
+
PuppetSyntax.exclude_paths << 'plans/**/*'
|
206
212
|
if Puppet.version.to_f < 4.0
|
207
213
|
PuppetSyntax.exclude_paths << 'types/**/*'
|
208
214
|
end
|
@@ -243,7 +249,7 @@ task :compute_dev_version do
|
|
243
249
|
version = modinfo['version']
|
244
250
|
elsif File.exist?('Modulefile')
|
245
251
|
modfile = File.read('Modulefile')
|
246
|
-
version = modfile.match(%r{\nversion
|
252
|
+
version = modfile.match(%r{\nversion +['"](.*)['"]})[1]
|
247
253
|
else
|
248
254
|
raise 'Could not find a metadata.json or Modulefile! Cannot compute dev version without one or the other!'
|
249
255
|
end
|
@@ -255,12 +261,12 @@ task :compute_dev_version do
|
|
255
261
|
# If the branch is a release branch we append an 'r' into the new_version,
|
256
262
|
# this is due to the release branch buildID conflicting with master branch when trying to push to the staging forge.
|
257
263
|
# More info can be found at https://tickets.puppetlabs.com/browse/FM-6170
|
258
|
-
new_version = if build = ENV['BUILD_NUMBER'] || ENV['TRAVIS_BUILD_NUMBER']
|
264
|
+
new_version = if build = (ENV['BUILD_NUMBER'] || ENV['TRAVIS_BUILD_NUMBER'])
|
259
265
|
if branch.eql? 'release'
|
260
|
-
'%s-%s%04d-%s' % [version, 'r', build, sha]
|
266
|
+
'%s-%s%04d-%s' % [version, 'r', build, sha] # legacy support code # rubocop:disable Style/FormatStringToken
|
261
267
|
else
|
262
|
-
'%s-%04d-%s' % [version, build, sha]
|
263
|
-
|
268
|
+
'%s-%04d-%s' % [version, build, sha] # legacy support code # rubocop:disable Style/FormatStringToken
|
269
|
+
end
|
264
270
|
else
|
265
271
|
"#{version}-#{sha}"
|
266
272
|
end
|
@@ -277,10 +283,7 @@ task :release_checks do
|
|
277
283
|
else
|
278
284
|
Rake::Task[:spec].invoke
|
279
285
|
end
|
280
|
-
Rake::Task[
|
281
|
-
Rake::Task['check:test_file'].invoke
|
282
|
-
Rake::Task['check:dot_underscore'].invoke
|
283
|
-
Rake::Task['check:git_ignore'].invoke
|
286
|
+
Rake::Task[:check].invoke
|
284
287
|
end
|
285
288
|
|
286
289
|
namespace :check do
|
@@ -321,6 +324,9 @@ namespace :check do
|
|
321
324
|
end
|
322
325
|
end
|
323
326
|
|
327
|
+
desc 'Run static pre release checks'
|
328
|
+
task check: ['check:symlinks', 'check:test_file', 'check:dot_underscore', 'check:git_ignore']
|
329
|
+
|
324
330
|
desc 'Display the list of available rake tasks'
|
325
331
|
task :help do
|
326
332
|
system('rake -T')
|
@@ -339,25 +345,83 @@ rescue LoadError
|
|
339
345
|
end
|
340
346
|
end
|
341
347
|
|
342
|
-
|
343
|
-
|
344
|
-
#
|
345
|
-
#
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
348
|
+
def create_gch_task(changelog_user = nil, changelog_project = nil, changelog_since_tag = nil, changelog_tag_pattern = 'v%s')
|
349
|
+
if Bundler.rubygems.find_name('github_changelog_generator').any?
|
350
|
+
# needed a place to hide these methods
|
351
|
+
# rubocop:disable Lint/NestedMethodDefinition
|
352
|
+
def changelog_user_from_metadata
|
353
|
+
result = JSON.parse(File.read('metadata.json'))['author']
|
354
|
+
raise 'unable to find the changelog_user in .sync.yml, or the author in metadata.json' if result.nil?
|
355
|
+
|
356
|
+
puts "GitHubChangelogGenerator user:#{result}"
|
357
|
+
result
|
358
|
+
end
|
359
|
+
|
360
|
+
def changelog_project_from_metadata
|
361
|
+
result = JSON.parse(File.read('metadata.json'))['name']
|
362
|
+
raise 'unable to find the changelog_project in .sync.yml or the name in metadata.json' if result.nil?
|
363
|
+
|
364
|
+
puts "GitHubChangelogGenerator project:#{result}"
|
365
|
+
result
|
366
|
+
end
|
367
|
+
|
368
|
+
def changelog_future_release
|
369
|
+
return unless Rake.application.top_level_tasks.include? 'changelog'
|
370
|
+
|
371
|
+
result = JSON.parse(File.read('metadata.json'))['version']
|
372
|
+
raise 'unable to find the future_release (version) in metadata.json' if result.nil?
|
373
|
+
|
374
|
+
puts "GitHubChangelogGenerator future_release:#{result}"
|
375
|
+
result
|
376
|
+
end
|
377
|
+
# rubocop:enable Lint/NestedMethodDefinition
|
378
|
+
|
379
|
+
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
380
|
+
if ENV['CHANGELOG_GITHUB_TOKEN'].nil?
|
381
|
+
raise "Set CHANGELOG_GITHUB_TOKEN environment variable eg 'export CHANGELOG_GITHUB_TOKEN=valid_token_here'"
|
358
382
|
end
|
383
|
+
|
384
|
+
config.user = changelog_user || changelog_user_from_metadata
|
385
|
+
config.project = changelog_project || changelog_project_from_metadata
|
386
|
+
config.since_tag = changelog_since_tag if changelog_since_tag
|
387
|
+
config.future_release = changelog_tag_pattern % changelog_future_release.to_s
|
388
|
+
config.exclude_labels = ['maintenance']
|
389
|
+
config.header = "# Change log\n\nAll notable changes to this project will be documented in this file. " \
|
390
|
+
'The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres ' \
|
391
|
+
'to [Semantic Versioning](https://semver.org).'
|
392
|
+
config.add_pr_wo_labels = true
|
393
|
+
config.issues = false
|
394
|
+
config.merge_prefix = '### UNCATEGORIZED PRS; GO LABEL THEM'
|
395
|
+
config.configure_sections = {
|
396
|
+
'Changed' => {
|
397
|
+
'prefix' => '### Changed',
|
398
|
+
'labels' => ['backwards-incompatible'],
|
399
|
+
},
|
400
|
+
'Added' => {
|
401
|
+
'prefix' => '### Added',
|
402
|
+
'labels' => %w[feature enhancement],
|
403
|
+
},
|
404
|
+
'Fixed' => {
|
405
|
+
'prefix' => '### Fixed',
|
406
|
+
'labels' => ['bugfix'],
|
407
|
+
},
|
408
|
+
}
|
409
|
+
end
|
410
|
+
else
|
411
|
+
desc 'Generate a Changelog from GitHub'
|
412
|
+
task :changelog do
|
413
|
+
raise <<~MESSAGE
|
414
|
+
The changelog tasks depends on unreleased features of the github_changelog_generator gem.
|
415
|
+
Please manually add it to your .sync.yml for now, and run `pdk update`:
|
416
|
+
---
|
417
|
+
Gemfile:
|
418
|
+
optional:
|
419
|
+
':development':
|
420
|
+
- gem: 'github_changelog_generator'
|
421
|
+
git: 'https://github.com/skywinder/github-changelog-generator'
|
422
|
+
ref: '20ee04ba1234e9e83eb2ffb5056e23d641c7a018'
|
423
|
+
condition: "Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.2')"
|
424
|
+
MESSAGE
|
359
425
|
end
|
360
|
-
rescue Gem::LoadError
|
361
|
-
puts 'No gettext-setup gem found, skipping GettextSetup config initialization' if Rake.verbose == true
|
362
426
|
end
|
363
427
|
end
|