Merge "Merge project pipeline definitions" into feature/zuulv3

This commit is contained in:
Zuul 2017-09-26 00:12:41 +00:00 committed by Gerrit Code Review
commit c7df2be8db
1 changed files with 52 additions and 9 deletions

View File

@ -156,6 +156,36 @@ def expand_project_names(required, full):
return projects
def list_to_project_dicts(projects):
project_dicts = dict()
for project in projects:
project_dicts[project['project']['name']] = project['project']
return project_dicts
def project_dicts_to_list(project_dicts):
project_config = []
for key in sorted(project_dicts.keys()):
project_config.append(dict(project=project_dicts[key]))
return project_config
def merge_project_dict(project_dicts, name, project):
if name not in project_dicts:
project_dicts[name] = project
return
old = project_dicts[name]
for key in project.keys():
if key not in old:
old[key] = project[key]
elif isinstance(old[key], list):
old[key].extend(project[key])
elif isinstance(old[key], dict) and 'jobs' in old[key]:
old[key]['jobs'].extend(project[key]['jobs'])
return
# from :
# http://stackoverflow.com/questions/8640959/how-can-i-control-what-scalar-form-pyyaml-uses-for-my-data flake8: noqa
def should_use_block(value):
@ -1183,7 +1213,8 @@ class ZuulMigrate:
zuul_d = os.path.join(self.outdir, 'zuul.d')
orig = os.path.join(zuul_d, '01zuul.yaml')
job_outfile = os.path.join(zuul_d, '99legacy-jobs.yaml')
project_outfile = os.path.join(zuul_d, '99legacy-projects.yaml')
project_outfile = os.path.join(zuul_d, 'projects.yaml')
projects = []
project_template_outfile = os.path.join(
zuul_d, '99legacy-project-templates.yaml')
if not os.path.exists(self.outdir):
@ -1192,7 +1223,14 @@ class ZuulMigrate:
os.makedirs(zuul_d)
if os.path.exists(zuul_yaml) and self.move:
os.rename(zuul_yaml, orig)
return job_outfile, project_outfile, project_template_outfile
elif os.path.exists(project_outfile):
projects = ordered_load(open(project_outfile, 'r'))
return dict(
job_outfile=job_outfile,
project_outfile=project_outfile,
projects=projects,
project_template_outfile=project_template_outfile,
)
def makeNewJobs(self, old_job, parent: Job=None):
self.log.debug("makeNewJobs(%s)", old_job)
@ -1420,9 +1458,13 @@ class ZuulMigrate:
return new_project
def writeJobs(self):
job_outfile, project_outfile, template_outfile = self.setupDir()
output_dir = self.setupDir()
job_outfile = output_dir['job_outfile']
project_outfile = output_dir['project_outfile']
project_config = output_dir['projects']
project_dicts = list_to_project_dicts(project_config)
project_template_outfile = output_dir['project_template_outfile']
job_config = []
project_config = []
template_config = []
for template in self.layout.get('project-templates', []):
@ -1438,10 +1480,11 @@ class ZuulMigrate:
project_names = []
for project in self.layout.get('projects', []):
project_names.append(project['name'])
project_config.append(
{'project': self.writeProject(project)})
project_config = sorted(
project_config, key=lambda project: project['project']['name'])
project_dict = self.writeProject(project)
merge_project_dict(
project_dicts, project['name'],
self.writeProject(project))
project_config = project_dicts_to_list(project_dicts)
seen_jobs = []
for job in sorted(self.job_objects, key=lambda job: job.name):
@ -1460,7 +1503,7 @@ class ZuulMigrate:
# Insert an extra space between top-level list items
yamlout.write(ordered_dump(job_config).replace('\n-', '\n\n-'))
with open(template_outfile, 'w') as yamlout:
with open(project_template_outfile, 'w') as yamlout:
# Insert an extra space between top-level list items
yamlout.write(
ordered_dump(template_config).replace('\n-', '\n\n-'))