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
+

Reply via email to