Reflect template and scripts with OIF

1. Let's use OIF rather than OSF for less confusion
2. Template: clarifying that candidates and prospective voters
   need to make sure that they have reestablished their individual
   memberships in the new Open Infrastructure Foundation

Change-Id: I79796124e5d1100c117426d97eebc52e2f04ef73
Signed-off-by: Ian Y. Choi <ianyrchoi@gmail.com>
This commit is contained in:
Ian Y. Choi
2025-08-08 01:09:37 +09:00
parent 5cb68b79fe
commit e46358ce30
10 changed files with 35 additions and 28 deletions

View File

@@ -82,8 +82,8 @@ During the PTL Candidacy round:
* To +Workflow, checks the previous +2 details, find another commits using
``--limit 5`` (optional)
* Check candidate list and fix badly generated names through changes to the
``exception.txt`` file or requesting the candidate to update their OSF member
profile.
``exception.txt`` file or requesting the candidate to update their OIF
member profile.
Once the email deadline is reached:

View File

@@ -27,11 +27,11 @@ def check_candidate(project_name, email, projects, limit=1, verbose=0):
found = 0
# OSF member validation with verbose output
# OIF member validation with verbose output
member = utils.lookup_member(email, verbose=1)
is_valid = member.get('data', []) != []
if is_valid is False:
print('Email address not found in OSF member list')
print('Email address not found in OIF member list')
return found
# Print member affiliation if available

View File

@@ -30,7 +30,7 @@ def print_member(filepath, verbose=0):
member = utils.lookup_member(email, verbose=verbose)
member_id = member.get('data', [{}])[0].get('id')
base = 'https://openinfra.org/a/community/members'
print('OSF member profile: %s/%s' % (base, member_id))
print('OIF member profile: %s/%s' % (base, member_id))
def main():

View File

@@ -60,7 +60,7 @@ def validate_project(filepath, projects):
def validate_member(filepath, verbose=0):
print('Validate email address is OSF member')
print('Validate email address is OIF member')
print('------------------------------------')
email = utils.get_email(filepath)

View File

@@ -32,6 +32,6 @@ class ElectionException(Exception):
class MemberNotFoundException(ElectionException):
msg_fmt = ('No Openstack Foundation (OSF) data found for %(email)s please '
'check that %(email)s is a valid email address and linked to a '
'valid OSF account')
msg_fmt = ('No Open Infrastructure Foundation (OIF) data found for'
'%(email)s please check that %(email)s is a valid email address'
' and linked to a valid OIF account')

View File

@@ -599,20 +599,20 @@ def main(options):
'SKIPPING MALFORMED OWNER: no preferred or extra '
'addresses found for account %s' % owner, file=sys.stderr)
continue
# Record OSF member profile ID when it exists
# Record OIF member profile ID when it exists
for email in [owners[owner]['preferred']] + owners[owner]['extra']:
profile = utils.lookup_member(email, verbose=options.verbose)
if profile['data']:
owners[owner]['member'] = profile['data'][0]['id']
break
# If not a member, record non-member OSF profile ID when there is one
# If not a member, record non-member OIF profile ID when there is one
if not profile['data']:
for email in [owners[owner]['preferred']] + owners[owner]['extra']:
profile = utils.lookup_osf(email, verbose=options.verbose)
profile = utils.lookup_oif(email, verbose=options.verbose)
if profile['data']:
owners[owner]['nonmember'] = profile['data'][0]['id']
break
# Extract country and affiliations from the OSF profile
# Extract country and affiliations from the OIF profile
if profile['data']:
if 'country' in profile['data'][0]:
owners[owner]['country'] = profile['data'][0]['country']

View File

@@ -25,6 +25,13 @@ candidates stepping forward the available TC positions.
All members of the community are encouraged to confirm their email
address as described at: https://governance.openstack.org/election/#electorate
All candidates and prospective voters need to make sure they have
reestablished their individual memberships in the Open Infrastructure
Foundation https://openinfra.org/a/renew-membership (if this URL redirects you
to your profile page, your membership is already renewed and nothing more is
required), otherwise their nominations won't be verified and ballots will not
be sent.
There will be further announcements posted to the mailing list as
action is required from the electorate or candidates. This email
is for information purposes only.

View File

@@ -14,16 +14,16 @@ candidates/{{ release }}/<Project_Name or "TC">/<email_address>
(for example, "candidates/{{ release }}/TC/stacker@example.org").
The name of the file should match an email address for your current
OpenStack Foundation Individual Membership. Take this opportunity to
ensure that your OSF member profile contains current information:
https://www.openstack.org/profile/
Foundation Individual Membership. Take this opportunity to
ensure that your Open Infrastructure Foundation member profile contains
current information: https://openinfra.org/a/profile
Any OpenStack Foundation Individual Member can propose their
Any Open Infrastructure Foundation Individual Member can propose their
candidacy for an available, directly-elected seat on the Technical
Committee.
In order to be an eligible candidate for PTL you must be an
OpenStack Foundation Individual Member. PTL candidates must also
Open Infrastructure Foundation Individual Member. PTL candidates must also
have contributed to the corresponding team during the {{ start_release }} to {{ end_release }}
timeframe, {{ time_frame }}. Your
Gerrit account must also have a verified email address matching the
@@ -31,11 +31,11 @@ one used in your candidacy filename.
Both PTL and TC elections will be held from {{ election_start }}
through to {{ election_end }}. The electorate for the TC election
are the OpenStack Foundation Individual Members who have a code
are the Open Infrastructure Foundation Individual Members who have a code
contribution to one of the official teams over the {{ start_release }} to {{ end_release }}
timeframe, {{ time_frame }}, as well as
any Extra ACs who are acknowledged by the TC. The electorate for a
PTL election are the OpenStack Foundation Individual Members who
PTL election are the Open Infrastructure Foundation Individual Members who
have a code contribution over the {{ start_release }} to {{ end_release }} timeframe,
{{ time_frame }}, in a deliverable
repository maintained by the team which the PTL would lead, as
@@ -60,9 +60,9 @@ The electorate is requested to confirm their email addresses in
Gerrit prior to {{ email_deadline }}, so that the emailed ballots
are sent to the correct email address. This email address should
match one which was provided in your foundation member profile as
well. Gerrit account information and OSF member profiles can be
updated at https://review.openstack.org/#/settings/contact and
https://www.openstack.org/profile/ accordingly.
well. Gerrit account information and Foundation individual member
profiles can be updated at https://review.opendev.org/#/settings/contact
and https://openinfra.org/a/profile accordingly.
If you have any questions please be sure to either ask them on the
mailing list or to the elections officials:

View File

@@ -24,7 +24,7 @@ one of the official project teams' deliverable repositories[1]:
* find the ID of at least one commit merged to an official
deliverable repo[1] over the current and previous cycles, confirm
you are an OpenStack Foundation Individual Member[2], and then
you are an Open Infrastructure Foundation Individual Member[2], and then
email the election officials[3] or get in touch in the
#openstack-elections channel on the Freenode IRC network.

View File

@@ -107,8 +107,8 @@ def get_schedule_data(series):
'branch/master/doc/source/%s/schedule.yaml' % (series))
def lookup_osf(email, membership_type=None, verbose=0):
"""A requests wrapper to querying the OSF member directory API"""
def lookup_oif(email, membership_type=None, verbose=0):
"""A requests wrapper to querying the OIF member directory API"""
params = {
'expand': 'groups,all_affiliations,all_affiliations.organization',
@@ -143,9 +143,9 @@ def current_member_affiliation(member):
def lookup_member(email, verbose=0):
"""Lookup profiles of OSF members"""
"""Lookup profiles of OIF members"""
return lookup_osf(
return lookup_oif(
email=email, membership_type='Individual', verbose=verbose)