From fb0a41ca38263f6a9ec1c668f72de691f68c4794 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 21:43:23 +0100 Subject: [PATCH 01/54] update apt source to deb822 format --- manifests/repo/nodesource/apt.pp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index e3ba5358..ac09f804 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -7,15 +7,26 @@ include apt if ($ensure != 'absent') { + + apt::keyring { 'nodesource': + source => 'https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key', + dir => '/usr/share/keyrings', + filename => 'nodesource-repo.gpg.key.asc', + } + apt::source { 'nodesource': - key => { - 'name' => 'nodesource-repo.gpg.key.asc', - 'source' => 'https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key', - }, - location => "https://deb.nodesource.com/node_${url_suffix}", - pin => $pin, - release => 'nodistro', - repos => 'main', + source_format => 'sources', + location => [ "https://deb.nodesource.com/node_${url_suffix}", ], + keyring => '/usr/share/keyrings/nodesource-repo.gpg.key.asc', + release => [ 'nodistro', ], + repos => [ 'main', ], + types => [ 'deb', ], + require => Apt::Keyring['nodesource'], + } + + apt::pin { 'nodesource': + origin => 'deb.nodesource.com', + pin => $pin, } Apt::Source['nodesource'] -> Package<| tag == 'nodesource_repo' |> From 085cab8e5269ebc074db08aaf78e6e31bef18ff7 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 22:04:29 +0100 Subject: [PATCH 02/54] comply with lint style --- manifests/repo/nodesource/apt.pp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index ac09f804..5b5dbb3d 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -9,18 +9,18 @@ if ($ensure != 'absent') { apt::keyring { 'nodesource': - source => 'https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key', - dir => '/usr/share/keyrings', - filename => 'nodesource-repo.gpg.key.asc', + source => 'https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key', + dir => '/usr/share/keyrings', + filename => 'nodesource-repo.gpg.key.asc', } apt::source { 'nodesource': source_format => 'sources', - location => [ "https://deb.nodesource.com/node_${url_suffix}", ], + location => ["https://deb.nodesource.com/node_${url_suffix}",], keyring => '/usr/share/keyrings/nodesource-repo.gpg.key.asc', - release => [ 'nodistro', ], - repos => [ 'main', ], - types => [ 'deb', ], + release => ['nodistro',], + repos => ['main',], + types => ['deb',], require => Apt::Keyring['nodesource'], } From 9bc80cadee6cfc0593de1655fe97ad300d1c313b Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 22:06:00 +0100 Subject: [PATCH 03/54] Error: there should be a single space or single newline after an opening brace (check: manifest_whitespace_opening_brace_after) --- manifests/repo/nodesource/apt.pp | 1 - 1 file changed, 1 deletion(-) diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index 5b5dbb3d..fe12f2be 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -7,7 +7,6 @@ include apt if ($ensure != 'absent') { - apt::keyring { 'nodesource': source => 'https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key', dir => '/usr/share/keyrings', From fb3c17b6e917b0860efd919f766ad03d3f1a3473 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 22:18:24 +0100 Subject: [PATCH 04/54] puppetlabs-apt expects priority Data type: Variant[Integer, String[1]] with a default of 0 --- manifests/params.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/params.pp b/manifests/params.pp index 971cdbaa..1557234f 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -4,7 +4,7 @@ $nodejs_debug_package_ensure = 'absent' $nodejs_package_ensure = 'installed' $repo_ensure = 'present' - $repo_pin = undef + $repo_pin = '0', $repo_priority = 'absent' $repo_proxy = 'absent' $repo_proxy_password = 'absent' From a5270914d8f86a3d43fef7b480083a683332b20b Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 22:20:29 +0100 Subject: [PATCH 05/54] no comma --- manifests/params.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/params.pp b/manifests/params.pp index 1557234f..59ff1cb1 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -4,7 +4,7 @@ $nodejs_debug_package_ensure = 'absent' $nodejs_package_ensure = 'installed' $repo_ensure = 'present' - $repo_pin = '0', + $repo_pin = '0' $repo_priority = 'absent' $repo_proxy = 'absent' $repo_proxy_password = 'absent' From cc66d1c783ef7f3951c9d2ceccbf0dfd671d2644 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 22:27:45 +0100 Subject: [PATCH 06/54] replace pin with priority --- manifests/repo/nodesource/apt.pp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index fe12f2be..3ff3fc63 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -24,8 +24,8 @@ } apt::pin { 'nodesource': - origin => 'deb.nodesource.com', - pin => $pin, + origin => 'deb.nodesource.com', + priority => $pin, } Apt::Source['nodesource'] -> Package<| tag == 'nodesource_repo' |> From b8dcd2596c98c249aa833293ad327bbd5b37958e Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 23:38:41 +0100 Subject: [PATCH 07/54] Revert "puppetlabs-apt expects priority Data type: Variant[Integer, String[1]] with a default of 0" This reverts commit fb3c17b6e917b0860efd919f766ad03d3f1a3473. --- manifests/params.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/params.pp b/manifests/params.pp index 59ff1cb1..971cdbaa 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -4,7 +4,7 @@ $nodejs_debug_package_ensure = 'absent' $nodejs_package_ensure = 'installed' $repo_ensure = 'present' - $repo_pin = '0' + $repo_pin = undef $repo_priority = 'absent' $repo_proxy = 'absent' $repo_proxy_password = 'absent' From e8ce89f74da85fc40c86ff0d2dc0a80bd3868275 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 23:39:34 +0100 Subject: [PATCH 08/54] use priority instead of pin --- manifests/params.pp | 2 +- manifests/repo/nodesource/apt.pp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/manifests/params.pp b/manifests/params.pp index 971cdbaa..df870460 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -5,7 +5,7 @@ $nodejs_package_ensure = 'installed' $repo_ensure = 'present' $repo_pin = undef - $repo_priority = 'absent' + $repo_priority = '0' $repo_proxy = 'absent' $repo_proxy_password = 'absent' $repo_proxy_username = 'absent' diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index 3ff3fc63..308f2ad5 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -1,7 +1,7 @@ # PRIVATE CLASS: Do not use directly. class nodejs::repo::nodesource::apt { $ensure = $nodejs::repo::nodesource::ensure - $pin = $nodejs::repo::nodesource::pin + $priority = $nodejs::repo::nodesource::priority $url_suffix = $nodejs::repo::nodesource::url_suffix include apt @@ -25,7 +25,7 @@ apt::pin { 'nodesource': origin => 'deb.nodesource.com', - priority => $pin, + priority => $priority, } Apt::Source['nodesource'] -> Package<| tag == 'nodesource_repo' |> From 6f303432f1a4b9b4c9e9a4a823632befb8cf0d36 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 23:47:55 +0100 Subject: [PATCH 09/54] location in deb822 is an array --- spec/classes/nodejs_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/classes/nodejs_spec.rb b/spec/classes/nodejs_spec.rb index f63b30db..8d150a53 100644 --- a/spec/classes/nodejs_spec.rb +++ b/spec/classes/nodejs_spec.rb @@ -110,7 +110,7 @@ end it 'the repo apt::source resource should contain location = https://deb.nodesource.com/node_9.x' do - is_expected.to contain_apt__source('nodesource').with('location' => 'https://deb.nodesource.com/node_9.x') + is_expected.to contain_apt__source('nodesource').with('location' => ['https://deb.nodesource.com/node_9.x']) end end From 1d1afd068ca4aca8ce38180cb033056ea4e24bcb Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Thu, 15 Jan 2026 23:53:11 +0100 Subject: [PATCH 10/54] use priority instead of pin --- spec/classes/nodejs_spec.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/spec/classes/nodejs_spec.rb b/spec/classes/nodejs_spec.rb index 8d150a53..f503a513 100644 --- a/spec/classes/nodejs_spec.rb +++ b/spec/classes/nodejs_spec.rb @@ -84,23 +84,23 @@ end end - context 'and repo_pin set to 10' do + context 'and repo_priority set to 10' do let :params do - default_params.merge!(repo_pin: '10') + default_params.merge!(repo_priority: '10') end - it 'the repo apt::source resource should contain pin = 10' do - is_expected.to contain_apt__source('nodesource').with('pin' => '10') + it 'the repo apt::source resource should contain priority = 10' do + is_expected.to contain_apt__source('nodesource').with('priority' => '10') end end - context 'and repo_pin not set' do + context 'and repo_priority not set' do let :params do - default_params.merge!(repo_pin: :undef) + default_params.merge!(repo_priority: :undef) end - it 'the repo apt::source resource should contain pin = undef' do - is_expected.to contain_apt__source('nodesource').with('pin' => nil) + it 'the repo apt::source resource should contain priority = undef' do + is_expected.to contain_apt__source('nodesource').with('priority' => nil) end end From e51e61afa81a101d3f7b8c490a200ec92bb544ac Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 00:02:16 +0100 Subject: [PATCH 11/54] check priority in apt::pin ressource --- spec/classes/nodejs_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/classes/nodejs_spec.rb b/spec/classes/nodejs_spec.rb index f503a513..67586ff0 100644 --- a/spec/classes/nodejs_spec.rb +++ b/spec/classes/nodejs_spec.rb @@ -89,8 +89,8 @@ default_params.merge!(repo_priority: '10') end - it 'the repo apt::source resource should contain priority = 10' do - is_expected.to contain_apt__source('nodesource').with('priority' => '10') + it 'the repo apt::pin resource should contain priority = 10' do + is_expected.to contain_apt__pin('nodesource').with('priority' => '10') end end From b85f265ca7c120913393849023a00a401ca8a33b Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 00:31:29 +0100 Subject: [PATCH 12/54] use repo_priority, repo_pin is deprecated --- README.md | 2 +- manifests/init.pp | 1 - manifests/params.pp | 3 +-- manifests/repo/nodesource.pp | 1 - spec/acceptance/class_spec.rb | 6 +++--- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 12c78321..bed96047 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ class { 'nodejs': ### Forcing the installation of NodeSource packages over native packages When the native package version and NodeSource version are the same, you may -need to use `repo_pin` or `repo_priority` (depending on your operating system). +need to use `repo_priority` (depending on your operating system). This ensures that the version in the NodeSource repository takes precedence when Puppet invokes Apt/Yum. diff --git a/manifests/init.pp b/manifests/init.pp index 33575279..2fbb6a5d 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -16,7 +16,6 @@ Optional[Hash] $npmrc_config = $nodejs::params::npmrc_config, $repo_class = $nodejs::params::repo_class, $repo_ensure = $nodejs::params::repo_ensure, - $repo_pin = $nodejs::params::repo_pin, $repo_priority = $nodejs::params::repo_priority, $repo_proxy = $nodejs::params::repo_proxy, $repo_proxy_password = $nodejs::params::repo_proxy_password, diff --git a/manifests/params.pp b/manifests/params.pp index df870460..12314451 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -4,8 +4,7 @@ $nodejs_debug_package_ensure = 'absent' $nodejs_package_ensure = 'installed' $repo_ensure = 'present' - $repo_pin = undef - $repo_priority = '0' + $repo_priority = '1' $repo_proxy = 'absent' $repo_proxy_password = 'absent' $repo_proxy_username = 'absent' diff --git a/manifests/repo/nodesource.pp b/manifests/repo/nodesource.pp index 3bf7c306..b62d41d4 100644 --- a/manifests/repo/nodesource.pp +++ b/manifests/repo/nodesource.pp @@ -1,7 +1,6 @@ # PRIVATE CLASS: Do not use directly class nodejs::repo::nodesource { $ensure = $nodejs::repo_ensure - $pin = $nodejs::repo_pin $priority = $nodejs::repo_priority $proxy = $nodejs::repo_proxy $proxy_password = $nodejs::repo_proxy_password diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 818f15c5..c2d5c446 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -42,11 +42,11 @@ def nodesource_unsupported(nodejs_version) # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version # as Debians versions *can* be newer - repo_pin = + repo_priority = if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) '1000' else - 'undef' + '1' end it_behaves_like 'an idempotent resource' do @@ -54,7 +54,7 @@ def nodesource_unsupported(nodejs_version) <<-PUPPET class { 'nodejs': repo_version => '#{nodejs_version}', - repo_pin => #{repo_pin}, + repo_priority => #{repo_priority}, } PUPPET end From 95abe9f34e6832939c4c6ccdb7248285a1be053c Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 00:40:38 +0100 Subject: [PATCH 13/54] force high prio for checks --- spec/classes/nodejs_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/classes/nodejs_spec.rb b/spec/classes/nodejs_spec.rb index 67586ff0..e96bf5c0 100644 --- a/spec/classes/nodejs_spec.rb +++ b/spec/classes/nodejs_spec.rb @@ -84,13 +84,13 @@ end end - context 'and repo_priority set to 10' do + context 'and repo_priority set to 990' do let :params do - default_params.merge!(repo_priority: '10') + default_params.merge!(repo_priority: '990') end - it 'the repo apt::pin resource should contain priority = 10' do - is_expected.to contain_apt__pin('nodesource').with('priority' => '10') + it 'the repo apt::pin resource should contain priority = 990' do + is_expected.to contain_apt__pin('nodesource').with('priority' => '990') end end From aea9912a47a939fbb7001d7e50b9f5464b6d2775 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 00:49:57 +0100 Subject: [PATCH 14/54] force nodesource version --- spec/acceptance/class_spec.rb | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index c2d5c446..43a2b21f 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -40,14 +40,8 @@ def nodesource_unsupported(nodejs_version) include_examples 'cleanup' - # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version - # as Debians versions *can* be newer - repo_priority = - if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) - '1000' - else - '1' - end + # Force nodesource version + repo_priority = '1000' it_behaves_like 'an idempotent resource' do let(:manifest) do From a3536b512f5acfe831c2ae0560cac1303871682c Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 10:31:26 +0100 Subject: [PATCH 15/54] Revert "force nodesource version" This reverts commit aea9912a47a939fbb7001d7e50b9f5464b6d2775. --- spec/acceptance/class_spec.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 43a2b21f..c2d5c446 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -40,8 +40,14 @@ def nodesource_unsupported(nodejs_version) include_examples 'cleanup' - # Force nodesource version - repo_priority = '1000' + # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version + # as Debians versions *can* be newer + repo_priority = + if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) + '1000' + else + '1' + end it_behaves_like 'an idempotent resource' do let(:manifest) do From 3f8367d5e512f9b816a08cef756d8623b2c23e27 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 10:46:43 +0100 Subject: [PATCH 16/54] install source too --- manifests/repo/nodesource/apt.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index 308f2ad5..7bd7a39f 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -19,7 +19,7 @@ keyring => '/usr/share/keyrings/nodesource-repo.gpg.key.asc', release => ['nodistro',], repos => ['main',], - types => ['deb',], + types => ['deb','deb-src',], require => Apt::Keyring['nodesource'], } From 125f49a3201176c9de93c2285daf0bf5fa697565 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 10:49:42 +0100 Subject: [PATCH 17/54] correct check for deb13 (include nodejs 20) --- spec/acceptance/class_spec.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index c2d5c446..7c44d0ef 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -43,7 +43,14 @@ def nodesource_unsupported(nodejs_version) # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version # as Debians versions *can* be newer repo_priority = - if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) + if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12].include?(fact('os.release.major')) + '1000' + else + '1' + end + # Debian 13 contains NodeJS 20, when we test 16 and 18, we need to force the nodesource version + # as Debians versions *can* be newer + if %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[13].include?(fact('os.release.major')) '1000' else '1' From 89a0da13faf7127170855666bc9cf66ebf6dc3be Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 10:52:38 +0100 Subject: [PATCH 18/54] wrong indent --- spec/acceptance/class_spec.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 7c44d0ef..d7954b59 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -50,11 +50,11 @@ def nodesource_unsupported(nodejs_version) end # Debian 13 contains NodeJS 20, when we test 16 and 18, we need to force the nodesource version # as Debians versions *can* be newer - if %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[13].include?(fact('os.release.major')) - '1000' - else - '1' - end + if %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[13].include?(fact('os.release.major')) + '1000' + else + '1' + end it_behaves_like 'an idempotent resource' do let(:manifest) do From 5c63f08ebaf35756c6dcb897235855c8cfb9e7c2 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 11:00:52 +0100 Subject: [PATCH 19/54] install npm --- spec/acceptance/class_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index d7954b59..750db60e 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -196,7 +196,9 @@ class { 'nodejs': it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET - class { 'nodejs': } + class { 'nodejs': + npm_package_ensure => installed, + } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ=', From 9c203c45e1fc8a2c05c1cbb4a29bbf928a3a44a1 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 11:10:20 +0100 Subject: [PATCH 20/54] install npm --- spec/acceptance/class_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 750db60e..6dcc9ec9 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -224,7 +224,9 @@ class { 'nodejs': it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET - class { 'nodejs': } + class { 'nodejs': + npm_package_ensure => installed, + } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ', From e4bea3b50d741dd68219f4bce7220785e587a8ef Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 11:44:00 +0100 Subject: [PATCH 21/54] don't purge libnode, breaks the test --- spec/acceptance/class_spec.rb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 6dcc9ec9..b5ba8b87 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -189,15 +189,13 @@ class { 'nodejs': end context 'set global_config_entry secret' do - before(:context) { purge_node } - include_examples 'cleanup' it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET class { 'nodejs': - npm_package_ensure => installed, + npm_package_ensure => installed, } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, @@ -217,15 +215,13 @@ class { 'nodejs': end context 'set global_config_entry secret unquoted' do - before(:context) { purge_node } - include_examples 'cleanup' it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET class { 'nodejs': - npm_package_ensure => installed, + npm_package_ensure => installed, } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, From 0687c583e3730d57385d1a0b16d89eeb76d3a2c7 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 11:49:47 +0100 Subject: [PATCH 22/54] don't clean --- spec/acceptance/class_spec.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index b5ba8b87..69440b1c 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -189,8 +189,6 @@ class { 'nodejs': end context 'set global_config_entry secret' do - include_examples 'cleanup' - it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET @@ -215,8 +213,6 @@ class { 'nodejs': end context 'set global_config_entry secret unquoted' do - include_examples 'cleanup' - it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET From 131cde4ce44cfa8c6e7c4fe28a32a18cad2ddd5d Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 17:44:18 +0100 Subject: [PATCH 23/54] stop idempotent --- spec/acceptance/class_spec.rb | 56 +++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 69440b1c..8a31b587 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -189,19 +189,21 @@ class { 'nodejs': end context 'set global_config_entry secret' do - it_behaves_like 'an idempotent resource' do - let(:manifest) do - <<-PUPPET - class { 'nodejs': - npm_package_ensure => installed, - } - nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': - ensure => present, - value => 'cGFzc3dvcmQ=', - require => Package[nodejs], - } - PUPPET - end + before(:context) { purge_node } + + include_examples 'cleanup' + + let(:manifest) do + <<-PUPPET + class { 'nodejs': + npm_package_ensure => installed, + } + nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': + ensure => present, + value => 'cGFzc3dvcmQ=', + require => Package[nodejs], + } + PUPPET end describe 'npm config' do @@ -213,19 +215,21 @@ class { 'nodejs': end context 'set global_config_entry secret unquoted' do - it_behaves_like 'an idempotent resource' do - let(:manifest) do - <<-PUPPET - class { 'nodejs': - npm_package_ensure => installed, - } - nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': - ensure => present, - value => 'cGFzc3dvcmQ', - require => Package[nodejs], - } - PUPPET - end + before(:context) { purge_node } + + include_examples 'cleanup' + + let(:manifest) do + <<-PUPPET + class { 'nodejs': + npm_package_ensure => installed, + } + nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': + ensure => present, + value => 'cGFzc3dvcmQ', + require => Package[nodejs], + } + PUPPET end describe 'npm config' do From 139577253bc703555221b356048a4996d88f80cc Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 17:48:32 +0100 Subject: [PATCH 24/54] git rubocop happy --- spec/acceptance/class_spec.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 8a31b587..4ff3ae79 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -191,8 +191,6 @@ class { 'nodejs': context 'set global_config_entry secret' do before(:context) { purge_node } - include_examples 'cleanup' - let(:manifest) do <<-PUPPET class { 'nodejs': @@ -217,8 +215,6 @@ class { 'nodejs': context 'set global_config_entry secret unquoted' do before(:context) { purge_node } - include_examples 'cleanup' - let(:manifest) do <<-PUPPET class { 'nodejs': From 9108160fa73ac30a9551d7766dc8995f35c6ec8e Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Fri, 16 Jan 2026 18:02:42 +0100 Subject: [PATCH 25/54] add debug --- spec/acceptance/class_spec.rb | 52 ++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 4ff3ae79..f3be00f2 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -191,17 +191,21 @@ class { 'nodejs': context 'set global_config_entry secret' do before(:context) { purge_node } - let(:manifest) do - <<-PUPPET - class { 'nodejs': - npm_package_ensure => installed, - } - nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': - ensure => present, - value => 'cGFzc3dvcmQ=', - require => Package[nodejs], - } - PUPPET + include_examples 'cleanup' + + it_behaves_like 'an idempotent resource with debug' do + let(:manifest) do + <<-PUPPET + class { 'nodejs': + npm_package_ensure => installed, + } + nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': + ensure => present, + value => 'cGFzc3dvcmQ=', + require => Package[nodejs], + } + PUPPET + end end describe 'npm config' do @@ -215,17 +219,21 @@ class { 'nodejs': context 'set global_config_entry secret unquoted' do before(:context) { purge_node } - let(:manifest) do - <<-PUPPET - class { 'nodejs': - npm_package_ensure => installed, - } - nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': - ensure => present, - value => 'cGFzc3dvcmQ', - require => Package[nodejs], - } - PUPPET + include_examples 'cleanup' + + it_behaves_like 'an idempotent resource with debug' do + let(:manifest) do + <<-PUPPET + class { 'nodejs': + npm_package_ensure => installed, + } + nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': + ensure => present, + value => 'cGFzc3dvcmQ', + require => Package[nodejs], + } + PUPPET + end end describe 'npm config' do From 48520286429bf664efae5b7e564cf696ced05563 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 20:10:58 +0100 Subject: [PATCH 26/54] reset changes --- spec/acceptance/class_spec.rb | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index f3be00f2..818f15c5 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -42,26 +42,19 @@ def nodesource_unsupported(nodejs_version) # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version # as Debians versions *can* be newer - repo_priority = - if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12].include?(fact('os.release.major')) + repo_pin = + if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) '1000' else - '1' + 'undef' end - # Debian 13 contains NodeJS 20, when we test 16 and 18, we need to force the nodesource version - # as Debians versions *can* be newer - if %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[13].include?(fact('os.release.major')) - '1000' - else - '1' - end it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET class { 'nodejs': repo_version => '#{nodejs_version}', - repo_priority => #{repo_priority}, + repo_pin => #{repo_pin}, } PUPPET end @@ -193,12 +186,10 @@ class { 'nodejs': include_examples 'cleanup' - it_behaves_like 'an idempotent resource with debug' do + it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET - class { 'nodejs': - npm_package_ensure => installed, - } + class { 'nodejs': } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ=', @@ -221,12 +212,10 @@ class { 'nodejs': include_examples 'cleanup' - it_behaves_like 'an idempotent resource with debug' do + it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET - class { 'nodejs': - npm_package_ensure => installed, - } + class { 'nodejs': } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ', From 2163885570673211d5d2e655b56a0f84994c824a Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 20:12:02 +0100 Subject: [PATCH 27/54] reset priorities --- spec/classes/nodejs_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/classes/nodejs_spec.rb b/spec/classes/nodejs_spec.rb index e96bf5c0..67586ff0 100644 --- a/spec/classes/nodejs_spec.rb +++ b/spec/classes/nodejs_spec.rb @@ -84,13 +84,13 @@ end end - context 'and repo_priority set to 990' do + context 'and repo_priority set to 10' do let :params do - default_params.merge!(repo_priority: '990') + default_params.merge!(repo_priority: '10') end - it 'the repo apt::pin resource should contain priority = 990' do - is_expected.to contain_apt__pin('nodesource').with('priority' => '990') + it 'the repo apt::pin resource should contain priority = 10' do + is_expected.to contain_apt__pin('nodesource').with('priority' => '10') end end From 21fc3df28cfcde7690da9da879da2f8941a28892 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 20:19:05 +0100 Subject: [PATCH 28/54] rename repo_pin to repo_priority --- spec/acceptance/class_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 818f15c5..98a2452b 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -42,7 +42,7 @@ def nodesource_unsupported(nodejs_version) # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version # as Debians versions *can* be newer - repo_pin = + repo_priority = if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) '1000' else @@ -54,7 +54,7 @@ def nodesource_unsupported(nodejs_version) <<-PUPPET class { 'nodejs': repo_version => '#{nodejs_version}', - repo_pin => #{repo_pin}, + repo_priority => #{repo_priority}, } PUPPET end From b561c266aeb0be145de3e636a5c53c31e2a9dd2d Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 20:27:00 +0100 Subject: [PATCH 29/54] force npm install and add debug --- spec/acceptance/class_spec.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 98a2452b..343ae453 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -186,10 +186,12 @@ class { 'nodejs': include_examples 'cleanup' - it_behaves_like 'an idempotent resource' do + it_behaves_like 'an idempotent resource with debug' do let(:manifest) do <<-PUPPET - class { 'nodejs': } + class { 'nodejs': + npm_package_ensure => installed, + } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ=', From d9554c2b1e8c7d74796f46a0b0517f5ddeb14a94 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 20:39:52 +0100 Subject: [PATCH 30/54] force npm requirement to check npm --- spec/acceptance/class_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 343ae453..5bf787e6 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -195,7 +195,7 @@ class { 'nodejs': nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ=', - require => Package[nodejs], + require => Package['nodejs','npm',], } PUPPET end @@ -221,7 +221,7 @@ class { 'nodejs': } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ', - require => Package[nodejs], + require => Package['nodejs','npm',], } PUPPET end From 723bb46124c3e3de7970a04d8a43203bf6f0fff0 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 20:46:52 +0100 Subject: [PATCH 31/54] force add libnode-dev --- spec/acceptance/class_spec.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 5bf787e6..d4f5a68e 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -190,6 +190,7 @@ class { 'nodejs': let(:manifest) do <<-PUPPET class { 'nodejs': + nodejs_dev_package_ensure => installed, npm_package_ensure => installed, } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': From 430c3fbbeb2879be070f2340cb1b5ab53f60cd80 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 20:54:43 +0100 Subject: [PATCH 32/54] drop debug, add libnode-dev install --- spec/acceptance/class_spec.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index d4f5a68e..72cca641 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -186,7 +186,7 @@ class { 'nodejs': include_examples 'cleanup' - it_behaves_like 'an idempotent resource with debug' do + it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET class { 'nodejs': @@ -218,7 +218,10 @@ class { 'nodejs': it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET - class { 'nodejs': } + class { 'nodejs': + nodejs_dev_package_ensure => installed, + npm_package_ensure => installed, + } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ', From 6e5efcf7a72e6ec8dd9208e41f632d8b3e549df3 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 21:01:14 +0100 Subject: [PATCH 33/54] Revert "reset priorities" This reverts commit 2163885570673211d5d2e655b56a0f84994c824a. --- spec/classes/nodejs_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/classes/nodejs_spec.rb b/spec/classes/nodejs_spec.rb index 67586ff0..e96bf5c0 100644 --- a/spec/classes/nodejs_spec.rb +++ b/spec/classes/nodejs_spec.rb @@ -84,13 +84,13 @@ end end - context 'and repo_priority set to 10' do + context 'and repo_priority set to 990' do let :params do - default_params.merge!(repo_priority: '10') + default_params.merge!(repo_priority: '990') end - it 'the repo apt::pin resource should contain priority = 10' do - is_expected.to contain_apt__pin('nodesource').with('priority' => '10') + it 'the repo apt::pin resource should contain priority = 990' do + is_expected.to contain_apt__pin('nodesource').with('priority' => '990') end end From 564bdfcb4fae2970e611ae1bee6327027bb32b70 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 21:17:18 +0100 Subject: [PATCH 34/54] allow downgrade --- spec/classes/nodejs_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/classes/nodejs_spec.rb b/spec/classes/nodejs_spec.rb index e96bf5c0..6fe7cae1 100644 --- a/spec/classes/nodejs_spec.rb +++ b/spec/classes/nodejs_spec.rb @@ -84,13 +84,13 @@ end end - context 'and repo_priority set to 990' do + context 'and repo_priority set to 1010' do let :params do - default_params.merge!(repo_priority: '990') + default_params.merge!(repo_priority: '1010') end - it 'the repo apt::pin resource should contain priority = 990' do - is_expected.to contain_apt__pin('nodesource').with('priority' => '990') + it 'the repo apt::pin resource should contain priority = 1010' do + is_expected.to contain_apt__pin('nodesource').with('priority' => '1010') end end From 3fde70b22f0322f87a3dab3cd4edbdfdcc75824f Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 21:17:30 +0100 Subject: [PATCH 35/54] deb13 includes node20 --- spec/acceptance/class_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 72cca641..5df9f18b 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -43,8 +43,10 @@ def nodesource_unsupported(nodejs_version) # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version # as Debians versions *can* be newer repo_priority = - if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) + if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12].include?(fact('os.release.major')) '1000' + elsif %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[13].include?(fact('os.release.major')) + 'undef' else 'undef' end From 38290acfa9f4bd6e3c685af0bf6ff4ee9e2d98ac Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 21:26:23 +0100 Subject: [PATCH 36/54] outsmart rubocop --- spec/acceptance/class_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 5df9f18b..0efde67e 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -44,9 +44,9 @@ def nodesource_unsupported(nodejs_version) # as Debians versions *can* be newer repo_priority = if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12].include?(fact('os.release.major')) - '1000' - elsif %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[13].include?(fact('os.release.major')) - 'undef' + '1010' + elsif fact('os.family') == 'Debian' && %w[13].include?(fact('os.release.major')) && %w[16 18 20].include?(nodejs_version) + '1011' else 'undef' end From 0ea2a615a672cfb4db5be229bc33bdd216ba6872 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 21:33:38 +0100 Subject: [PATCH 37/54] force bigger repo prio --- spec/acceptance/class_spec.rb | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 0efde67e..691eb3d5 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -40,16 +40,7 @@ def nodesource_unsupported(nodejs_version) include_examples 'cleanup' - # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version - # as Debians versions *can* be newer - repo_priority = - if %w[16 18].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12].include?(fact('os.release.major')) - '1010' - elsif fact('os.family') == 'Debian' && %w[13].include?(fact('os.release.major')) && %w[16 18 20].include?(nodejs_version) - '1011' - else - 'undef' - end + repo_priority = '1010' it_behaves_like 'an idempotent resource' do let(:manifest) do From 1012177f29cfcc5edba8f7272871f3e3929cb019 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 21:34:29 +0100 Subject: [PATCH 38/54] use 990, to not get a downgrade --- spec/acceptance/class_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 691eb3d5..c869df73 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -40,7 +40,7 @@ def nodesource_unsupported(nodejs_version) include_examples 'cleanup' - repo_priority = '1010' + repo_priority = '990' it_behaves_like 'an idempotent resource' do let(:manifest) do From 4fb31a57aa5bb2286605e03e36de95ed91b76870 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 21:45:50 +0100 Subject: [PATCH 39/54] define prio only for debizan --- spec/acceptance/class_spec.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index c869df73..3a9cf1ed 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -40,7 +40,12 @@ def nodesource_unsupported(nodejs_version) include_examples 'cleanup' - repo_priority = '990' + repo_priority = + if fact('os.family') == 'Debian' + '990' + else + 'undef' + end it_behaves_like 'an idempotent resource' do let(:manifest) do From 7aa9d0c04bdb717f5ccfb57387c7e35f5d7306a3 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 23:04:50 +0100 Subject: [PATCH 40/54] up repo priority --- manifests/params.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/params.pp b/manifests/params.pp index 12314451..d1ef1689 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -4,7 +4,7 @@ $nodejs_debug_package_ensure = 'absent' $nodejs_package_ensure = 'installed' $repo_ensure = 'present' - $repo_priority = '1' + $repo_priority = '990' $repo_proxy = 'absent' $repo_proxy_password = 'absent' $repo_proxy_username = 'absent' From 6f8c5a5afc19d51dc11e508d685e16eca0e67475 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 23:05:48 +0100 Subject: [PATCH 41/54] upgrade basic specs --- spec/classes/nodejs_spec.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/spec/classes/nodejs_spec.rb b/spec/classes/nodejs_spec.rb index 6fe7cae1..700f98f0 100644 --- a/spec/classes/nodejs_spec.rb +++ b/spec/classes/nodejs_spec.rb @@ -84,13 +84,13 @@ end end - context 'and repo_priority set to 1010' do + context 'and repo_priority set to 10' do let :params do - default_params.merge!(repo_priority: '1010') + default_params.merge!(repo_priority: '10') end - it 'the repo apt::pin resource should contain priority = 1010' do - is_expected.to contain_apt__pin('nodesource').with('priority' => '1010') + it 'the repo apt::source resource should contain pin = 10' do + is_expected.to contain_apt__pin('nodesource').with('priority' => '10') end end @@ -99,8 +99,8 @@ default_params.merge!(repo_priority: :undef) end - it 'the repo apt::source resource should contain priority = undef' do - is_expected.to contain_apt__source('nodesource').with('priority' => nil) + it 'the repo apt::source resource should contain priority = 990' do + is_expected.to contain_apt__pin('nodesource').with('priority' => 990) end end @@ -109,7 +109,7 @@ default_params.merge!(repo_version: '9') end - it 'the repo apt::source resource should contain location = https://deb.nodesource.com/node_9.x' do + it 'the repo apt::source resource should contain location = [https://deb.nodesource.com/node_9.x]' do is_expected.to contain_apt__source('nodesource').with('location' => ['https://deb.nodesource.com/node_9.x']) end end From 54f299c387047b2f4982cad3033aa1dea53aea42 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sat, 17 Jan 2026 23:07:58 +0100 Subject: [PATCH 42/54] pff --- spec/acceptance/class_spec.rb | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 3a9cf1ed..3c35fc9b 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -40,9 +40,11 @@ def nodesource_unsupported(nodejs_version) include_examples 'cleanup' + # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version + # as Debians versions *can* be newer repo_priority = - if fact('os.family') == 'Debian' - '990' + if %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) + '1000' else 'undef' end @@ -187,10 +189,7 @@ class { 'nodejs': it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET - class { 'nodejs': - nodejs_dev_package_ensure => installed, - npm_package_ensure => installed, - } + class { 'nodejs': } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ=', @@ -202,7 +201,7 @@ class { 'nodejs': describe 'npm config' do it 'contains the global_config_entry secret' do - npm_output = shell('cat $(/usr/bin/npm config get globalconfig)') + npm_output = shell('CONF=$(/usr/bin/npm config get globalconfig); echo "$(<$CONF)"') expect(npm_output.stdout).to match '//path.to.registry/:_authToken="cGFzc3dvcmQ="' end end @@ -216,10 +215,7 @@ class { 'nodejs': it_behaves_like 'an idempotent resource' do let(:manifest) do <<-PUPPET - class { 'nodejs': - nodejs_dev_package_ensure => installed, - npm_package_ensure => installed, - } + class { 'nodejs': } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ', @@ -231,8 +227,8 @@ class { 'nodejs': describe 'npm config' do it 'contains the global_config_entry secret' do - npm_output = shell('cat $(/usr/bin/npm config get globalconfig)') - expect(npm_output.stdout).to match '//path.to.registry/:_authToken=cGFzc3dvcmQ' + npm_output = shell('CONF=$(/usr/bin/npm config get globalconfig); echo "$(<$CONF)"') + expect(npm_output.stdout).to match 'x//path.to.registry/:_authToken=cGFzc3dvcmQ' end end end From 3d74ca534e496c69762f96d3ba67b2663dfeac70 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 00:19:30 +0100 Subject: [PATCH 43/54] one more x --- spec/acceptance/class_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 3c35fc9b..bcb8d663 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -228,7 +228,7 @@ class { 'nodejs': } describe 'npm config' do it 'contains the global_config_entry secret' do npm_output = shell('CONF=$(/usr/bin/npm config get globalconfig); echo "$(<$CONF)"') - expect(npm_output.stdout).to match 'x//path.to.registry/:_authToken=cGFzc3dvcmQ' + expect(npm_output.stdout).to match '//path.to.registry/:_authToken=cGFzc3dvcmQ' end end end From f2f865000d78f21ad4a1e05634dcd2322858826d Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 00:42:33 +0100 Subject: [PATCH 44/54] use rtprio version --- spec/acceptance/class_spec.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index bcb8d663..58e6289b 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -133,7 +133,6 @@ class { 'nodejs': %w[ npm - nodejs nodejs-devel ].each do |pkg| describe package(pkg) do @@ -193,7 +192,7 @@ class { 'nodejs': } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ=', - require => Package['nodejs','npm',], + require => Package[nodejs], } PUPPET end @@ -201,7 +200,7 @@ class { 'nodejs': } describe 'npm config' do it 'contains the global_config_entry secret' do - npm_output = shell('CONF=$(/usr/bin/npm config get globalconfig); echo "$(<$CONF)"') + npm_output = shell('cat $(/usr/bin/npm config get globalconfig || echo /dev/null)') expect(npm_output.stdout).to match '//path.to.registry/:_authToken="cGFzc3dvcmQ="' end end @@ -219,7 +218,7 @@ class { 'nodejs': } nodejs::npm::global_config_entry { '//path.to.registry/:_authToken': ensure => present, value => 'cGFzc3dvcmQ', - require => Package['nodejs','npm',], + require => Package[nodejs], } PUPPET end @@ -227,7 +226,7 @@ class { 'nodejs': } describe 'npm config' do it 'contains the global_config_entry secret' do - npm_output = shell('CONF=$(/usr/bin/npm config get globalconfig); echo "$(<$CONF)"') + npm_output = shell('cat $(/usr/bin/npm config get globalconfig || echo /dev/null)') expect(npm_output.stdout).to match '//path.to.registry/:_authToken=cGFzc3dvcmQ' end end From 906f522d5390fa3b6b7c61b483530f6f78625d5e Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 00:56:54 +0100 Subject: [PATCH 45/54] forgot one --- spec/acceptance/class_spec.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 58e6289b..c0a6c720 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -133,6 +133,7 @@ class { 'nodejs': %w[ npm + nodejs nodejs-devel ].each do |pkg| describe package(pkg) do From 5479cbfe19ef6735a7009be08905e5fc7471222e Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 01:20:42 +0100 Subject: [PATCH 46/54] clean pin and keyring --- manifests/repo/nodesource/apt.pp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index 7bd7a39f..9052ea1f 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -1,7 +1,7 @@ # PRIVATE CLASS: Do not use directly. class nodejs::repo::nodesource::apt { $ensure = $nodejs::repo::nodesource::ensure - $priority = $nodejs::repo::nodesource::priority + $priority = $nodejs::repo::nodesource::priority $url_suffix = $nodejs::repo::nodesource::url_suffix include apt @@ -36,5 +36,13 @@ apt::source { 'nodesource': ensure => 'absent', } + apt::pin { 'nodesource': + ensure => 'absent', + } + apt::keyring { 'nodesource': + ensure => 'absent', + dir => '/usr/share/keyrings', + filename => 'nodesource-repo.gpg.key.asc', + } } } From 84ae55f7b81d44766655c45c85aec63573000991 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 01:20:52 +0100 Subject: [PATCH 47/54] priority should be absent for RH based systems --- manifests/params.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/params.pp b/manifests/params.pp index d1ef1689..b8f21389 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -4,7 +4,7 @@ $nodejs_debug_package_ensure = 'absent' $nodejs_package_ensure = 'installed' $repo_ensure = 'present' - $repo_priority = '990' + $repo_priority = ($facts['os']['family'] == 'Debian') ? { true => '990', default => 'absent' } $repo_proxy = 'absent' $repo_proxy_password = 'absent' $repo_proxy_username = 'absent' From d37280bd042103858d7f665bc37160b2e3f19843 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 01:29:15 +0100 Subject: [PATCH 48/54] lower prio for debian version, purge legacy --- spec/acceptance/class_spec.rb | 4 +++- spec/support/acceptance/purge.rb | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index c0a6c720..6bad34b8 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -45,6 +45,8 @@ def nodesource_unsupported(nodejs_version) repo_priority = if %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) '1000' + elsif fact('os.family') == 'Debian' + '1' else 'undef' end @@ -54,7 +56,7 @@ def nodesource_unsupported(nodejs_version) <<-PUPPET class { 'nodejs': repo_version => '#{nodejs_version}', - repo_priority => #{repo_priority}, + repo_priority => '#{repo_priority}', } PUPPET end diff --git a/spec/support/acceptance/purge.rb b/spec/support/acceptance/purge.rb index 271a2a05..e42ba7ad 100644 --- a/spec/support/acceptance/purge.rb +++ b/spec/support/acceptance/purge.rb @@ -3,6 +3,6 @@ def purge_node case fact('osfamily') when 'Debian' - on default, 'apt-get purge -y libnode*', { acceptable_exit_codes: [0, 100] } + on default, 'apt-get purge -y libnode* nodejs-legacy', { acceptable_exit_codes: [0, 100] } end end From 75a04d064355dd52ff4f0b657173240071ee56c4 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 01:36:46 +0100 Subject: [PATCH 49/54] yumrepo needs absent --- spec/acceptance/class_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 6bad34b8..d568b113 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -48,7 +48,7 @@ def nodesource_unsupported(nodejs_version) elsif fact('os.family') == 'Debian' '1' else - 'undef' + 'absent' end it_behaves_like 'an idempotent resource' do From 770d0df6d1a6ff05314412f1c0785007a325758f Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 16:15:59 +0100 Subject: [PATCH 50/54] workaround https://github.com/puppetlabs/puppetlabs-apt/issues/1245 --- manifests/repo/nodesource/apt.pp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index 9052ea1f..a0d7a001 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -44,5 +44,9 @@ dir => '/usr/share/keyrings', filename => 'nodesource-repo.gpg.key.asc', } + file { '/etc/apt/sources.list.d/nodesource.sources': + ensure => 'absent', + notify => Class['Apt::Update'], + } } } From 57d1277bd936557968ddf5e4a1a6b14b88d2b465 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 16:16:26 +0100 Subject: [PATCH 51/54] no need for deb-src --- manifests/repo/nodesource/apt.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/repo/nodesource/apt.pp b/manifests/repo/nodesource/apt.pp index a0d7a001..c8c44eec 100644 --- a/manifests/repo/nodesource/apt.pp +++ b/manifests/repo/nodesource/apt.pp @@ -19,7 +19,7 @@ keyring => '/usr/share/keyrings/nodesource-repo.gpg.key.asc', release => ['nodistro',], repos => ['main',], - types => ['deb','deb-src',], + types => ['deb',], require => Apt::Keyring['nodesource'], } From 8fc621380edd471fad588afc8d660b906358cbe4 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 16:17:12 +0100 Subject: [PATCH 52/54] be consistent with nodejs-debug --- manifests/install.pp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index 993bb817..4ac5d09b 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -20,7 +20,7 @@ Package { provider => $nodejs::package_provider } # nodejs - if $nodejs::manage_nodejs_package { + if $nodejs::manage_nodejs_package and $nodejs::nodejs_package_name { package { $nodejs::nodejs_package_name: ensure => $nodejs::nodejs_package_ensure, tag => 'nodesource_repo', @@ -36,7 +36,7 @@ } # nodejs-debug - if $nodejs::nodejs_debug_package_name { + if $nodejs::manage_nodejs_package and $nodejs::nodejs_debug_package_name { package { $nodejs::nodejs_debug_package_name: ensure => $nodejs::nodejs_debug_package_ensure, tag => 'nodesource_repo', From acb8dc00197657aba408add7adf466adbfb9afe4 Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 16:17:59 +0100 Subject: [PATCH 53/54] go back to head branch file --- spec/support/acceptance/purge.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/support/acceptance/purge.rb b/spec/support/acceptance/purge.rb index e42ba7ad..271a2a05 100644 --- a/spec/support/acceptance/purge.rb +++ b/spec/support/acceptance/purge.rb @@ -3,6 +3,6 @@ def purge_node case fact('osfamily') when 'Debian' - on default, 'apt-get purge -y libnode* nodejs-legacy', { acceptable_exit_codes: [0, 100] } + on default, 'apt-get purge -y libnode*', { acceptable_exit_codes: [0, 100] } end end From 85e2ba6882a66a759ac7e024f9a6c4c01bf95c7d Mon Sep 17 00:00:00 2001 From: Arnaud Launay Date: Sun, 18 Jan 2026 16:30:13 +0100 Subject: [PATCH 54/54] force priority to be 990 on debian --- spec/acceptance/class_spec.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index d568b113..96f4878e 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -43,10 +43,8 @@ def nodesource_unsupported(nodejs_version) # Debian 12 contains NodeJS 18, when we test 16 and 18, we need to force the nodesource version # as Debians versions *can* be newer repo_priority = - if %w[16 18 20].include?(nodejs_version) && fact('os.family') == 'Debian' && %w[12 13].include?(fact('os.release.major')) - '1000' - elsif fact('os.family') == 'Debian' - '1' + if fact('os.family') == 'Debian' + '990' else 'absent' end @@ -175,6 +173,7 @@ class { 'nodejs': %w[ libnode-dev + nodejs npm ].each do |pkg| describe package(pkg) do