diff --git a/openstack_releases/cmds/validate.py b/openstack_releases/cmds/validate.py index 47ec762327..0f4ce29cb3 100644 --- a/openstack_releases/cmds/validate.py +++ b/openstack_releases/cmds/validate.py @@ -1774,8 +1774,9 @@ def main(): validate_model, validate_release_type, validate_pypi_permissions, - validate_pypi_readme, validate_build_sdist, + # Check readme after sdist build to slightly optimize things + validate_pypi_readme, validate_gitreview, validate_release_sha_exists, validate_existing_tags, diff --git a/openstack_releases/pythonutils.py b/openstack_releases/pythonutils.py index c979b2b5ff..008876b9a2 100644 --- a/openstack_releases/pythonutils.py +++ b/openstack_releases/pythonutils.py @@ -94,10 +94,16 @@ def check_readme_format(workdir, repo): LOG.debug('did not find %s, maybe %s is not a python project', setup_path, repo) return None + + # Check if the sdist build has been done + build_path = os.path.join(dest, 'dist') + if not os.path.exists(build_path): + build_sdist(workdir, repo) + # NOTE(dhellmann): This relies on validate being run via tox so - # that python3 is present and the docutils package is installed. + # that python3 is present and the twine package is installed. processutils.check_call( - ['python3', 'setup.py', 'check', '--restructuredtext', '--strict'], + ['twine', 'check', os.path.join(build_path, '*')], cwd=dest, ) diff --git a/requirements.txt b/requirements.txt index d1f8e24c09..eb03241912 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,7 @@ prompt_toolkit>=2.0.7 tqdm mwclient==0.8.1 jsonschema>=2.6.0 +twine>=1.13.0 # For release notes generation. Jinja2>=2.6 # BSD License (3 clause)