1- source ENV [ 'GEM_SOURCE' ] || 'https://rubygems.org'
1+ # frozen_string_literal: true
22
3- def location_for ( place_or_version , fake_version = nil )
4- git_url_regex = %r{\A (?<url>(https?|git)[:@][^#]*)(#(?<branch>.*))?}
5- file_url_regex = %r{\A file:\/ \/ (?<path>.*)}
3+ # For puppetcore, set GEM_SOURCE_PUPPETCORE = 'https://rubygems-puppetcore.puppet.com'
4+ gemsource_default = ENV [ 'GEM_SOURCE' ] || 'https://rubygems.org'
5+ gemsource_puppetcore = if ENV [ 'PUPPET_FORGE_TOKEN' ]
6+ 'https://rubygems-puppetcore.puppet.com'
7+ else
8+ ENV [ 'GEM_SOURCE_PUPPETCORE' ] || gemsource_default
9+ end
10+ source gemsource_default
11+
12+ def location_for ( place_or_constraint , fake_constraint = nil , opts = { } )
13+ git_url_regex = /\A (?<url>(?:https?|git)[:@][^#]*)(?:#(?<branch>.*))?/
14+ file_url_regex = %r{\A file://(?<path>.*)}
15+
16+ if place_or_constraint && ( git_url = place_or_constraint . match ( git_url_regex ) )
17+ # Git source → ignore :source, keep fake_constraint
18+ [ fake_constraint , { git : git_url [ :url ] , branch : git_url [ :branch ] , require : false } ] . compact
19+
20+ elsif place_or_constraint && ( file_url = place_or_constraint . match ( file_url_regex ) )
21+ # File source → ignore :source, keep fake_constraint or default >= 0
22+ [ fake_constraint || '>= 0' , { path : File . expand_path ( file_url [ :path ] ) , require : false } ]
623
7- if place_or_version && ( git_url = place_or_version . match ( git_url_regex ) )
8- [ fake_version , { git : git_url [ :url ] , branch : git_url [ :branch ] , require : false } ] . compact
9- elsif place_or_version && ( file_url = place_or_version . match ( file_url_regex ) )
10- [ '>= 0' , { path : File . expand_path ( file_url [ :path ] ) , require : false } ]
1124 else
12- [ place_or_version , { require : false } ]
25+ # Plain version constraint → merge opts (including :source if provided)
26+ [ place_or_constraint , { require : false } . merge ( opts ) ]
27+ end
28+ end
29+
30+ # Print debug information if DEBUG_GEMS or VERBOSE is set
31+ def print_gem_statement_for ( gems )
32+ puts 'DEBUG: Gem definitions that will be generated:'
33+ gems . each do |gem_name , gem_params |
34+ puts "DEBUG: gem #{ ( [ gem_name . inspect ] + gem_params . map ( &:inspect ) ) . join ( ', ' ) } "
1335 end
1436end
1537
1638group :development do
17- gem "json" , '= 2.1.0' , require : false if Gem ::Requirement . create ( [ '>= 2.5.0' , '< 2.7.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
18- gem "json" , '= 2.3.0' , require : false if Gem ::Requirement . create ( [ '>= 2.7.0' , '< 3.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
19- gem "json" , '= 2.5.1' , require : false if Gem ::Requirement . create ( [ '>= 3.0.0' , '< 3.0.5' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
20- gem "json" , '= 2.6.1' , require : false if Gem ::Requirement . create ( [ '>= 3.1.0' , '< 3.1.3' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
21- gem "json" , '= 2.6.3' , require : false if Gem ::Requirement . create ( [ '>= 3.2.0' , '< 4.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
22- gem "racc" , '~> 1.4.0' , require : false if Gem ::Requirement . create ( [ '>= 2.7.0' , '< 3.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
23- gem "deep_merge" , '~> 1.0' , require : false
24- gem "voxpupuli-puppet-lint-plugins" , '~> 5.0' , require : false
25- gem "facterdb" , '~> 1.18' , require : false
26- gem "metadata-json-lint" , '~> 4.0' , require : false
27- gem "rspec-puppet-facts" , '~> 3.0' , require : false
28- gem "dependency_checker" , '~> 1.0.0' , require : false
29- gem "parallel_tests" , '= 3.12.1' , require : false
30- gem "pry" , '~> 0.10' , require : false
31- gem "simplecov-console" , '~> 0.9' , require : false
32- gem "puppet-debugger" , '~> 1.0' , require : false
33- gem "rubocop" , '~> 1.50.0' , require : false
34- gem "rubocop-performance" , '= 1.16.0' , require : false
35- gem "rubocop-rspec" , '= 2.19.0' , require : false
36- gem "rb-readline" , '= 0.5.5' , require : false , platforms : [ :mswin , :mingw , :x64_mingw ]
39+ gem "json" , '= 2.6.1' , require : false if Gem ::Requirement . create ( [ '>= 3.1.0' , '< 3.1.3' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
40+ gem "json" , '= 2.6.3' , require : false if Gem ::Requirement . create ( [ '>= 3.2.0' , '< 4.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
41+ gem "racc" , '~> 1.4.0' , require : false if Gem ::Requirement . create ( [ '>= 2.7.0' , '< 3.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
42+ gem "deep_merge" , '~> 1.2.2' , require : false
43+ gem "voxpupuli-puppet-lint-plugins" , '~> 5.0' , require : false
44+ gem "facterdb" , '~> 2.1' , require : false if Gem ::Requirement . create ( [ '< 3.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
45+ gem "facterdb" , '~> 3.0' , require : false if Gem ::Requirement . create ( [ '>= 3.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
46+ gem "metadata-json-lint" , '~> 4.0' , require : false
47+ gem "json-schema" , '< 5.1.1' , require : false
48+ gem "rspec-puppet-facts" , '~> 4.0' , require : false if Gem ::Requirement . create ( [ '< 3.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
49+ gem "rspec-puppet-facts" , '~> 5.0' , require : false if Gem ::Requirement . create ( [ '>= 3.0.0' ] ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
50+ gem "dependency_checker" , '~> 1.0.0' , require : false
51+ gem "parallel_tests" , '= 3.12.1' , require : false
52+ gem "pry" , '~> 0.10' , require : false
53+ gem "simplecov-console" , '~> 0.9' , require : false
54+ gem "puppet-debugger" , '~> 1.6' , require : false
55+ gem "rubocop" , '~> 1.50.0' , require : false
56+ gem "rubocop-performance" , '= 1.16.0' , require : false
57+ gem "rubocop-rspec" , '= 2.19.0' , require : false
58+ gem "rb-readline" , '= 0.5.5' , require : false , platforms : [ :mswin , :mingw , :x64_mingw ]
59+ gem "bigdecimal" , '< 3.2.2' , require : false , platforms : [ :mswin , :mingw , :x64_mingw ]
3760 gem "beaker" , *location_for ( ENV [ 'BEAKER_VERSION' ] || '~> 6' )
3861 gem "beaker-abs" , *location_for ( ENV [ 'BEAKER_ABS_VERSION' ] || '~> 1' )
3962 gem "beaker-hostgenerator" , *location_for ( ENV [ 'BEAKER_HOSTGENERATOR_VERSION' ] || '~> 2' )
4063 gem "beaker-rspec"
4164 gem "beaker-puppet" , *location_for ( ENV [ 'BEAKER_PUPPET_VERSION' ] || '~> 4' ) if Gem ::Requirement . create ( '< 3.2.0' ) . satisfied_by? ( Gem ::Version . new ( RUBY_VERSION . dup ) )
42- gem "async" , '~> 1' , require : false
43- gem "beaker-module_install_helper" , require : false
44- gem "nokogiri" , require : false
65+ gem "async" , '~> 1' , require : false
66+ gem "beaker-module_install_helper" , require : false
67+ gem "nokogiri" , require : false
4568end
4669group :development , :release_prep do
4770 gem "puppet-strings" , '~> 4.0' , require : false
48- gem "puppetlabs_spec_helper" , '~> 7.0' , require : false
71+ gem "puppetlabs_spec_helper" , '~> 8.0' , require : false
72+ gem "puppet-blacksmith" , '~> 7.0' , require : false
4973end
5074group :system_tests do
75+ gem "puppet_litmus" , '~> 2.0' , require : false , platforms : [ :ruby , :x64_mingw ] if !ENV [ 'PUPPET_FORGE_TOKEN' ] . to_s . empty?
76+ gem "puppet_litmus" , '~> 1.0' , require : false , platforms : [ :ruby , :x64_mingw ] if ENV [ 'PUPPET_FORGE_TOKEN' ] . to_s . empty?
5177 gem "CFPropertyList" , '< 3.0.7' , require : false , platforms : [ :mswin , :mingw , :x64_mingw ]
5278 gem "serverspec" , '~> 2.41' , require : false
5379 gem "voxpupuli-acceptance" , require : false
@@ -58,31 +84,27 @@ puppet_version = ENV.fetch('PUPPET_GEM_VERSION', nil)
5884facter_version = ENV . fetch ( 'FACTER_GEM_VERSION' , nil )
5985hiera_version = ENV . fetch ( 'HIERA_GEM_VERSION' , nil )
6086
61- # If PUPPET_FORGE_TOKEN is set then use authenticated source for both puppet and facter, since facter is a transitive dependency of puppet
62- # Otherwise, do as before and use location_for to fetch gems from the default source
63- if !ENV [ 'PUPPET_FORGE_TOKEN' ] . to_s . empty?
64- gems [ 'puppet' ] = [ '~> 8.11' , { require : false , source : 'https://rubygems-puppetcore.puppet.com' } ]
65- gems [ 'facter' ] = [ '~> 4.11' , { require : false , source : 'https://rubygems-puppetcore.puppet.com' } ]
66- else
67- gems [ 'puppet' ] = location_for ( puppet_version )
68- gems [ 'facter' ] = location_for ( facter_version ) if facter_version
69- end
70-
71- gems [ 'hiera' ] = location_for ( hiera_version ) if hiera_version
87+ gems [ 'puppet' ] = location_for ( puppet_version , nil , { source : gemsource_puppetcore } )
88+ gems [ 'facter' ] = location_for ( facter_version , nil , { source : gemsource_puppetcore } )
89+ gems [ 'hiera' ] = location_for ( hiera_version , nil , { } ) if hiera_version
7290
91+ # Generate the gem definitions
92+ print_gem_statement_for ( gems ) if ENV [ 'DEBUG' ]
7393gems . each do |gem_name , gem_params |
7494 gem gem_name , *gem_params
7595end
7696
7797# Evaluate Gemfile.local and ~/.gemfile if they exist
7898extra_gemfiles = [
7999 "#{ __FILE__ } .local" ,
80- File . join ( Dir . home , '.gemfile' ) ,
100+ File . join ( Dir . home , '.gemfile' )
81101]
82102
83103extra_gemfiles . each do |gemfile |
84- if File . file? ( gemfile ) && File . readable? ( gemfile )
85- eval ( File . read ( gemfile ) , binding )
86- end
104+ next unless File . file? ( gemfile ) && File . readable? ( gemfile )
105+
106+ # rubocop:disable Security/Eval
107+ eval ( File . read ( gemfile ) , binding )
108+ # rubocop:enable Security/Eval
87109end
88110# vim: syntax=ruby
0 commit comments