openstack-operator/hack/update-zuul-jobs.py

123 lines
3.5 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright 2020 VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import copy
import os
import sys
from ruamel import yaml
yaml = yaml.YAML()
images = os.listdir("images")
build_jobs = []
upload_jobs = []
for image in images:
files = []
if image != 'openstack-operator':
files = ['^images/%s/.*' % image]
deps = ['opendev-buildset-registry']
job_vars = {
'docker_images': [
{
'context': 'images/%s' % image,
'repository': 'vexxhost/%s' % image,
}
]
}
if image == 'openstack-operator':
job_vars['docker_images'][0]['context'] = '.'
job_vars['docker_images'][0]['dockerfile'] = 'images/openstack-operator/Dockerfile'
build_job = {
'job': {
'name': 'openstack-operator:images:build:%s' % image,
'parent': 'vexxhost-build-docker-image',
'provides': 'openstack-operator:image:%s' % image,
'dependencies': deps,
'vars': job_vars,
}
}
upload_job = {
'job': {
'name': 'openstack-operator:images:upload:%s' % image,
'parent': 'vexxhost-upload-docker-image',
'provides': 'openstack-operator:image:%s' % image,
'dependencies': deps,
'vars': job_vars,
}
}
promote_job = {
'job': {
'name': 'openstack-operator:images:promote:%s' % image,
'parent': 'vexxhost-promote-docker-image',
'vars': job_vars,
}
}
if files:
build_job['job']['files'] = files
upload_job['job']['files'] = files
promote_job['job']['files'] = files
project_config = {
'project': {
'check': {'jobs': [build_job['job']['name']]},
'gate': {'jobs': [upload_job['job']['name']]},
'promote': {'jobs': [promote_job['job']['name']]},
}
}
config = [
build_job,
upload_job,
promote_job,
project_config
]
if image == 'openstack-operator':
build_jobs.append(build_job['job']['name'])
upload_jobs.append(upload_job['job']['name'])
else:
build_jobs.append({'name': build_job['job']['name'], 'soft': True})
upload_jobs.append({'name': upload_job['job']['name'], 'soft': True})
with open("zuul.d/%s-jobs.yaml" % image, "w+") as fd:
yaml.dump(config, fd)
with open("zuul.d/functional-jobs.yaml") as fd:
data = yaml.load(fd)
for obj in data:
if 'project' in obj:
for job in obj['project']['check']['jobs']:
if 'openstack-operator:functional' in job:
job['openstack-operator:functional']['dependencies'] = \
build_jobs
for job in obj['project']['gate']['jobs']:
if 'openstack-operator:functional' in job:
job['openstack-operator:functional']['dependencies'] = \
upload_jobs
with open("zuul.d/functional-jobs.yaml", "w+") as fd:
yaml.dump(data, fd)