You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by ru...@apache.org on 2017/09/13 12:37:54 UTC

[whimsy] branch master updated: rough in code to draft next month's agenda

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

rubys 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 6a8ccc7  rough in code to draft next month's agenda
6a8ccc7 is described below

commit 6a8ccc7046124347b7464b964aacab17b70908d7
Author: Sam Ruby <ru...@intertwingly.net>
AuthorDate: Wed Sep 13 08:37:10 2017 -0400

    rough in code to draft next month's agenda
---
 lib/whimsy/asf/board.rb          |  47 ++++++++-
 www/board/agenda/Gemfile         |   1 +
 www/board/agenda/data/agenda.erb | 223 +++++++++++++++++++++++++++++++++++++++
 www/board/agenda/main.rb         |   3 +
 www/board/agenda/routes.rb       |  36 +++++++
 5 files changed, 308 insertions(+), 2 deletions(-)

diff --git a/lib/whimsy/asf/board.rb b/lib/whimsy/asf/board.rb
index cafa57a..05bf3bf 100644
--- a/lib/whimsy/asf/board.rb
+++ b/lib/whimsy/asf/board.rb
@@ -5,7 +5,14 @@ module ASF
   module Board
     TIMEZONE = TZInfo::Timezone.get('US/Pacific')
 
-    # return list of board meeting times as listed in 
+    # sorted list of Directors
+    def self.directors
+      ASF::Service['board'].members.
+        map {|person| person.public_name}.
+        sort_by {|name| name.split(' ').rotate}
+    end
+
+    # list of board meeting times as listed in 
     # committers/board/calendar.txt
     def self.calendar
       svn = ASF::SVN['private/committers/board']
@@ -14,9 +21,45 @@ module ASF
       times.map {|time| TIMEZONE.local_to_utc(Time.parse(time))}
     end
 
-    # return time of next meeting
+    # time of next meeting
     def self.nextMeeting
       self.calendar.select {|time| time > Time.now.utc}.min
     end
+
+    # list of PMCs reporting in the specified meeting
+    def self.reporting(meeting)
+      month = meeting.strftime('%B')
+      ASF::Committee.load_committee_info
+      ASF::Committee.pmcs.select do |pmc| 
+        pmc.report.split(', ').include? month or
+        pmc.report.start_with? 'Next month'
+      end
+    end
+
+    # source for shepherd information, yields a stream of director names
+    # in random order
+    class ShepherdStream < Enumerator
+      def initialize
+        @directors = ASF::Service['board'].members
+
+        super do |generator|
+          list = []
+          loop do
+            list = @directors.shuffle if list.empty?
+            generator.yield list.pop.public_name
+          end
+        end
+      end
+
+      def for(pmc)
+        chair = pmc.chair
+
+        if @directors.include? chair
+          "#{chair.public_name}"
+        else
+          "#{chair.public_name} / #{self.next.split(' ').first}"
+        end
+      end
+    end
   end
 end
diff --git a/www/board/agenda/Gemfile b/www/board/agenda/Gemfile
index 25dc240..26031e3 100644
--- a/www/board/agenda/Gemfile
+++ b/www/board/agenda/Gemfile
@@ -20,6 +20,7 @@ gem 'execjs', ('<2.5.1' if RUBY_VERSION =~ /^1/)
 gem 'listen', ('~> 3.0.7' if RUBY_VERSION =~ /^2\.[01]/)
 gem 'activesupport'
 gem 'mail'
+gem 'erubis'
 
 gem 'websocket-eventmachine-server'
 gem 'websocket-client-simple'
diff --git a/www/board/agenda/data/agenda.erb b/www/board/agenda/data/agenda.erb
new file mode 100644
index 0000000..fbbe84b
--- /dev/null
+++ b/www/board/agenda/data/agenda.erb
@@ -0,0 +1,223 @@
+                    The Apache Software Foundation
+
+                  Board of Directors Meeting Agenda
+
+<%= @meeting.strftime('%B %d, %Y').center(70).rstrip %>
+
+
+ 1. Call to order
+
+    The meeting is scheduled for <%= @time %> Pacific and will begin as
+    soon thereafter that a sufficient attendance to constitute a
+    quorum is recognized by the chairman.
+
+            Other Time Zones: <%= @tzlink %>
+
+    The meeting will be held via teleconference, hosted by Doug Cutting and
+    Cloudera:
+
+            International   : +1-650-479-3208
+            U.S. Toll-Free  : +1-877-668-4493
+            Other numbers   : http://s.apache.org/webex-numbers
+            Access Code     : 2329 5771
+
+    IRC #asfboard on irc.freenode.net will be used for backup
+    purposes.
+
+ 2. Roll Call
+
+    ASF members are welcome to attend board meetings. Please
+    add your name under "guests" below, or just join the call and
+    announce your presence during the roll call at the beginning
+    of the meeting.
+
+    Directors (expected to be) Present:
+
+<% @directors.each do |director| %>
+        <%= director %>
+<% end %>
+
+    Directors (expected to be) Absent:
+
+        none
+
+    Executive Officers (expected to be) Present:
+
+        Sam Ruby
+        Ross Gardler
+        Craig L Russell
+        Ulrich Stärk
+
+    Executive Officers (expected to be) Absent:
+
+        none
+
+    Guests (expected):
+
+        Tom Pappas
+        Jake Farrell
+        Greg Stein
+        Daniel Gruno
+
+ 3. Minutes from previous meetings
+
+    Minutes (in Subversion) are found under the URL:
+
+        https://svn.apache.org/repos/private/foundation/board/
+
+<% @minutes.zip('A'..'Z').each do |date, index| %>
+    <%= index %>. The meeting of <%= date.strftime('%B %d, %Y') %>
+
+       See: board_minutes_<%= date.strftime('%y_%m_%d') %>.txt
+
+       [ approved:
+         comments:
+         ]
+
+<% end %>
+ 4. Executive Officer Reports
+
+    A. Chairman [Phil]
+
+    B. President [Sam]
+
+       Additionally, please see Attachments 1 through 7.
+
+       [ comments:
+         ]
+
+    C. Treasurer [Ulrich]
+
+    D. Secretary [Craig]
+
+    E. Executive Vice President [Ross]
+
+    F. Vice Chairman [Jim]
+
+ 5. Additional Officer Reports
+
+    A. VP of W3C Relations [<%=
+       @owner.for(ASF::Committee.find('W3C Relations')) %>]
+
+       See Attachment 8
+
+       [ approved:
+         comments:
+         ]
+
+    B. Apache Legal Affairs Committee [<%=
+       @owner.for(ASF::Committee.find('Legal Affairs')) %>]
+
+       See Attachment 9
+
+       [ approved:
+         comments:
+         ]
+
+    C. Apache Security Team Project [<%=
+       @owner.for(ASF::Committee.find('Security Team')) %>]
+
+       See Attachment 10
+
+       [ approved:
+         comments:
+         ]
+
+ 6. Committee Reports
+
+    Summary of Reports
+
+     The following reports require further discussion:
+
+<% @pmcs.zip('A'..'ZZ').each do |pmc, index| %>
+    <%= index %>. Apache <%= pmc.display_name %> Project [<%=
+       @owner.for(pmc) %>]
+
+       See Attachment <%= index %>
+
+       [ <%= pmc.display_name %>.
+         approved:
+         comments:
+         ]
+
+<% end %>
+ 7. Special Orders
+
+ 8. Discussion Items
+
+ 9. Review Outstanding Action Items
+
+10. Unfinished Business
+
+11. New Business
+
+12. Announcements
+
+13. Adjournment
+
+    Scheduled to adjourn by 12:30pm (Pacific)
+
+
+============
+ATTACHMENTS:
+============
+
+-----------------------------------------
+Attachment 1: Report from the Executive Assistant  [<%=
+ASF::Committee.find('Executive Assistant').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 2: Report from the VP of Brand Management  [<%=
+ASF::Committee.find('Brand Management').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 3: Report from the VP of Fundraising  [<%=
+ASF::Committee.find('Fundraising').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 4: Report from the VP of Marketing and Publicity  [<%=
+ASF::Committee.find('Marketing and Publicity').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 5: Report from the VP of Infrastructure  [<%=
+ASF::Committee.find('Infrastructure').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 6: Report from the VP of Conferences  [<%=
+ASF::Committee.find('Conferences').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 7: Report from the Apache Travel Assistance Committee  [<%=
+ASF::Committee.find('Travel Assistance').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 8: Report from the VP of W3C Relations  [<%=
+ASF::Committee.find('W3C Relations').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 9: Report from the Apache Legal Affairs Committee  [<%=
+ASF::Committee.find('Legal Affairs').chair.public_name %>]
+
+
+-----------------------------------------
+Attachment 10: Report from the Apache Security Team Project  [<%= 
+ASF::Committee.find('Security Team').chair.public_name %>]
+
+
+<% @pmcs.zip('A'..'ZZ').each do |pmc, index| %>
+-----------------------------------------
+Attachment <%= index %>: Report from the Apache <%= 
+pmc.display_name %> Project  [<%= pmc.chair.public_name %>] 
+
+
+<% end %>
+------------------------------------------------------
+End of agenda for the <%= @meeting.strftime('%B %d, %Y') %> board meeting.
diff --git a/www/board/agenda/main.rb b/www/board/agenda/main.rb
index 0f548a5..3c41022 100755
--- a/www/board/agenda/main.rb
+++ b/www/board/agenda/main.rb
@@ -5,6 +5,7 @@
 #
 
 require 'whimsy/asf/agenda'
+require 'whimsy/asf/board'
 
 require 'wunderbar/sinatra'
 require 'wunderbar/react'
@@ -18,6 +19,8 @@ require 'thread'
 require 'net/http'
 require 'shellwords'
 require 'mail'
+require 'open-uri'
+require 'erubis'
 
 disable :logging # suppress log of requests to stderr/error.log
 
diff --git a/www/board/agenda/routes.rb b/www/board/agenda/routes.rb
index cfd26ea..25785a5 100755
--- a/www/board/agenda/routes.rb
+++ b/www/board/agenda/routes.rb
@@ -312,3 +312,39 @@ get '/text/draft/:file' do |file|
     end
   end
 end
+
+# draft new agenda
+get '/new' do
+  # extract time and date for next meeting
+  @meeting = ASF::Board.nextMeeting
+  localtime = ASF::Board::TIMEZONE.utc_to_local(@meeting)
+  @time = localtime.strftime('%l:%M%P')
+
+  # Get directors, list of pmcs due to report, and shepherds
+  @directors = ASF::Board.directors
+  @pmcs = ASF::Board.reporting(@meeting)
+  @owner = ASF::Board::ShepherdStream.new
+
+  # build full time zone link
+  path = "/worldclock/fixedtime.html?iso=" +
+    localtime.strftime('%Y-%m-%dT%H:%M:%S') +
+    "&msg=ASF+Board+Meeting&p1=137" # time zone for PST/PDT locality
+  @tzlink = "http://www.timeanddate.com/#{path}"
+
+  # try to shorten time zone link
+  begin
+    shorten = 'http://www.timeanddate.com/createshort.html?url=' +
+      URI.escape(path + '&msg=ASF+Board+Meeting') + '&confirm=1'
+    shorten = URI.parse(shorten).read[/id=selectable>(.*?)</, 1]
+    @tzlink = shorten if shorten
+  end
+
+  # Get list of unpublished and unapproved minutes
+  draft = YAML.load_file(Dir["#{AGENDA_WORK}/board_minutes*.yml"].sort.last)
+  @minutes = Dir["#{ASF::SVN['private/foundation/board']}/board_minutes_*.txt"].
+    map {|file| Date.parse(file[/\d[_\d]+/].gsub('_', '-'))}.
+    select {|date| draft[date.strftime('%B %d, %Y')] != 'approved'}
+
+  template = File.read('data/agenda.erb')
+  _text Erubis::Eruby.new(template).result(binding)
+end

-- 
To stop receiving notification emails like this one, please contact
['"commits@whimsical.apache.org" <co...@whimsical.apache.org>'].