Skip to content

Commit 92e49c4

Browse files
Merge pull request #371 from puppetlabs/CAT-2379-Puppetcore_update
(CAT-2379) Puppetcore update
2 parents ccd30d8 + 679478e commit 92e49c4

File tree

9 files changed

+180
-51
lines changed

9 files changed

+180
-51
lines changed

.fixtures.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,5 @@ fixtures:
44
provision: "https://github.com/puppetlabs/provision.git"
55
puppet_agent:
66
repo: 'https://github.com/puppetlabs/puppetlabs-puppet_agent.git'
7-
ref: v4.21.0
87
stdlib: "https://github.com/puppetlabs/puppetlabs-stdlib.git"
98
mount_core: "https://github.com/puppetlabs/puppetlabs-mount_core.git"

.github/workflows/ci.yml

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ on:
55
branches:
66
- "main"
77
workflow_dispatch:
8+
9+
env:
10+
PUPPET_FORGE_TOKEN: ${{ secrets.PUPPET_FORGE_TOKEN_PUBLIC }}
11+
BUNDLE_RUBYGEMS___PUPPETCORE__PUPPET__COM: "forge-key:${{ secrets.PUPPET_FORGE_TOKEN_PUBLIC }}"
812

913
jobs:
1014
Spec:
@@ -19,10 +23,13 @@ jobs:
1923
runs-on: "ubuntu-24.04"
2024
outputs:
2125
matrix: ${{ steps.get-matrix.outputs.matrix }}
26+
27+
env:
28+
BUNDLE_WITHOUT: release_prep
2229

2330
steps:
2431
- name: "Checkout"
25-
uses: "actions/checkout@v3"
32+
uses: "actions/checkout@v4"
2633
with:
2734
ref: ${{ github.event.pull_request.head.sha }}
2835

@@ -35,28 +42,49 @@ jobs:
3542
- name: Setup Test Matrix
3643
id: get-matrix
3744
run: |
38-
bundle exec matrix_from_metadata_v2 --provision-service
45+
bundle exec matrix_from_metadata_v3 --provision-prefer provision_service --nightly --platform-exclude scientific-7 --platform-exclude ubuntu-18.04 --platform-exclude ubuntu-20.04
3946
4047
Acceptance:
41-
name: "Acceptance tests (${{matrix.platforms.label}}, ${{matrix.collection}})"
48+
name: "Acceptance tests (${{matrix.platforms.label}}, ${{matrix.collection.collection || matrix.collection}})"
4249
needs: setup_matrix
4350
runs-on: ubuntu-latest
51+
timeout-minutes: 180
4452
strategy:
4553
fail-fast: false
4654
matrix: ${{fromJson(needs.setup_matrix.outputs.matrix)}}
4755

4856
env:
49-
PUPPET_GEM_VERSION: '~> 7.24'
57+
BUNDLE_WITHOUT: release_prep
58+
PUPPET_GEM_VERSION: '~> 8.9'
5059
FACTER_GEM_VERSION: 'https://github.com/puppetlabs/facter#main' # why is this set?
60+
TWINGATE_PUBLIC_REPO_KEY: ${{ secrets.TWINGATE_PUBLIC_REPO_KEY }}
5161

5262
steps:
5363
- name: "Install Twingate"
5464
uses: "twingate/github-action@v1"
5565
with:
5666
service-key: ${{ secrets.TWINGATE_PUBLIC_REPO_KEY }}
5767

68+
- name: Fix DNS
69+
run: |
70+
echo "=== Remove Azure DNS from eth0 interface ==="
71+
sudo resolvectl dns eth0 ""
72+
73+
echo "=== Configure Twingate DNS properly ==="
74+
sudo resolvectl dns sdwan0 100.95.0.251 100.95.0.252
75+
sudo resolvectl domain sdwan0 delivery.puppetlabs.net
76+
77+
echo "=== Flush DNS cache ==="
78+
sudo resolvectl flush-caches
79+
80+
echo "=== Check new configuration ==="
81+
resolvectl status
82+
83+
echo "=== Test DNS resolution ==="
84+
nslookup artifactory.delivery.puppetlabs.net
85+
5886
- name: "Checkout"
59-
uses: "actions/checkout@v3"
87+
uses: "actions/checkout@v4"
6088
with:
6189
ref: ${{ github.event.pull_request.head.sha }}
6290

@@ -77,9 +105,26 @@ jobs:
77105
FILE='spec/fixtures/litmus_inventory.yaml'
78106
sed -e 's/password: .*/password: "[redacted]"/' < $FILE || true
79107
108+
- name: "Fix Debian 10 EOL repositories"
109+
if: contains(matrix.platforms.image, 'debian-10') || contains(matrix.platforms.image, 'buster')
110+
run: |
111+
bundle exec bolt command run "
112+
sed -i 's|deb.debian.org|archive.debian.org|g' /etc/apt/sources.list &&
113+
sed -i 's|security.debian.org|archive.debian.org|g' /etc/apt/sources.list &&
114+
sed -i '/buster-updates/d' /etc/apt/sources.list &&
115+
echo 'Acquire::Check-Valid-Until \"false\";' > /etc/apt/apt.conf.d/99no-check-valid-until &&
116+
echo 'Acquire::AllowInsecureRepositories \"true\";' > /etc/apt/apt.conf.d/99allow-insecure &&
117+
echo 'Acquire::AllowDowngradeToInsecureRepositories \"true\";' >> /etc/apt/apt.conf.d/99allow-insecure
118+
" -t ssh_nodes -i spec/fixtures/litmus_inventory.yaml
119+
80120
- name: "Install Puppet agent"
81121
run: |
82-
bundle exec rake 'litmus:install_agent[${{ matrix.collection }}]'
122+
if [[ "${{ matrix.collection.version }}" ]] ; then
123+
export PUPPET_VERSION=${{ matrix.collection.version }}
124+
bundle exec rake 'litmus:install_agent[${{ matrix.collection.collection }}]'
125+
else
126+
bundle exec rake 'litmus:install_agent[${{ matrix.collection }}]'
127+
fi
83128
84129
- name: "Install module"
85130
run: |

.github/workflows/nightly.yml

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ on:
55
- cron: "0 0 * * *"
66
workflow_dispatch:
77

8+
env:
9+
PUPPET_FORGE_TOKEN: ${{ secrets.PUPPET_FORGE_TOKEN_PUBLIC }}
10+
BUNDLE_RUBYGEMS___PUPPETCORE__PUPPET__COM: "forge-key:${{ secrets.PUPPET_FORGE_TOKEN_PUBLIC }}"
11+
812
jobs:
913
Spec:
1014
uses: "puppetlabs/cat-github-actions/.github/workflows/module_ci.yml@main"
@@ -18,10 +22,13 @@ jobs:
1822
runs-on: "ubuntu-24.04"
1923
outputs:
2024
matrix: ${{ steps.get-matrix.outputs.matrix }}
25+
26+
env:
27+
BUNDLE_WITHOUT: release_prep
2128

2229
steps:
2330
- name: "Checkout"
24-
uses: "actions/checkout@v3"
31+
uses: "actions/checkout@v4"
2532

2633
- name: "Setup ruby"
2734
uses: "ruby/setup-ruby@v1"
@@ -32,28 +39,49 @@ jobs:
3239
- name: Setup Test Matrix
3340
id: get-matrix
3441
run: |
35-
bundle exec matrix_from_metadata_v2 --provision-service
42+
bundle exec matrix_from_metadata_v3 --provision-prefer provision_service --nightly --platform-exclude scientific-7 --platform-exclude ubuntu-18.04 --platform-exclude ubuntu-20.04
3643
3744
Acceptance:
38-
name: "Acceptance tests (${{matrix.platforms.label}}, ${{matrix.collection}})"
45+
name: "Acceptance tests (${{matrix.platforms.label}}, ${{matrix.collection.collection || matrix.collection}})"
3946
needs: setup_matrix
4047
runs-on: ubuntu-latest
48+
timeout-minutes: 180
4149
strategy:
4250
fail-fast: false
4351
matrix: ${{fromJson(needs.setup_matrix.outputs.matrix)}}
4452

4553
env:
46-
PUPPET_GEM_VERSION: '~> 7.24'
54+
BUNDLE_WITHOUT: release_prep
55+
PUPPET_GEM_VERSION: '~> 8.9'
4756
FACTER_GEM_VERSION: 'https://github.com/puppetlabs/facter#main' # why is this set?
57+
TWINGATE_PUBLIC_REPO_KEY: ${{ secrets.TWINGATE_PUBLIC_REPO_KEY }}
4858

4959
steps:
5060
- name: "Install Twingate"
5161
uses: "twingate/github-action@v1"
5262
with:
5363
service-key: ${{ secrets.TWINGATE_PUBLIC_REPO_KEY }}
5464

65+
- name: Fix DNS
66+
run: |
67+
echo "=== Remove Azure DNS from eth0 interface ==="
68+
sudo resolvectl dns eth0 ""
69+
70+
echo "=== Configure Twingate DNS properly ==="
71+
sudo resolvectl dns sdwan0 100.95.0.251 100.95.0.252
72+
sudo resolvectl domain sdwan0 delivery.puppetlabs.net
73+
74+
echo "=== Flush DNS cache ==="
75+
sudo resolvectl flush-caches
76+
77+
echo "=== Check new configuration ==="
78+
resolvectl status
79+
80+
echo "=== Test DNS resolution ==="
81+
nslookup artifactory.delivery.puppetlabs.net
82+
5583
- name: "Checkout"
56-
uses: "actions/checkout@v3"
84+
uses: "actions/checkout@v4"
5785

5886
- name: "Setup ruby"
5987
uses: "ruby/setup-ruby@v1"
@@ -72,9 +100,26 @@ jobs:
72100
FILE='spec/fixtures/litmus_inventory.yaml'
73101
sed -e 's/password: .*/password: "[redacted]"/' < $FILE || true
74102
103+
- name: "Fix Debian 10 EOL repositories"
104+
if: contains(matrix.platforms.image, 'debian-10') || contains(matrix.platforms.image, 'buster')
105+
run: |
106+
bundle exec bolt command run "
107+
sed -i 's|deb.debian.org|archive.debian.org|g' /etc/apt/sources.list &&
108+
sed -i 's|security.debian.org|archive.debian.org|g' /etc/apt/sources.list &&
109+
sed -i '/buster-updates/d' /etc/apt/sources.list &&
110+
echo 'Acquire::Check-Valid-Until \"false\";' > /etc/apt/apt.conf.d/99no-check-valid-until &&
111+
echo 'Acquire::AllowInsecureRepositories \"true\";' > /etc/apt/apt.conf.d/99allow-insecure &&
112+
echo 'Acquire::AllowDowngradeToInsecureRepositories \"true\";' >> /etc/apt/apt.conf.d/99allow-insecure
113+
" -t ssh_nodes -i spec/fixtures/litmus_inventory.yaml
114+
75115
- name: "Install Puppet agent"
76116
run: |
77-
bundle exec rake 'litmus:install_agent[${{ matrix.collection }}]'
117+
if [[ "${{ matrix.collection.version }}" ]] ; then
118+
export PUPPET_VERSION=${{ matrix.collection.version }}
119+
bundle exec rake 'litmus:install_agent[${{ matrix.collection.collection }}]'
120+
else
121+
bundle exec rake 'litmus:install_agent[${{ matrix.collection }}]'
122+
fi
78123
79124
- name: "Install module"
80125
run: |

.puppet-lint.rc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1+
--fail-on-warnings
12
--relative
3+
--no-80chars-check
4+
--no-140chars-check
5+
--no-class_inherits_from_params_class-check
6+
--no-autoloader_layout-check
7+
--no-documentation-check
8+
--no-single_quote_string_with_variables-check
9+
--ignore-paths=.vendor/**/*.pp,.bundle/**/*.pp,pkg/**/*.pp,spec/**/*.pp,tests/**/*.pp,types/**/*.pp,vendor/**/*.pp

.rubocop.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require:
55
AllCops:
66
NewCops: enable
77
DisplayCopNames: true
8-
TargetRubyVersion: '2.6'
8+
TargetRubyVersion: 3.1
99
Include:
1010
- "**/*.rb"
1111
Exclude:

Gemfile

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,101 @@
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{\Afile:\/\/(?<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{\Afile://(?<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
1436
end
1537

1638
group :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))
2039
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))
2140
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))
2241
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))
2342
gem "deep_merge", '~> 1.2.2', require: false
2443
gem "voxpupuli-puppet-lint-plugins", '~> 5.0', require: false
25-
gem "facterdb", '~> 2.1', 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))
2646
gem "metadata-json-lint", '~> 4.0', require: false
27-
gem "rspec-puppet-facts", '~> 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))
2850
gem "dependency_checker", '~> 1.0.0', require: false
2951
gem "parallel_tests", '= 3.12.1', require: false
3052
gem "pry", '~> 0.10', require: false
3153
gem "simplecov-console", '~> 0.9', require: false
32-
gem "puppet-debugger", '~> 1.0', require: false
54+
gem "puppet-debugger", '~> 1.6', require: false
3355
gem "rubocop", '~> 1.50.0', require: false
3456
gem "rubocop-performance", '= 1.16.0', require: false
3557
gem "rubocop-rspec", '= 2.19.0', require: false
3658
gem "rb-readline", '= 0.5.5', require: false, platforms: [:mswin, :mingw, :x64_mingw]
37-
gem "rexml", '>= 3.3.9', require: false
59+
gem "bigdecimal", '< 3.2.2', require: false, platforms: [:mswin, :mingw, :x64_mingw]
3860
end
3961
group :development, :release_prep do
4062
gem "puppet-strings", '~> 4.0', require: false
41-
gem "puppetlabs_spec_helper", '~> 7.0', require: false
63+
gem "puppetlabs_spec_helper", '~> 8.0', require: false
64+
gem "puppet-blacksmith", '~> 7.0', require: false
4265
end
4366
group :system_tests do
44-
gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw]
67+
gem "puppet_litmus", '~> 2.0', require: false, platforms: [:ruby, :x64_mingw] if !ENV['PUPPET_FORGE_TOKEN'].to_s.empty?
68+
gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw] if ENV['PUPPET_FORGE_TOKEN'].to_s.empty?
4569
gem "CFPropertyList", '< 3.0.7', require: false, platforms: [:mswin, :mingw, :x64_mingw]
4670
gem "serverspec", '~> 2.41', require: false
4771
end
4872

49-
puppet_version = ENV['PUPPET_GEM_VERSION']
50-
facter_version = ENV['FACTER_GEM_VERSION']
51-
hiera_version = ENV['HIERA_GEM_VERSION']
52-
5373
gems = {}
74+
puppet_version = ENV.fetch('PUPPET_GEM_VERSION', nil)
75+
facter_version = ENV.fetch('FACTER_GEM_VERSION', nil)
76+
hiera_version = ENV.fetch('HIERA_GEM_VERSION', nil)
5477

55-
gems['puppet'] = location_for(puppet_version)
56-
57-
# If facter or hiera versions have been specified via the environment
58-
# variables
59-
60-
gems['facter'] = location_for(facter_version) if facter_version
61-
gems['hiera'] = location_for(hiera_version) if hiera_version
78+
gems['puppet'] = location_for(puppet_version, nil, { source: gemsource_puppetcore })
79+
gems['facter'] = location_for(facter_version, nil, { source: gemsource_puppetcore })
80+
gems['hiera'] = location_for(hiera_version, nil, {}) if hiera_version
6281

82+
# Generate the gem definitions
83+
print_gem_statement_for(gems) if ENV['DEBUG']
6384
gems.each do |gem_name, gem_params|
6485
gem gem_name, *gem_params
6586
end
6687

6788
# Evaluate Gemfile.local and ~/.gemfile if they exist
6889
extra_gemfiles = [
6990
"#{__FILE__}.local",
70-
File.join(Dir.home, '.gemfile'),
91+
File.join(Dir.home, '.gemfile')
7192
]
7293

7394
extra_gemfiles.each do |gemfile|
74-
if File.file?(gemfile) && File.readable?(gemfile)
75-
eval(File.read(gemfile), binding)
76-
end
95+
next unless File.file?(gemfile) && File.readable?(gemfile)
96+
97+
# rubocop:disable Security/Eval
98+
eval(File.read(gemfile), binding)
99+
# rubocop:enable Security/Eval
77100
end
78101
# vim: syntax=ruby

Rakefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,12 @@ require 'puppet-strings/tasks' if Gem.loaded_specs.key? 'puppet-strings'
88
require 'puppet-strings/tasks'
99

1010
PuppetLint.configuration.send('disable_relative')
11+
PuppetLint.configuration.send('disable_80chars')
12+
PuppetLint.configuration.send('disable_140chars')
13+
PuppetLint.configuration.send('disable_class_inherits_from_params_class')
14+
PuppetLint.configuration.send('disable_autoloader_layout')
15+
PuppetLint.configuration.send('disable_documentation')
16+
PuppetLint.configuration.send('disable_single_quote_string_with_variables')
17+
PuppetLint.configuration.fail_on_warnings = true
18+
PuppetLint.configuration.ignore_paths = [".vendor/**/*.pp", ".bundle/**/*.pp", "pkg/**/*.pp", "spec/**/*.pp", "tests/**/*.pp", "types/**/*.pp", "vendor/**/*.pp"]
19+

0 commit comments

Comments
 (0)