| #!/usr/bin/env ruby |
| PAGETITLE = "Projects which graduated from the incubator" # Wvisible:incubator |
| |
| $LOAD_PATH.unshift '/srv/whimsy/lib' |
| require 'whimsy/asf' |
| require 'wunderbar' |
| require 'wunderbar/bootstrap' |
| |
| parents = { |
| "ant" => "Jakarta", |
| "attic" => "N/A", |
| "community development" => "N/A", |
| "db" => "Jakarta", |
| "incubator" => "N/A", |
| "labs" => "N/A", |
| "logging services" => "Jakarta", |
| "public relations" => "N/A", |
| } |
| |
| source = '/srv/whimsy/www/board/minutes' |
| index = File.read("#{source}/index.html") |
| |
| csection = index[/<h2 id="committee">.*?<h2/m] |
| creports = csection.scan(/<a .*?<\/a>/) |
| retired = csection.scan(/<del>.*?<\/del>/m) |
| |
| creports.sort_by! {|committee| committee[/>(.*?)</, 1].downcase} |
| zest = creports.find {|committee| committee =~ />Zest</} |
| |
| |
| _html do |
| _body? do |
| _whimsy_body( |
| title: PAGETITLE, |
| related: { |
| "/committers/tools" => "Whimsy Tool Listing", |
| "https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png" => "Incubator Logo, to show that graphics can appear", |
| "https://community.apache.org/" => "Get Community Help", |
| "https://github.com/apache/whimsy/blob/master/www#{ENV['SCRIPT_NAME']}" => "See This Source Code" |
| }, |
| helpblock: -> { |
| _p! do |
| _ 'This script cross-checks Committee Reports from ' |
| _a 'Board Minutes', |
| href: 'https://whimsy.apache.org/board/minutes/' |
| _ ', ' |
| _a 'committee-info.txt', |
| href: 'https://svn.apache.org/repos/private/committers/board/committee-info.txt' |
| _ ', and ' |
| _a 'podlings.xml', |
| href: 'https://svn.apache.org/repos/asf/incubator/public/trunk/content/podlings.xml' |
| _ '.' |
| _p do |
| _ul do |
| _li 'Committee: links to Whimsy summary of board minutes' |
| _li 'Established: date is from ASF meeting minutes; links to the published minutes if found' |
| _li 'Parent PMC; links to the Incubator status page if the PMC represents a graduated podling' |
| _li 'Active?: Listed as an active PMC in committee-info.txt' |
| end |
| end |
| end |
| } |
| ) do |
| |
| ASF.init_ldap |
| |
| unreported = ASF::Committee.pmcs.map(&:display_name).map(&:downcase) |
| incubated = 0 |
| |
| # |
| ### Podling mentors vs IPMC |
| # |
| _whimsy_panel_table( |
| title: "Establish Resolutions from Projects that have reported", |
| ) do |
| _table.table.table_hover.table_striped do |
| _thead_ do |
| _tr do |
| _th 'Committee' |
| _th 'Established' |
| _th 'Parent PMC' |
| _th 'Active?' |
| end |
| end |
| _tbody do |
| creports.map do |committee| |
| name = committee[/>(.*?)</, 1] |
| href = committee[/href="(.*?)"/, 1].untaint |
| href = 'Polygene.html' if href == 'Zest.html' |
| page = File.read("#{source}/#{href}"). |
| sub(/<footer.*<\/footer>/m, '') |
| |
| next if name == 'Zest' # renamed to Polygene |
| next if name == 'Metro' # rejected |
| |
| active = unreported.delete(name.downcase) |
| |
| graduated = false |
| |
| parent = nil |
| |
| establish = page.split('<h2').map { |report| |
| title = report[/<h3.*?<\/h3>/] |
| next unless title and |
| %w(establish create creation).any? {|word| |
| title.downcase.include? word |
| } |
| |
| graduated ||= report.downcase.include? 'incubator' |
| |
| discharge = report.split(/\n\s*\n/).grep(/discharged/).last |
| if discharge |
| parent = discharge[/(\w+)\s*(Project|PMC)/, 1] |
| end |
| |
| report[/id="(.*?)"/, 1] |
| }.compact.first |
| |
| podling = ASF::Podling.find(name.downcase) |
| incubated += 1 if graduated or podling |
| |
| _tr_ do |
| _td do |
| _a name, href: "../board/minutes/#{href}" |
| end |
| _td do |
| _a establish, href: "../board/minutes/#{href}##{establish}" |
| end |
| _td do |
| if podling |
| _a 'Incubator', href: |
| "https://incubator.apache.org/projects/#{podling.resource}.html" |
| else |
| _span parent || parents[name.downcase] |
| end |
| end |
| _td !!active |
| end |
| end |
| end |
| end |
| end |
| |
| _whimsy_panel_table( |
| title: "Projects that don't have posted reports" |
| ) do |
| _table.table.table_hover.table_striped do |
| _thead_ do |
| _tr do |
| _th 'Committee' |
| end |
| end |
| _tbody do |
| unreported.each do |committee| |
| _tr do |
| _td do |
| _a committee, href: "../roster/committee/" + |
| ASF::Committee.find(committee).name |
| end |
| end |
| end |
| end |
| end |
| end unless unreported.empty? |
| |
| _whimsy_panel_table( |
| title: "Projects summary" |
| ) do |
| _table.table.table_hover.table_striped id: 'summary' do |
| _tbody do |
| _tr do |
| _td creports.length |
| _td "Committees that have reported" |
| end |
| |
| _tr do |
| _td ASF::Committee.pmcs.length |
| _td "Active Committees" |
| end |
| |
| _tr do |
| _td retired.length |
| _td "Committees that have retired" |
| end |
| |
| _tr do |
| _td incubated |
| _td "Graduated from the incubator" |
| end |
| end |
| end |
| end |
| |
| end |
| end |
| end |