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>'].