<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small">Might also be helpful to look at our document that outlines the process we go through[1]. If you have any questions, let us know!</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small">-Kendall (diablo_rojo)</div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small">[1] <a href="https://opendev.org/openstack/election/src/branch/master/README.rst">https://opendev.org/openstack/election/src/branch/master/README.rst</a></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 30, 2019 at 3:37 PM Jeremy Stanley <<a href="mailto:fungi@yuggoth.org">fungi@yuggoth.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2019-05-30 19:04:56 +0000 (+0000), MCEUEN, MATT wrote:<br>
> OpenStack Infra team,<br>
<br>
The OpenStack Infrastructure team hasn't been officially involved in<br>
running technical elections for OpenStack for several years now<br>
(subject tag removed accordingly). With the advent of Gerrit's REST<br>
API, contributor data can be queried and assembled anonymously by<br>
anyone. While I happen to be involved in these activities for longer<br>
than that's been the case, I'll be answering while wearing my<br>
OpenStack Technical Election Official hat throughout the remainder<br>
of this reply.<br>
<br>
> As the Airship project works to finalize our governance and<br>
> elected positions [1], we need to be ready to hold our first<br>
> elections. I wanted to reach out and ask for any experience,<br>
> guidance, materials, or tooling you can share that would help this<br>
> run correctly and smoothly? This is an area where the Airship team<br>
> doesn't have much experience so we may not know the right<br>
> questions to ask.<br>
> <br>
> Aside from a member of the Airship community creating a poll in<br>
> CIVS [2], is there anything else you would recommend? Is there any<br>
> additional tooling in place in the OpenStack world? Any potential<br>
> pitfalls, or other hard-won advice for us?<br>
[...]<br>
<br>
As Sean mentioned in his reply, the OpenStack community has been<br>
building and improving tooling in the openstack/election Git<br>
repository on OpenDev over the past few years. The important bits<br>
(in my opinion) center around querying Gerrit for a list of<br>
contributors whose changes have merged to sets of official project<br>
repositories within a qualifying date range. I've recently been<br>
assisting StarlingX's election officials with a similar request, and<br>
do have some recommendations.<br>
<br>
Probably the best place to start is adding an official structured<br>
dataset with your team/project information following the same schema<br>
used by OpenStack[0] and now StarlingX[1], then applying a couple of<br>
feature patches[2][3] (if they haven't merged by the time you read<br>
this) to the openstack/election master branch. After that, you ought<br>
to be able to run something along the lines of:<br>
<br>
    tox -e venv -- owners --after 2018-05-30 --before 2019-05-31<br>
        --nonmember --outdir airship-electorate<br>
        --projects ../../airship/governance/projects.yaml<br>
        --ref master<br>
<br>
(Note that the --after and --before dates work like in Gerrit's<br>
query language and carry with them an implied midnight UTC, so one<br>
is the actual start date but the other is the day after the end<br>
date; "on or after" and "before but not on" is how I refer to them<br>
in prose.)<br>
<br>
You'll see the resulting airship-electorate directory includes a lot<br>
of individual files. There are two basic types: .yaml files which<br>
are structured data meant for human auditing as well as scripted<br>
analysis, and .txt files which are a strict list of one Gerrit<br>
preferred E-mail address per line for each voter (the format<br>
expected by the <a href="https://civs.cs.cornell.edu/" rel="noreferrer" target="_blank">https://civs.cs.cornell.edu/</a> voting service). It's<br>
probably also obvious that there are sets of these named for each<br>
team in your governance, as well as a set which start with<br>
underscore (_). The former represent contributions to the<br>
deliverable repositories of each team, while the latter are produced<br>
from an aggregate of all deliverable repositories for all teams<br>
(this is what you might use for electing an Airship-wide governing<br>
body).<br>
<br>
There are a couple of extra underscore files...<br>
_duplicate_owners.yaml includes information on deduplicated entries<br>
for contributors where the script was able to detect more than one<br>
Gerrit account for the same individual, while the _invites.csv file<br>
isn't really election-related at all and is what the OSF normally<br>
feeds into the automation which sends event discounts to<br>
contributors. In case you're curious about the _invites.csv file,<br>
the first column is the OSF member ID (if known) or 0 (if no<br>
matching membership was found), the second column is the display<br>
name from Gerrit, the third column is the preferred E-mail address<br>
from Gerrit (this corresponds to the address used for the<br>
_electorate.txt file), and any subsequent columns are the extra<br>
non-preferred addresses configured in Gerrit for that account.<br>
<br>
Please don't hesitate to follow up with any additional questions you<br>
might have!<br>
<br>
[0] <a href="https://opendev.org/openstack/governance/src/branch/master/reference/projects.yaml" rel="noreferrer" target="_blank">https://opendev.org/openstack/governance/src/branch/master/reference/projects.yaml</a><br>
[1] <a href="https://opendev.org/starlingx/governance/src/branch/master/reference/tsc/projects.yaml" rel="noreferrer" target="_blank">https://opendev.org/starlingx/governance/src/branch/master/reference/tsc/projects.yaml</a><br>
[2] <a href="https://review.opendev.org/661647" rel="noreferrer" target="_blank">https://review.opendev.org/661647</a><br>
[3] <a href="https://review.opendev.org/661648" rel="noreferrer" target="_blank">https://review.opendev.org/661648</a><br>
-- <br>
Jeremy Stanley<br>
</blockquote></div>