{"id":20111389,"url":"https://github.com/openstack/election","last_synced_at":"2026-02-23T19:40:02.509Z","repository":{"id":58163886,"uuid":"41485606","full_name":"openstack/election","owner":"openstack","description":"OpenStack Elections repository. Mirror of code maintained at opendev.org.","archived":false,"fork":false,"pushed_at":"2025-07-29T12:37:26.000Z","size":2582,"stargazers_count":21,"open_issues_count":0,"forks_count":7,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-07-29T15:17:14.220Z","etag":null,"topics":["project-governance"],"latest_commit_sha":null,"homepage":"https://opendev.org/openstack/election","language":"DIGITAL Command Language","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openstack.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-08-27T12:36:16.000Z","updated_at":"2025-07-29T12:37:30.000Z","dependencies_parsed_at":"2024-02-14T05:23:05.860Z","dependency_job_id":"a37d918f-8bc8-4c73-9c4e-c655dedba7c6","html_url":"https://github.com/openstack/election","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/openstack/election","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Felection","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Felection/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Felection/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Felection/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openstack","download_url":"https://codeload.github.com/openstack/election/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Felection/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267875691,"owners_count":24158781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["project-governance"],"created_at":"2024-11-13T18:15:54.895Z","updated_at":"2025-10-23T22:35:46.248Z","avatar_url":"https://github.com/openstack.png","language":"DIGITAL Command Language","funding_links":[],"categories":[],"sub_categories":[],"readme":"This repository contains OpenStack Elections reference documents\nand tooling to run elections.\n\n================\nElection Process\n================\n\nPTL Elections\n=============\n\nSelecting Election Dates\n------------------------\n\nThings to keep in mind when selecting election dates:\n\n* Election Dates must be as per the `TC charter \u003chttps://governance.openstack.org/tc/reference/charter.html\u003e`_\n  which is \"The election is held no later than 2 weeks prior to each\n  cycle final release date (on or before ‘R-2’ week)\"\n* At least 48 hours in between email deadline and poll start\n* Consider extra-acs approval deadlines\n* Allow at least a week for nomination period\n\n``tox -evenv -- setup-election-config`` can be used to pick some possible dates that need to be\nchecked by the election officials and TC.  Once these dates are confirmed/merged\nelection officials can create a change against the `releases repo \u003chttps://opendev.org/openstack/releases\u003e`_\nto include these dates in the development schedule.  A helper tool ``tox -evenv -- update-releases-calendar``\nwill generate this change, but needs to be verified before publishing\n\n\nPreparation\n-----------\n\nAs early as possible but at least a month before election starts:\n\n* Edit elections details (timeline, cycle timeframe):\n\n  * ``edit configuration.yaml``\n\n  .. note::\n\n     ``to-be-released`` tag value is used during the election process.\n     After the election is over, the tag value is updated\n     for ``openstack/governance`` repository.\n\n* Prepare new election, e.g.:\n\n  * ``tox -evenv -- create-directories``\n\n* Commit to update website\n* Update Release Schedule\n\nA couple of weeks before election starts:\n\n* Send *PTL Election Season* email\n\n  * ``tox -e venv -- template-emails election_season``\n\n\nPTL Candidacy Round\n-------------------\n\nWhen PTL Candidacy start:\n\n* Send *PTL Nominations Kickoff* email\n\n  * ``tox -e venv -- template-emails nominations_kickoff``\n\nDuring the PTL Candidacy round:\n\n* Validate candidacy, e.g.:\n\n  * ``tox -evenv -- check-all-candidacies``, or\n  * ``tox -evenv -- ci-check-all-candidate-files candidates/release/project/candidates``, or\n  * ``tox -evenv -- check-candidacy change_id``\n\n* To +2 a candidate:\n\n  * check commit link is indeed valid\n  * check filename is email address\n  * cursory check the candidacy statement\n\n* To +Workflow, checks the previous +2 details, find another commits using\n  ``--limit 5`` (optional)\n* Check candidate list and fix badly generated names through changes to the\n  ``exception.txt`` file or requesting the candidate to update their OIF\n  member profile.\n\nOnce the email deadline is reached:\n\n* Ask the TC chair to tag the governance repository\n* Generate the electorate rolls.  This generates the rolls for all project\n  teams even if they aren't going to hold an election.\n\n  * ``tox -evenv -- generate-rolls``\n\nA couple of days before the candidacy submission ends:\n\n* Render statistics and send *Motivation call for PTL candidacy round*, e.g.:\n\n  * ``tox -evenv -- render-statistics``\n\n* Send *PTL Nominations Last Days* email:\n\n  * ``tox -e venv -- template-emails nominations_last_days``\n\n* Optionally send direct *PTL nominations Last Days* email to the members of the\n  teams with no PTL candidates proposed:\n\n  * ``tox -evenv -- template-emails nominations_direct_reminder -p\n    \u003cproject_name\u003e -o \u003cowners_dir\u003e``\n\nWhen PTL Candidacy submission ends:\n\n* Send *PTL Nominations End* email\n\n  * ``tox -e venv -- template-emails end_nominations``\n\n* When the tag is available, generate AC rolls, e.g.:\n\n  * ``tox -evenv -- generate-rolls``\n  * Compare AC rolls with at least one other election official\n\n\nPTL Election Round\n------------------\n\nBefore PTL Election begins:\n\n* Send email to the mailing list or eligible electorates to opt in to\n  CIVS voting system using their Gerrit email address in https://civs1.civs.us/cgi-bin/opt_in.pl\n\n  * ``tox -e venv -- template-emails voting_optin_civs``\n\nWhen PTL Election begins:\n\n* `Create CIVS page\n  \u003chttps://wiki.openstack.org/wiki/Election_Officiating_Guidelines#Running_the_election_itself\u003e`_\n* Upload rolls\n\n  * CIVS has a maximum number of electorate emails you can upload at a time\n    without crashing, limit to 500 at a time\n\n* Send *PTL Voting Kickoff* email\n\n  * ``tox -e venv -- template-emails voting_kickoff``\n\n* Optionally send direct *voting opt-in CIVS direct reminder* email to the members\n  who are not activated to CIVS voting system\n\n  * ``tox -evenv -- template-emails voting_optin_civs_direct_reminder -p\n    \u003cproject_name\u003e``\n\nA couple of days before the PTL Election ends:\n\n* Send *PTL Voting Last Days* email\n\n  * ``tox -e venv -- template-emails voting_last_days``\n\nWhen PTL Election ends:\n\n* Close the election and update the results:\n\n  * ``tox -evenv -- close-election --round ptl``\n  * ``edit doc/sources/results/release/ptl.yaml`` and set election winners to ``true``\n  * NOTE: We no longer need document TC-APPOINTMENT or LEADERLESS as the\n    ``update-governance`` step will communicate that to the TC and the process\n    in that repo will set the project leader.\n\n* Commit the change and review the results\n* Send *PTL Results* email\n\n  * This is ``doc/source/results/release/announce_ptl.rst`` generated by\n    building the docs with ``tox -e docs`` after\n    ``doc/source/results/release/ptl.yaml`` has been created and updated\n\n* Update governance repo:\n\n  * ``tox -e venv update-governance -- --governance-repo ../governance/``\n\n\nTC Elections\n============\n\nSelecting Election Dates\n------------------------\n\nThings to keep in mind when selecting election dates:\n\n* Election Dates must be as per the `TC charter \u003chttps://governance.openstack.org/tc/reference/charter.html\u003e`_\n  which is \"The election is held no earlier than 8 weeks and no later\n  than 2 weeks prior to each cycle final release date (between ‘R-8’\n  and ‘R-2’ week)\"\n* Allow for at least 48 hours between email deadline and polling beginning\n* Allow at least a week for nomination and campaign periods\n* TC and PTL election can be held as combined election\n\n``setup-election-config`` can be used to pick some obvous dates that need to be\nchecked by the election officials and TC\n\n\nPreparation\n-----------\n\nAs early as possible but at least a month before election starts:\n\n* Edit elections details (timeline, cycle timeframe):\n\n  * ``edit configuration.yaml``\n\n* Commit to update website\n* Update Release Schedule\n\nA couple of weeks before election starts:\n\n* Send *TC Election Season* email\n\n  * ``tox -e venv -- template-emails election_season``\n\n\nTC Candidacy Round\n------------------\n\nWhen TC Candidacy starts:\n\n* Send *TC Nominations Kickoff* email\n\n  * ``tox -e venv -- template-emails nominations_kickoff``\n\nDuring the TC Candidacy round:\n\n* To +2 a candidate:\n\n  * check candidate profile using https://www.openstack.org/community/members/\n  * check filename is email address\n  * cursory check the candidacy statement\n\n* To +Workflow, check the previous +2 details\n\nA couple of days before the candidacy submission ends:\n\n* Send *TC Nominations Last Days* email\n\n  * ``tox -e venv -- template-emails nominations_last_days``\n\nWhen TC Candidacy submission ends:\n\n* Send *TC End Nominations* email\n\n  * ``tox -e venv -- template-emails end_nominations``\n\nOnce the email deadline is reached:\n\n* Ask the TC chair to tag the governance repository\n* Generate the electorate rolls.\n\n  * ``tox -evenv -- generate-rolls``\n\n\nTC Campaigning\n--------------\n\nThe TC election includes a period after the candidates are defined but before\nthe election, for candidates to answer questions from the community.  Open this\nwith:\n\n* ``tox -e venv -- template-emails campaigning_kickoff``\n\nTC Election Round\n-----------------\n\nBefore TC Election begins:\n\n* Send email to the mailing list to opt in to CIVS voting system using their\n  Gerrit email address in https://civs1.civs.us/cgi-bin/opt_in.pl\n\n  * ``tox -e venv -- template-emails voting_optin_civs``\n\n* Create CIVS page\n\n  * Title the poll: $RELEASE Technical Committee Election Poll\n  * Enable detailed ballot reporting\n  * Send to other officials to verify\n\n     * Check number of seats\n     * Check closing date\n\nWhen TC Election begins:\n\n* Upload rolls\n\n  * CIVS has a maximum number of electorate emails you can upload at a time\n    without crashing, limit to 500 at a time* Send *TC Voting Kickoff* email\n\n  * ``tox -e venv -- template-emails voting_kickoff``\n\n* Optionally send direct *voting opt-in CIVS direct reminder* email to the members\n  who are not activated to CIVS voting system\n  (for combined election, put -p argument as 'tc' value)\n\n  * ``tox -evenv -- template-emails voting_optin_civs_direct_reminder -p\n    \u003cproject_name\u003e``\n\nA couple of days before the TC Election ends:\n\n* Send *TC Voting Last Days* email\n\n  * ``tox -e venv -- template-emails voting_last_days``\n\nWhen TC Election ends:\n\n* Close the election\n* Run: ``tox -e venv -- close-election --round tc``\n\n  * ``edit doc/source/results/release/tc.yaml`` setting the winners to ``true``\n  * Commit change and push review\n\n* Send *TC Results* email\n\n  * This is ``doc/source/results/release/announce_tc.rst`` generated by\n    building the docs with ``tox -e docs`` after\n    ``doc/source/results/release/tc.yaml`` has been created and updated\n\n* Update ``reference/members`` in governance repository\n\n  * Add new members\n  * Remove ``chair`` and ``vice-chair`` from file\n  * Commit change and push review\n\n* Update ``tc-election-summary.py`` with election statistics\n* Optionally send *TC Election Statistics* email\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenstack%2Felection","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenstack%2Felection","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenstack%2Felection/lists"}