puppetlabs_spec_helper 2.13.1 → 3.0.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 +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
|