<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Thanks Kendall, Jeremy, Sean – this is very helpful!  I think this gives us the tools we need to run a successful election; if we do have any questions I’ll let y’all know.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Appreciate your help,<o:p></o:p></p>
<p class="MsoNormal">Matt<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>From:</b> Kendall Nelson <kennelson11@gmail.com> <br>
<b>Sent:</b> Monday, June 3, 2019 8:47 AM<br>
<b>To:</b> Jeremy Stanley <fungi@yuggoth.org><br>
<b>Cc:</b> OpenStack Discuss <openstack-discuss@lists.openstack.org><br>
<b>Subject:</b> Re: Elections for Airship<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Tahoma",sans-serif">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!<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Tahoma",sans-serif"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Tahoma",sans-serif">-Kendall (diablo_rojo)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Tahoma",sans-serif"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Tahoma",sans-serif">[1] <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__opendev.org_openstack_election_src_branch_master_README.rst&d=DwMFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=_C5hC_103uW491yNPPpNmA&m=q-fjV8ndyIv1FhePlotL0hpW_dbr1hG_cxgKFzuTTDw&s=YfQutlHBN5UKc9810nCldR1yNIWDCx3dIFF5qlXVpqU&e=">https://opendev.org/openstack/election/src/branch/master/README.rst</a><o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Thu, May 30, 2019 at 3:37 PM Jeremy Stanley <<a href="mailto:fungi@yuggoth.org">fungi@yuggoth.org</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">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://urldefense.proofpoint.com/v2/url?u=https-3A__civs.cs.cornell.edu_&d=DwMFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=_C5hC_103uW491yNPPpNmA&m=q-fjV8ndyIv1FhePlotL0hpW_dbr1hG_cxgKFzuTTDw&s=-1ejg3tb3_ttxl-yaOyS6axYA5JmTIQiUrW_H290fSI&e=" 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://urldefense.proofpoint.com/v2/url?u=https-3A__opendev.org_openstack_governance_src_branch_master_reference_projects.yaml&d=DwMFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=_C5hC_103uW491yNPPpNmA&m=q-fjV8ndyIv1FhePlotL0hpW_dbr1hG_cxgKFzuTTDw&s=HuMQnPRdsYNWXXTi3Wf1YdH5jm0qBFijcvVNN9kMvvs&e=" target="_blank">
https://opendev.org/openstack/governance/src/branch/master/reference/projects.yaml</a><br>
[1] <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__opendev.org_starlingx_governance_src_branch_master_reference_tsc_projects.yaml&d=DwMFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=_C5hC_103uW491yNPPpNmA&m=q-fjV8ndyIv1FhePlotL0hpW_dbr1hG_cxgKFzuTTDw&s=NOM7z42EFjCg1JRSKRwPJuacaAy50VDSBap0gdJ0IMs&e=" target="_blank">
https://opendev.org/starlingx/governance/src/branch/master/reference/tsc/projects.yaml</a><br>
[2] <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__review.opendev.org_661647&d=DwMFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=_C5hC_103uW491yNPPpNmA&m=q-fjV8ndyIv1FhePlotL0hpW_dbr1hG_cxgKFzuTTDw&s=DiP7kRZfGcfnzYvCwBVRcLZyks88kx7Um3WLTuacrPE&e=" target="_blank">
https://review.opendev.org/661647</a><br>
[3] <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__review.opendev.org_661648&d=DwMFaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=_C5hC_103uW491yNPPpNmA&m=q-fjV8ndyIv1FhePlotL0hpW_dbr1hG_cxgKFzuTTDw&s=4rKYgxQRHcBvr-wSjHeVSS-rksSlG01XLadWJAT06U8&e=" target="_blank">
https://review.opendev.org/661648</a><br>
-- <br>
Jeremy Stanley<o:p></o:p></p>
</blockquote>
</div>
</div>
</body>
</html>