From 8d81525d40506127cef47b9afaca96b3f7a5bc9e Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Thu, 21 Jul 2016 14:05:24 -0400 Subject: [PATCH] validate release jobs based on release type The xstatic release type is only used with a specific release job, so set up the job validation to look for the expected jobs appropriately. Change-Id: If55c7efe07eb80f2ab252f2d531dace0f2e57487 Signed-off-by: Doug Hellmann --- openstack_releases/cmds/validate.py | 3 +- openstack_releases/project_config.py | 57 ++++++++++++++++++---------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/openstack_releases/cmds/validate.py b/openstack_releases/cmds/validate.py index 13fadeafa7..4ee29a605a 100644 --- a/openstack_releases/cmds/validate.py +++ b/openstack_releases/cmds/validate.py @@ -179,7 +179,8 @@ def main(): # Check for release jobs (if we ship a tarball) if link_mode != 'none': pce = project_config.require_release_jobs_for_repo( - deliverable_info, zuul_layout, project['repo']) + deliverable_info, zuul_layout, project['repo'], + release_type) for msg, is_error in pce: print(msg) if is_error: diff --git a/openstack_releases/project_config.py b/openstack_releases/project_config.py index c93df4799c..bf2e584df6 100644 --- a/openstack_releases/project_config.py +++ b/openstack_releases/project_config.py @@ -46,7 +46,21 @@ def get_zuul_layout_data(url=ZUUL_LAYOUT_URL): return raw -def require_release_jobs_for_repo(deliverable_info, zuul_layout, repo): +# Which jobs are needed for which release types. +_RELEASE_JOBS_FOR_TYPE = { + 'std': [ + 'openstack-server-release-jobs', + 'publish-to-pypi', + 'puppet-tarball-jobs', + ], + 'xstatic': [ + 'xstatic-publish-jobs', + ], +} + + +def require_release_jobs_for_repo(deliverable_info, zuul_layout, repo, + release_type): """Check the repository for release jobs. Returns a list of tuples containing a message and a boolean @@ -78,24 +92,27 @@ def require_release_jobs_for_repo(deliverable_info, zuul_layout, repo): ] # NOTE(dhellmann): We don't mess around looking for individual # jobs, because we want projects to use the templates. - num_release_jobs = sum(('openstack-server-release-jobs' in templates, - 'publish-to-pypi' in templates, - 'xstatic-publish-jobs' in templates, - 'puppet-tarball-jobs' in templates)) - if num_release_jobs == 0: - errors.append( - ('%s no release job specified, ' - 'should be one of openstack-server-release-jobs, ' - 'publish-to-pypi, xstatic-publish-jobs ' - 'or puppet-tarball-jobs for %s or no release will be ' - 'published' % (ZUUL_LAYOUT_FILENAME, repo), True) - ) - elif num_release_jobs > 1: - errors.append( - ('%s multiple release jobs specified, ' - 'should be *one* of openstack-server-release-jobs, ' - 'publish-to-pypi, xstatic-publish-jobs or ' - 'puppet-tarball-jobs for %s ' - % (ZUUL_LAYOUT_FILENAME, repo), False) + expected_jobs = _RELEASE_JOBS_FOR_TYPE.get( + release_type, + _RELEASE_JOBS_FOR_TYPE['std'], + ) + if expected_jobs: + num_release_jobs = sum( + j in templates + for j in expected_jobs ) + if num_release_jobs == 0: + errors.append( + ('%s no release job specified for %s, ' + 'should be one of %r or no release will be ' + 'published' % (ZUUL_LAYOUT_FILENAME, repo, expected_jobs), + True) + ) + elif num_release_jobs > 1: + errors.append( + ('%s multiple release jobs specified for %s, ' + 'should be *one* of %r' + % (ZUUL_LAYOUT_FILENAME, repo, expected_jobs), + False) + ) return errors