Skip to content

Commit fd49b7a

Browse files
committed
Add bump_mods.rb script to upgrade modules
1 parent edda7d8 commit fd49b7a

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

dev-resources/bump_mods.rb

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# frozen_string_literal: true
2+
3+
# Bump the module versions in the Puppetfile to the latest version
4+
# published on https://forge.puppet.com
5+
require 'open-uri'
6+
require 'pry'
7+
require 'rss'
8+
9+
def parse_puppetfile_get_mod_versions
10+
module_re = /^mod 'puppetlabs-([a-z_\-]+)', *'([0-9.]+)'$/i
11+
versions = {}
12+
File.foreach('Puppetfile') do |line|
13+
match = module_re.match(line)
14+
if match
15+
versions[match[1].strip] = match[2].strip
16+
end
17+
end
18+
versions
19+
end
20+
21+
def latest_version_for_module(mod)
22+
url = "https://forge.puppet.com/modules/puppetlabs/#{mod}/rss"
23+
# rubocop:disable Security/Open
24+
feed = RSS::Parser.parse(URI.open(url))
25+
# rubocop:enable Security/Open
26+
27+
feed.items&.first&.description
28+
end
29+
30+
# get modules to update
31+
versions_old = parse_puppetfile_get_mod_versions
32+
versions_new = {}
33+
34+
versions_old.each do |mod, ver|
35+
ver_new = latest_version_for_module(mod)
36+
37+
if !ver_new.nil? && (ver != ver_new)
38+
versions_new[mod] = ver_new
39+
end
40+
end
41+
42+
def puppetfile_set_mod_versions!(versions_new)
43+
module_re = /^mod 'puppetlabs-([a-z_\-]+)', *'([0-9.]+)'$/i
44+
lines = File.open('Puppetfile').readlines
45+
46+
# update lines
47+
lines.each do |line|
48+
next unless line.start_with?("mod 'puppetlabs")
49+
match = module_re.match(line)
50+
next unless match
51+
mod = match[1].strip
52+
ver_old = match[2].strip
53+
ver_new = versions_new[mod]
54+
unless ver_new.nil?
55+
line.gsub!(/'([0-9.]+)'/, "'#{ver_new}'")
56+
puts "Updated #{mod} from #{ver_old} to #{ver_new}"
57+
end
58+
end
59+
60+
# update Puppetfile
61+
File.open('Puppetfile', 'w').puts(lines.join)
62+
end
63+
64+
# Update the Puppetfile with the new versions
65+
puppetfile_set_mod_versions!(versions_new)

0 commit comments

Comments
 (0)