You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by cu...@apache.org on 2020/02/02 02:02:39 UTC

[whimsy] branch master updated: Include detailed timeline with specific links

This is an automated email from the ASF dual-hosted git repository.

curcuru 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 c7b2f68  Include detailed timeline with specific links
c7b2f68 is described below

commit c7b2f68a7159848b172f1dbe2803fe70acd16bfe
Author: Shane Curcuru <as...@shanecurcuru.org>
AuthorDate: Sat Feb 1 21:02:23 2020 -0500

    Include detailed timeline with specific links
---
 www/members/meeting-util.rb |   3 +-
 www/members/meeting.cgi     | 112 +++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 108 insertions(+), 7 deletions(-)

diff --git a/www/members/meeting-util.rb b/www/members/meeting-util.rb
index 40ada2f..cc87490 100644
--- a/www/members/meeting-util.rb
+++ b/www/members/meeting-util.rb
@@ -5,13 +5,14 @@ require 'json'
 class MeetingUtil
   RECORDS = 'https://svn.apache.org/repos/private/foundation/Meetings'
   MEETING_FILES = { # Filename in meeting dir, or pathname to another tool
-    'README.txt' => 'README For Meeting Process',
+    'README.txt' => 'README For Meeting Process And Roll Call',
     'nomination_of_board.txt' => 'How To Nominate Someone For Board',
     'nomination_of_members.txt' => 'How To Nominate A New Member',
     '/members/proxy.cgi' => 'How To Submit A Proxy/Check Your Proxies',
     'https://www.apache.org/foundation/governance/meetings' => 'How Voting Via Email Works',
     'agenda.txt' => 'Official Meeting Agenda',
     'board_ballot.txt' => 'Official Board Candidate Ballots',
+    'nominated-members.txt' => 'Official New Member Nominees/Seconds',
     'proxies' => 'Official List Of Meeting Proxies',
     'record' => 'Official List Of Voting Members',
     'attend' => 'Official List Of Meeting Attendees (afterwards)',
diff --git a/www/members/meeting.cgi b/www/members/meeting.cgi
index 281c81a..48d8d70 100755
--- a/www/members/meeting.cgi
+++ b/www/members/meeting.cgi
@@ -8,6 +8,12 @@ require 'date'
 require 'json'
 require 'wunderbar/jquery/stupidtable'
 require_relative 'meeting-util'
+FOUNDATION_SVN = 'https://svn.apache.org/repos/private/foundation/'
+
+# Utility function for links, Note: cheezy path detection within MEETING_FILES
+def emit_link(cur_mtg_dir, f, desc)
+  _a desc, href: f.include?('/') ? f : File.join(cur_mtg_dir, f)
+end
 
 # Output action links for meeting records, depending on if current or past
 def emit_meeting(cur_mtg_dir, meeting, active)
@@ -39,8 +45,8 @@ def emit_meeting(cur_mtg_dir, meeting, active)
     _p active ? "Live links to the upcoming meeting records/how-tos below." : "These are historical links to the past meeting's record."
     _ul do
       MeetingUtil::MEETING_FILES.each do |f, desc|
-        _li do # Note: cheezy path detection within MEETING_FILES
-          _a desc, href: f.include?('/') ? f : File.join(cur_mtg_dir, f)
+        _li do
+          emit_link(cur_mtg_dir, f, desc)
         end
       end
     end
@@ -55,7 +61,14 @@ _html do
     meeting = File.basename(cur_mtg_dir)
     mtg_date = Date.parse(meeting)
     today = Date.today.strftime('%Y%m%d')
-    
+    begin
+      ics = IO.read(File.join(cur_mtg_dir, "ASF-members-#{mtg_date.strftime('%Y')}.ics"))
+    rescue StandardError => e
+      # Ensure we can't break rest of script
+      puts "ERROR: #{e}"
+      return 0, 0, 0, 0
+    end
+
     ROSTER = "/roster/committer"
     _whimsy_body(
       title: PAGETITLE,
@@ -87,7 +100,7 @@ _html do
         else
           _p do
             _ "The next Member's Meeting will start on #{mtg_date.strftime('%A, %d %B %Y')}, as an online meeting on IRC, and will finish up two days later after voting via email is held."
-            _ 'For more details, read on below, or see the links to the right. '
+            _ 'Please read below for a Timeline of Meeting activities and links to how you can take action, or see additional links to the right. '
             _span.text_warning 'REMINDER: '
             _ 'Nominations for the board or new members close 10 days before the meeting starts; no new names may be added after that date.'
           end
@@ -98,7 +111,6 @@ _html do
       attendance = JSON.parse(IO.read(File.join(MEETINGS, 'attendance.json')))
       user = ASF::Person.find($USER)
       _whimsy_panel("#{user.public_name} Details For Meeting #{meeting}", style: 'panel-primary') do
-        # TODO: remind member to check their committer.:email_forward address is correct (where ballots are sent)
         _p do
           if help
             _p help
@@ -116,10 +128,98 @@ _html do
         _p do
           _span.text_warning 'REMINDER: '
           _ "Ballots are sent to your official email address as found in members.txt, please double-check it is correct!"
-          _a 'See members.txt', href: 'https://svn.apache.org/repos/private/foundation/members.txt'
+          _a 'See members.txt', href: "#{FOUNDATION_SVN}members.txt"
+        end
+      end
+
+      _whimsy_panel("Timeline: Nomination Period (now until TEN DAYS before the meeting)", style: 'panel-default') do
+        _p do
+          _ 'Before the meeting, any Member may nominate people either for the Board, or as a New Member Candidate.  Much of this discussion happens on members@ mailing list.  Remember, all new nominated names must be checked into SVN 10 days before the meeting.'
+          _ 'Also, you should submit a proxy if you might not attend the first half of the meeting.'
+          _ul do
+            ['nomination_of_board.txt', 'nomination_of_members.txt', '/members/proxy.cgi'].each do |f|
+              _li do
+                emit_link(cur_mtg_dir, f, MeetingUtil::MEETING_FILES[f])
+              end
+            end
+          end
+        end
+      end
+      
+      _whimsy_panel("Timeline: Seconds Period (last ten days before meeting)", style: 'panel-default') do
+        _p do
+          _ 'The 10 days before the meeting, you may add seconds to existing nomination files, but no new nominations are allowed.'
+          _ 'Also, you can still submit a proxy if you might not attend the first half of the meeting.'
+          _ul do
+            ['nominated-members.txt', '/members/proxy.cgi'].each do |f|
+              _li do
+                emit_link(cur_mtg_dir, f, MeetingUtil::MEETING_FILES[f])
+              end
+            end
+          end
+        end
+      end
+      
+      _whimsy_panel("Timeline: First Half Of Meeting on IRC (at #{mtg_date.strftime('%A, %d %B %Y')})", style: 'panel-primary') do
+        _p do
+          _ 'The Meeting itself starts on IRC - please be sure your client is setup ahead of time, and sign in with your Apache ID as nick if at all possible.'
+          _ 'The #asfmembers channel is for the official meeting itself; please raise your hand if you have a formal question there.  Backchannel (jokes, comments, etc.) is on #asf channel.'
+          _ 'During the First Half of Meeting, the Chairman and various officers run through reports in the Agenda, which you can read ahead of time.'
+          _ 'Expect the First Half to last about an hour; then the Chairman will call for a recess.'
+          _ul do
+            ['agenda.txt', 'README.txt', 'https://www.apache.org/foundation/governance/meetings'].each do |f|
+              _li do
+                emit_link(cur_mtg_dir, f, MeetingUtil::MEETING_FILES[f])
+              end
+            end
+          end
+        end
+      end
+      
+      _whimsy_panel("Timeline: Meeting Recess To Vote Via Email (approx 40+ hours)", style: 'panel-info') do
+        _p do
+          _ 'Shortly after the Chairman calls the recess, the STeVe vote monitors will send you multiple emails with your voting keys.'
+          _ 'All voting is done via a simple web interface at vote.apache.org after you login with your Apache ID.'
+          _ul do
+            _li do
+              _a 'New Members Elected By Majority Yes/No/Abstain vote', href: 'https://www.apache.org/foundation/governance/meetings#how-member-votes-are-tallied'
+              _a 'Board Seats Are Elected By STV - ORDER OF YOUR VOTE MATTERS!', href: 'https://www.apache.org/foundation/governance/meetings#how-votes-for-the-board-are-tallied'
+            end
+          end
+        end
+      end
+      
+      _whimsy_panel("Timeline: Second Half Of Meeting (48 hours after #{mtg_date.strftime('%A, %d %B %Y')})", style: 'panel-primary') do
+        _p do
+          _ 'The Second Half Meeting is short - it\'s primarily announcing vote results and any last-minute announcements.  Members do not need to attend the second half; all results will be emailed or checked into SVN.'
+          _ 'Various data files about the meeting will be checked in within a day after the meeting for historical records.'
+          _ul do
+            ['record', 'attend', 'voter-tally', 'raw_board_votes.txt'].each do |f|
+              _li do
+                emit_link(cur_mtg_dir, f, MeetingUtil::MEETING_FILES[f])
+              end
+            end
+          end
+        end
+      end
+      
+      _whimsy_panel("Timeline: After This Year's Meeting", style: 'panel-default') do
+        _p do 
+          _ 'Shortly after the second half Meeting ends, '
+          _a '@TheASF twitter', href: 'https://twitter.com/theasf'
+          _ ' will formally announce the new board - please wait to retweet the official announcement.'
+          _span.text_warning 'IMPORTANT:'
+          _ ' Do not publicise the names of newly elected members!  In rare cases, the new candidate might not accept the honor.'
+        end
+        _p do
+          _span.text_primary 'If you nominated a new member:'
+          _ ' You must send an email with '
+          _a 'foundation/membership-application-email.txt', href: "#{FOUNDATION_SVN}membership-application-email.txt"
+          _ ' to formally invite the new member to fill out the application form.  Applications must be signed and submitted to the secretary within 30 days of the meeting to be valid.'
         end
       end
       
+      # Most/all of these links should already be included above
       emit_meeting(cur_mtg_dir, meeting, meeting >= today)
       
       _whimsy_panel("Member Meeting History", style: 'panel-info') do