From 556e08a29f2a1380c87b7e50caa0b09d4ad73cb5 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Tue, 20 Feb 2018 13:34:01 -0500 Subject: [PATCH] support pypi-name in repository-settings Add a repository-settings field for a name to override the name used on the python package index. Change-Id: Ie4dc2226ea0765919a9e6eb400983260094784a7 Signed-off-by: Doug Hellmann --- README.rst | 6 +++++ openstack_releases/cmds/validate.py | 39 ++++++++++++++++------------- openstack_releases/schema.yaml | 2 ++ 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/README.rst b/README.rst index c09cf89354..a3aed156aa 100644 --- a/README.rst +++ b/README.rst @@ -397,6 +397,12 @@ The top level of a deliverable file is a mapping with keys: This repository is no longer used, but was present in old versions of a deliverable. + ``pypi-name`` + An optional name for the deliverable on pypi.python.org. This + value is only needed if the name on PyPI does not match the + canonicalized output of ``python setup.py --name``, such as if it + uses capitalized letters ("DragonFlow" instead of "dragonflow"). + ``release-type`` This (optional) key sets the level of validation for the versions numbers. diff --git a/openstack_releases/cmds/validate.py b/openstack_releases/cmds/validate.py index 62a373a014..20dcfd44f5 100644 --- a/openstack_releases/cmds/validate.py +++ b/openstack_releases/cmds/validate.py @@ -529,7 +529,7 @@ def validate_pypi_permissions(deliverable_info, zuul_projects, workdir, header('Validate PyPI Permissions') - for repo in deliverable_info['repository-settings'].keys(): + for repo, repo_settings in deliverable_info['repository-settings'].items(): job_templates = zuul_projects.get(repo, {}).get('templates', []) @@ -547,35 +547,40 @@ def validate_pypi_permissions(deliverable_info, zuul_projects, workdir, print('{} publishes to PyPI via {}'.format(repo, pypi_jobs)) - try: - sdist = pythonutils.get_sdist_name(workdir, repo) - except Exception as err: - mk_warning( - 'Could not determine the sdist name ' - 'for {} to check PyPI permissions: {}'.format( - repo, err) - ) - continue + pypi_name = repo_settings.get('pypi-name') - print('sdist name {!r}'.format(sdist)) - uploaders = pythonutils.get_pypi_uploaders(sdist) + if not pypi_name: + try: + sdist = pythonutils.get_sdist_name(workdir, repo) + except Exception as err: + mk_warning( + 'Could not determine the sdist name ' + 'for {} to check PyPI permissions: {}'.format( + repo, err) + ) + continue + + print('using sdist name as pypi-name {!r}'.format(sdist)) + pypi_name = sdist + + uploaders = pythonutils.get_pypi_uploaders(pypi_name) if not uploaders: # Names like "openstack_requirements" are translated to # "openstack-requirements" in the PyPI API. - sdist = sdist.replace('_', '-') - print('retrying with sdist name {!r}'.format(sdist)) - uploaders = pythonutils.get_pypi_uploaders(sdist) + alt_name = pypi_name.replace('_', '-') + print('retrying with pypi_name name {!r}'.format(alt_name)) + uploaders = pythonutils.get_pypi_uploaders(alt_name) if not uploaders: mk_error( 'could not find users with permission to upload packages ' - 'for {}. Is the sdist name correct?'.format(sdist) + 'for {}. Is the sdist name correct?'.format(pypi_name) ) elif 'openstackci' not in uploaders: mk_error( 'openstackci does not have permission to upload packages ' 'for {}. Current owners include: {}'.format( - sdist, ', '.join(sorted(uploaders))) + pypi_name, ', '.join(sorted(uploaders))) ) diff --git a/openstack_releases/schema.yaml b/openstack_releases/schema.yaml index 678f32678c..bb235b7327 100644 --- a/openstack_releases/schema.yaml +++ b/openstack_releases/schema.yaml @@ -34,6 +34,8 @@ properties: type: "object" properties: additionalProperties: False + pypi-name: + type: "string" flags: type: "array" items: