[DOC] Extract tool/update-NEWS-gemlist.rb
This commit is contained in:
parent
94d6d6d93f
commit
3ecffae8e8
Notes:
git
2023-01-13 13:15:20 +00:00
30
.github/workflows/bundled_gems.yml
vendored
30
.github/workflows/bundled_gems.yml
vendored
@ -56,35 +56,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Maintain updated gems list in NEWS
|
- name: Maintain updated gems list in NEWS
|
||||||
run: |
|
run: |
|
||||||
#!ruby
|
ruby tool/update-NEWS-gemlist.rb bundled
|
||||||
require 'json'
|
|
||||||
news = File.read("NEWS.md")
|
|
||||||
prev = news[/since the \*+(\d+\.\d+\.\d+)\*+/, 1]
|
|
||||||
prevs = [prev, prev.sub(/\.\d+\z/, '')]
|
|
||||||
%W[bundled].each do |type|
|
|
||||||
last = JSON.parse(File.read("#{type}_gems.json"))['gems'].filter_map do |g|
|
|
||||||
v = g['versions'].values_at(*prevs).compact.first
|
|
||||||
g = g['gem']
|
|
||||||
g = 'RubyGems' if g == 'rubygems'
|
|
||||||
[g, v] if v
|
|
||||||
end.to_h
|
|
||||||
changed = File.foreach("gems/#{type}_gems").filter_map do |l|
|
|
||||||
next if l.start_with?("#")
|
|
||||||
g, v = l.split(" ", 3)
|
|
||||||
[g, v] unless last[g] == v
|
|
||||||
end
|
|
||||||
changed, added = changed.partition {|g, _| last[g]}
|
|
||||||
news.sub!(/^\*( +)The following #{type} gems? are updated\.\n+\K(?: \1\*( +).*\n)*/) do
|
|
||||||
mark = "#{$1} *#{$2}"
|
|
||||||
changed.map {|g, v|"#{mark}#{g} #{v}\n"}.join("")
|
|
||||||
end or next
|
|
||||||
news.sub!(/^\*( +)The following default gems are now bundled gems\.\n+\K(?: \1\*( +).*\n)*/) do
|
|
||||||
mark = "#{$1} *#{$2}"
|
|
||||||
added.map {|g, v|"#{mark}#{g} #{v}\n"}.join("")
|
|
||||||
end or next unless added.empty?
|
|
||||||
File.write("NEWS.md", news)
|
|
||||||
end
|
|
||||||
shell: ruby {0}
|
|
||||||
|
|
||||||
- name: Check diffs
|
- name: Check diffs
|
||||||
id: diff
|
id: diff
|
||||||
|
25
.github/workflows/check_misc.yml
vendored
25
.github/workflows/check_misc.yml
vendored
@ -66,30 +66,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Maintain updated gems list in NEWS
|
- name: Maintain updated gems list in NEWS
|
||||||
run: |
|
run: |
|
||||||
#!ruby
|
ruby tool/update-NEWS-gemlist.rb default
|
||||||
require 'json'
|
|
||||||
news = File.read("NEWS.md")
|
|
||||||
prev = news[/since the \*+(\d+\.\d+\.\d+)\*+/, 1]
|
|
||||||
prevs = [prev, prev.sub(/\.\d+\z/, '')]
|
|
||||||
%W[default].each do |type|
|
|
||||||
last = JSON.parse(File.read("#{type}_gems.json"))['gems'].filter_map do |g|
|
|
||||||
v = g['versions'].values_at(*prevs).compact.first
|
|
||||||
g = g['gem']
|
|
||||||
g = 'RubyGems' if g == 'rubygems'
|
|
||||||
[g, v] if v
|
|
||||||
end.to_h
|
|
||||||
changed = File.foreach("gems/#{type}_gems").filter_map do |l|
|
|
||||||
next if l.start_with?("#")
|
|
||||||
g, v = l.split(" ", 3)
|
|
||||||
[g, v] unless last[g] == v
|
|
||||||
end
|
|
||||||
news.sub!(/^\*( +)The following #{type} gems? are updated\.\n+\K(?: \1\* .*\n)*/) do
|
|
||||||
mark = "#{$1} * "
|
|
||||||
changed.map {|g, v|"#{mark}#{g} #{v}\n"}.join("")
|
|
||||||
end or next
|
|
||||||
File.write("NEWS.md", news)
|
|
||||||
end
|
|
||||||
shell: ruby {0}
|
|
||||||
|
|
||||||
- name: Check diffs
|
- name: Check diffs
|
||||||
id: diff
|
id: diff
|
||||||
|
34
tool/update-NEWS-gemlist.rb
Executable file
34
tool/update-NEWS-gemlist.rb
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/ruby
|
||||||
|
require 'json'
|
||||||
|
news = File.read("NEWS.md")
|
||||||
|
prev = news[/since the \*+(\d+\.\d+\.\d+)\*+/, 1]
|
||||||
|
prevs = [prev, prev.sub(/\.\d+\z/, '')]
|
||||||
|
|
||||||
|
update = ->(list, type, desc = "updated") do
|
||||||
|
news.sub!(/^\*( +)The following #{type} gems? (?:are|is) #{desc}\.\n(\n*)\K(?: \1\*( +).*\n)*\n*/) do
|
||||||
|
mark = "#{$1&.<< " "}*#{$3 || ' '}"
|
||||||
|
list.map {|g, v|"#{mark}#{g} #{v}\n"}.join("") + $2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
ARGV.each do |type|
|
||||||
|
last = JSON.parse(File.read("#{type}_gems.json"))['gems'].filter_map do |g|
|
||||||
|
v = g['versions'].values_at(*prevs).compact.first
|
||||||
|
g = g['gem']
|
||||||
|
g = 'RubyGems' if g == 'rubygems'
|
||||||
|
[g, v] if v
|
||||||
|
end.to_h
|
||||||
|
changed = File.foreach("gems/#{type}_gems").filter_map do |l|
|
||||||
|
next if l.start_with?("#")
|
||||||
|
g, v = l.split(" ", 3)
|
||||||
|
next unless v
|
||||||
|
[g, v] unless last[g] == v
|
||||||
|
end
|
||||||
|
if type == 'bundled'
|
||||||
|
changed, added = changed.partition {|g, _| last[g]}
|
||||||
|
end
|
||||||
|
update[changed, type] or next
|
||||||
|
if added and !added.empty?
|
||||||
|
update[added, 'default', 'now bundled gems'] or next
|
||||||
|
end
|
||||||
|
File.write("NEWS.md", news)
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user