This is an automated email from the ASF dual-hosted git repository. sebb pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/whimsy.git
The following commit(s) were added to refs/heads/master by this push: new 240a1205 Check changes against members.md 240a1205 is described below commit 240a12052abf4e77796707abe9d7e89c015ba274 Author: Sebb <s...@apache.org> AuthorDate: Sun Mar 23 14:33:34 2025 +0000 Check changes against members.md --- www/roster/parse_members.rb | 37 +++++++++++++++++++++++++++++++++++++ www/roster/public_member_info.rb | 23 +++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/www/roster/parse_members.rb b/www/roster/parse_members.rb new file mode 100644 index 00000000..0f4700b5 --- /dev/null +++ b/www/roster/parse_members.rb @@ -0,0 +1,37 @@ +#!/usr/bin/env ruby + +# Parse foundation/members.md from main website + +require 'net/http' + +URL = 'https://raw.githubusercontent.com/apache/www-site/refs/heads/main/content/foundation/members.md' + +def parse_section(section, status) + section.each do |line| + if line =~ %r{^\|\s+(\S+)\s+\|} + uid = $1 + unless %w{Id ?}.include? uid + yield [status, uid] + end + end + end +end + +def parse_members(&block) + response = Net::HTTP.get_response(URI(URL)) + response.value() # Raises error if not OK + content = response.body + + content.split("\n").slice_before(/^##/).each do |slice| + title = slice.first + if title =~ %r{^## (\S+) Members} + parse_section(slice, $1, &block) unless $1 == 'Deceased' + end + end +end + +if __FILE__ == $0 + parse_members do |status, id| + p [status, id] + end +end diff --git a/www/roster/public_member_info.rb b/www/roster/public_member_info.rb index 635a998a..ce637718 100644 --- a/www/roster/public_member_info.rb +++ b/www/roster/public_member_info.rb @@ -74,4 +74,27 @@ if check_now? info[:members].each do |id| Wunderbar.warn "member: unknown uid '#{id}'" unless uids.include?(id) end + + require_relative 'parse_members' + begin + parse_members do |status, id| # status = ASF or Emeritus + actual = info[:members].include?(id) ? 'active' : info[:ex_members][id] ? info[:ex_members][id].split().first : 'unknown' + if status == 'ASF' + unless actual == 'active' + Wunderbar.warn "members.md shows #{id} as active, but is #{actual}" + end + elsif status == 'Emeritus' + unless actual == 'Emeritus' + Wunderbar.warn "members.md shows #{id} as Emeritus, but is #{actual}" + end + else + Wunderbar.error "Unexpected status #{status}" + exit(1) + end + end + rescue StandardError => e + Wunderbar.warn e.inspect + end + end +