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

apitrou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-site.git


The following commit(s) were added to refs/heads/master by this push:
     new e68cfc6  ARROW-11876: [Website] Update governance page
e68cfc6 is described below

commit e68cfc66085e426e3b97d0f1ad090d8abf5913c2
Author: Antoine Pitrou <[email protected]>
AuthorDate: Mon Mar 15 17:24:24 2021 +0100

    ARROW-11876: [Website] Update governance page
    
    - Update chair to Wes from Jacques
    - Reorganize YAML file to make it easier to edit and maintain
    - Add a verification script to check the local list is up-to-date
    
    Closes #96 from pitrou/ARROW-11876-governance and squashes the following 
commits:
    
    5c4e55fac <Antoine Pitrou> ARROW-11876:  Update governance page
    
    Authored-by: Antoine Pitrou <[email protected]>
    Signed-off-by: Antoine Pitrou <[email protected]>
---
 _data/committers.yml        | 281 +++++++++++++++++++++++---------------------
 committers.md               |  17 ++-
 scripts/check_committers.py |  88 ++++++++++++++
 scripts/requirements.txt    |   3 +
 4 files changed, 252 insertions(+), 137 deletions(-)

diff --git a/_data/committers.yml b/_data/committers.yml
index 7f1619f..d473c60 100644
--- a/_data/committers.yml
+++ b/_data/committers.yml
@@ -15,203 +15,216 @@
 #
 # Database of Apache Arrow committers and PMC
 #
-- name: Jacques Nadeau
+
+# List of Arrow committers, sorted by role and name.
+# Affiliations are not necessarily up-to-date...
+
+# You can verify this list against the ASF-maintained roster by running
+# `scripts/check_committers.py`.
+
+- name: Wes McKinney
   role: VP
-  alias: jacques
-  affiliation: Dremio
-- name: Ted Dunning
+  alias: wesm
+  affiliation: Ursa Computing
+
+- name: Abdelhakim Deneche
   role: PMC
-  alias: tdunning
-  affiliation: MapR
-- name: P. Taylor Goetz
+  alias: adeneche
+  affiliation: Salesforce
+- name: Alex Levenson
   role: PMC
-  alias: ptgoetz
-  affiliation: Monetate
-- name: Julian Hyde
+  alias: alexlevenson
+  affiliation: Twitter
+- name: Andrew Lamb
   role: PMC
-  alias: jhyde
-  affiliation: Looker
-- name: Reynold Xin
+  alias: alamb
+  affiliation: InfluxData
+- name: Andy Grove
   role: PMC
-  alias: rxin
-  affiliation: Databricks
-- name: James Taylor
+  alias: agrove
+  affiliation: NVIDIA
+- name: Antoine Pitrou
   role: PMC
-  alias: jamestaylor
-  affiliation: Salesforce
-- name: Julien Le Dem
+  alias: apitrou
+  affiliation: Independent / Ursa Computing
+- name: François Saint-Jacques
   role: PMC
-  alias: julien
-  affiliation: Datakin
+  alias: fsaintjacques
+  affiliation: Optable
+- name: Hanifi Gunes
+  role: PMC
+  alias: hg
+  affiliation: MZ
+- name: Jacques Nadeau
+  role: PMC
+  alias: jacques
+  affiliation: Dremio
 - name: Jake Luciani
   role: PMC
   alias: jake
   affiliation: DataStax
+- name: James Taylor
+  role: PMC
+  alias: jamestaylor
+  affiliation: Salesforce
 - name: Jason Altekruse
   role: PMC
   alias: json
   affiliation: Workday
-- name: Alex Levenson
+- name: Jorge Cardoso Leitao
   role: PMC
-  alias: alexlevenson
-  affiliation: Twitter
-- name: Parth Chandra
+  alias: jorgecarleitao
+  affiliation: Munin Data ApS
+- name: Julian Hyde
   role: PMC
-  alias: parthc
-  affiliation: MapR
+  alias: jhyde
+  affiliation: Looker
+- name: Julien Le Dem
+  role: PMC
+  alias: julien
+  affiliation: Datakin
+- name: Kouhei Sutou
+  role: PMC
+  alias: kou
+  affiliation: ClearCode
+- name: Krisztián Szűcs
+  role: PMC
+  alias: kszucs
+  affiliation: Ursa Computing
 - name: Marcel Kornacker
   role: PMC
   alias: marcel
   affiliation: Independent
-- name: Steven Phillips
-  role: PMC
-  alias: smp
-  affiliation: Dremio
-- name: Hanifi Gunes
+- name: Micah Kornfield
   role: PMC
-  alias: hg
-  affiliation: MZ
-- name: Abdelhakim Deneche
+  alias: emkornfield
+  affiliation: Google
+- name: Neal Richardson
   role: PMC
-  alias: adeneche
-  affiliation: Salesforce
-- name: Wes McKinney
+  alias: npr
+  affiliation: Ursa Computing
+- name: P. Taylor Goetz
   role: PMC
-  alias: wesm
-  affiliation: Ursa Labs / RStudio
-- name: David Alves
-  role: Committer
-  alias: dralves
-  affiliation: CortexXus
-- name: Ippokratis Pandis
-  role: Committer
-  alias: ippokratis
-  affiliation: Amazon
-- name: Uwe L. Korn
+  alias: ptgoetz
+  affiliation: Monetate
+- name: Parth Chandra
   role: PMC
-  alias: uwe
-  affiliation: Quantco
-- name: Kouhei Sutou
+  alias: parthc
+  affiliation: MapR
+- name: Phillip Cloud
   role: PMC
-  alias: kou
-  affiliation: ClearCode
+  alias: cpcloud
+  affiliation: Standard Cognition
 - name: Philipp Moritz
   role: PMC
   alias: pcmoritz
   affiliation: Anyscale
-- name: Phillip Cloud
+- name: Reynold Xin
   role: PMC
-  alias: cpcloud
-  affiliation: Standard Cognition
-- name: Bryan Cutler
-  role: Committer
-  alias: cutlerb
-  affiliation: IBM
-- name: Li Jin
-  role: Committer
-  alias: icexelloss
-  affiliation: Two Sigma
+  alias: rxin
+  affiliation: Databricks
+- name: Sebastien Binet
+  role: PMC
+  alias: sbinet
+  affiliation: CERN
 - name: Siddharth Teotia
   role: PMC
   alias: siddteotia
   affiliation: LinkedIn
-- name: Brian Hulette
-  role: Committer
-  alias: bhulette
-  affiliation: Google
-- name: Robert Nishihara
-  role: Committer
-  alias: robertnishihara
-  affiliation: Anyscale
-- name: Paul Taylor
-  role: Committer
-  alias: ptaylor
-  affiliation: NVIDIA
-- name: Antoine Pitrou
+- name: Steven Phillips
   role: PMC
-  alias: apitrou
-  affiliation: Independent / Ursa Labs
-- name: Andy Grove
+  alias: smp
+  affiliation: Dremio
+- name: Ted Dunning
   role: PMC
-  alias: agrove
-  affiliation: NVIDIA
-- name: Krisztián Szűcs
+  alias: tdunning
+  affiliation: MapR
+- name: Uwe L. Korn
   role: PMC
-  alias: kszucs
-  affiliation: Ursa Labs
-- name: Yosuke Shiro
+  alias: uwe
+  affiliation: Quantco
+
+- name: Ben Kietzman
   role: Committer
-  alias: shiro
-  affiliation: Red Data Tools
-- name: Romain Francois
+  alias: bkietz
+  affiliation: Ursa Computing
+- name: Brian Hulette
   role: Committer
-  alias: romainfrancois
-  affiliation: RStudio
-- name: Sebastien Binet
-  role: PMC
-  alias: sbinet
-  affiliation: CERN
-- name: Paddy Horan
+  alias: bhulette
+  affiliation: Google
+- name: Bryan Cutler
   role: Committer
-  alias: paddyhoran
-  affiliation: MetLife
+  alias: cutlerb
+  affiliation: IBM
 - name: Chao Sun
   role: Committer
   alias: sunchao
   affiliation: Uber
-- name: Micah Kornfield
-  role: PMC
-  alias: emkornfield
-  affiliation: Google
-- name: Neville Dipale
-  role: Committer
-  alias: nevime
-  affiliation: commutenav
-- name: François Saint-Jacques
-  role: PMC
-  alias: fsaintjacques
-  affiliation: Ursa Labs / RStudio
-- name: Praveen Kumar
+- name: David Alves
   role: Committer
-  alias: praveenbingo
-  affiliation: Dremio
+  alias: dralves
+  affiliation: CortexXus
 - name: David Li
   role: Committer
   alias: lidavidm
-  affiliation: Two Sigma
-- name: Ben Kietzman
-  role: Committer
-  alias: bkietz
-  affiliation: Ursa Labs / RStudio
-- name: Kenta Murata
-  role: Committer
-  alias: mrkn
-  affiliation: Speee, Inc.
-- name: Neal Richardson
-  role: PMC
-  alias: npr
-  affiliation: Ursa Labs / RStudio
+  affiliation: Ursa Computing
 - name: Eric Erhardt
   role: Committer
   alias: eerhardt
   affiliation: Microsoft
+- name: Ippokratis Pandis
+  role: Committer
+  alias: ippokratis
+  affiliation: Amazon
+- name: Ji Liu
+  role: Committer
+  alias: tianchen
+  affiliation: Alibaba
 - name: Joris van den Bossche
   role: Committer
   alias: jorisvandenbossche
-  affiliation: Ursa Labs
+  affiliation: Ursa Computing
+- name: Kenta Murata
+  role: Committer
+  alias: mrkn
+  affiliation: Speee, Inc.
+- name: Li Jin
+  role: Committer
+  alias: icexelloss
+  affiliation: Two Sigma
 - name: Liya Fan
   role: Committer
   alias: liyafan
   affiliation: Alibaba
-- name: Ji Liu
+- name: Neville Dipale
   role: Committer
-  alias: tianchen
-  affiliation: Alibaba
-- name: Jorge Cardoso Leitao
+  alias: nevime
+  affiliation: commutenav
+- name: Paddy Horan
   role: Committer
-  alias: jorgecarleitao
-  affiliation: Munin Data ApS
+  alias: paddyhoran
+  affiliation: MetLife
+- name: Paul Taylor
+  role: Committer
+  alias: ptaylor
+  affiliation: NVIDIA
+- name: Praveen Kumar
+  role: Committer
+  alias: praveenbingo
+  affiliation: Dremio
+- name: Robert Nishihara
+  role: Committer
+  alias: robertnishihara
+  affiliation: Anyscale
+- name: Romain Francois
+  role: Committer
+  alias: romainfrancois
+  affiliation: RStudio
 - name: Yibo Cai
   role: Committer
   alias: yibocai
   affiliation: Arm
+- name: Yosuke Shiro
+  role: Committer
+  alias: shiro
+  affiliation: Red Data Tools
diff --git a/committers.md b/committers.md
index 0eb4212..cf4b21d 100644
--- a/committers.md
+++ b/committers.md
@@ -24,11 +24,17 @@ limitations under the License.
 
 ## Apache Arrow Project Governance
 
-The Arrow project is a part of the Apache Software Foundation and follows its 
[project management 
guidelines](https://www.apache.org/foundation/how-it-works.html#management), 
which promote community-led consensus decisionmaking, 
[independent](https://community.apache.org/projectIndependence.html) of 
commercial influence.
+The Arrow project is a part of the Apache Software Foundation and follows
+its [project management 
guidelines](https://www.apache.org/foundation/how-it-works.html#management),
+which promote community-led consensus decisionmaking,
+[independent](https://community.apache.org/projectIndependence.html) of
+commercial influence.
 
 ### Project Management Committee (PMC)
 
-The [PMC](https://www.apache.org/foundation/how-it-works.html#pmc-members) 
governs the project. Members 
[vote](https://www.apache.org/foundation/voting.html) on important decisions, 
including releases and inviting committers to join the PMC.
+The [PMC](https://www.apache.org/foundation/how-it-works.html#pmc-members)
+governs the project. Members 
[vote](https://www.apache.org/foundation/voting.html)
+on important decisions, including releases and inviting committers to join the 
PMC.
 
 <table class="table table-striped"><thead>
 <tr>
@@ -57,7 +63,12 @@ The 
[PMC](https://www.apache.org/foundation/how-it-works.html#pmc-members) gover
 
 ### Committers
 
-Contributors who have demonstrated a sustained commitment to the project, not 
only authoring code but also reviewing others' patches and exercising good 
judgment, may be invited by the PMC to become 
[committers](https://www.apache.org/foundation/how-it-works.html#committers). 
Committers are authorized to merge code patches to the project and serve as 
non-voting project maintainers.
+Contributors who have demonstrated a sustained commitment to the project, not
+only authoring code but also reviewing others' patches and exercising good
+judgment, may be invited by the PMC to become
+[committers](https://www.apache.org/foundation/how-it-works.html#committers).
+Committers are authorized to merge code patches to the project and serve as
+non-voting project maintainers.
 
 <table class="table table-striped"><thead>
 <tr>
diff --git a/scripts/check_committers.py b/scripts/check_committers.py
new file mode 100755
index 0000000..8b66a0d
--- /dev/null
+++ b/scripts/check_committers.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# Utility for checking that the local committers list used to generate
+# the Governance page is up-to-date with the authoritative ASF roster.
+#
+
+from collections import namedtuple
+import json
+import os
+import sys
+
+import requests
+import yaml
+
+
+git_root = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
+
+committers_yaml = os.path.join(git_root, "_data", "committers.yml")
+
+# See https://home.apache.org/phonebook-about.html
+# for available resources
+committers_url = "https://whimsy.apache.org/public/public_ldap_projects.json";
+
+Roster = namedtuple('Roster', ('committers', 'pmcs'))
+
+
+def get_asf_roster():
+    r = requests.get(committers_url)
+    j = r.json()
+    proj = j['projects']['arrow']
+    pmcs = set(proj['owners'])
+    committers = set(proj['members']) - pmcs
+    return Roster(committers, pmcs)
+
+
+def get_local_roster():
+    with open(committers_yaml, "r") as f:
+        d = yaml.safe_load(f)
+    committers = set()
+    pmcs = set()
+    for member in d:
+        uid = member['alias']
+        role = member['role']
+        if role in ('PMC', 'VP'):
+            pmcs.add(uid)
+        elif role == 'Committer':
+            committers.add(uid)
+        else:
+            raise ValueError(f"Invalid role {role!r} for {uid}")
+    return Roster(committers, pmcs)
+
+
+if __name__ == "__main__":
+    local_roster = get_local_roster()
+    asf_roster = get_asf_roster()
+    if local_roster == asf_roster:
+        print("Committer list up-to-date")
+        sys.exit(0)
+
+    missing_pmcs = asf_roster.pmcs - local_roster.pmcs
+    if missing_pmcs:
+        print("Missing PMCs in local list:", sorted(missing_pmcs))
+    missing_committers = asf_roster.committers - local_roster.committers
+    if missing_committers:
+        print("Missing committers in local list:", sorted(missing_committers))
+    unexpected_members = ((local_roster.pmcs | local_roster.committers) -
+                          (asf_roster.pmcs | asf_roster.committers))
+    if unexpected_members:
+        print("Unexpected members in local list:", sorted(unexpected_members))
+    sys.exit(1)
diff --git a/scripts/requirements.txt b/scripts/requirements.txt
new file mode 100644
index 0000000..41a91df
--- /dev/null
+++ b/scripts/requirements.txt
@@ -0,0 +1,3 @@
+jira
+pyyaml
+requests

Reply via email to