2) Add submitter on prorelease project.
3) Add chksnap option on prerelease project.
4) Unknown published status skipping prerelease repository creation as OBS
Change-Id: Ie0a1b3fc43770b3c7e88f4747eb10d109027341d
] = result.get('state')
return targets
+ def get_repo_state_summary(self, project):
+ """Get repo's state summary of the project"""
+ targets = {}
+ query = []
+ query.append('view=summary')
+
+ u = core.makeurl(self.apiurl, ['build', project, '_result'],query=query)
+ try:
+ f = core.http_GET(u)
+ tree = ElementTree.fromstring(''.join(f.readlines()))
+ except urllib2.HTTPError, err:
+
+ raise err
+
+ for result in tree.findall('result'):
+ targets[('/'.join((result.get('repository'), result.get('arch')))) \
+ ] = result.get('state')
+ return targets
+
def get_repo_config(self, project, repo):
"""
get_repo_config(project) -> string
projects = saved_info.get('projects') or []
images = saved_info.get('images') or []
+ submitter = saved_info.get('submitter') or []
saved_info.update(info)
if 'projects' in info:
saved_info['projects'] = list(set(projects + info['projects']))
+ if 'submitter' in info:
+ if not info['submitter'] in submitter:
+ saved_info['submitter'] = (submitter + ',' + info['submitter'])
+ else:
+ saved_info['submitter'] = submitter
if 'images' in info:
if info['images']:
# remove the old one if already exist
redis_port = int(os.getenv("REDIS_PORT"))
backenddb = BackendDB(redis_host, redis_port)
- # Check whether all the repos published, we skip it if any one of
- # them not published
- repo_status = build.get_repo_state(project)
- for target_arch, status in repo_status.items():
- if status not in ['published', 'unpublished', 'unknown']:
- print "The project: %s target: %s repo is still under %s, " \
- "skip now" % (project, target_arch, status)
-
- return 0
-
- # whether project is not enabled
- if not snapshot_project_enabled(backenddb, project):
- print "Skipping, project isn't found in repo.yaml"
- return 0
-
repo_data = make_repo(project, backenddb, base_path, live_repo_base)
# update/create the latest repo link
import os
from common.buildtrigger import trigger_next, trigger_info
+from common.buildservice import BuildService
+from common.backenddb import BackendDB
+from common.snapshot import snapshot_project_enabled
+from common.prerelease import is_prerelease_project
+def isReadyForPrerelease(build, project):
+
+ # whether Prerelease project is not enabled
+ repo_status = build.get_repo_state_summary(project)
+ for target_arch, status in repo_status.items():
+ if status not in ['published', 'unpublished']:
+ print "Skipping prerelease repository creation as OBS "\
+ "repository: %s/%s is still under %s, skip now." \
+ % (project,target_arch, status)
+ return False
+ return True
+
+def isReadyForCreateSnapshot(build, backenddb, project):
+
+ # whether project is not enabled
+ if not snapshot_project_enabled(backenddb, project):
+ print "Skipping creating snapshot, project isn't found in repo.yaml"
+ return False
+
+ # Check whether all the repos published, we skip it if any one of
+ # them not published
+ repo_status = build.get_repo_state_summary(project)
+ for target_arch, status in repo_status.items():
+ if status not in ['published', 'unpublished']:
+ print "The project: %s target: %s repo is still under %s, " \
+ "skip creating snapshot now" % (project, target_arch, status)
+ return False
+
+ return True
def main(obs_event_fields):
"""The main body"""
- trigger_next('#%s#%s' %(obs_event_fields.get('project') or
- obs_event_fields.get('sourceproject', ''),
- obs_event_fields['event_type']),
- obs_event_fields)
+
+ project = obs_event_fields.get('project') or obs_event_fields.get('sourceproject', '')
+ event_type = os.getenv('event_type')
+ if(event_type == 'OBS_REPO_PUBLISHED'):
+ obs_api = os.getenv("OBS_API_URL")
+ obs_user = os.getenv("OBS_API_USERNAME")
+ obs_passwd = os.getenv("OBS_API_PASSWD")
+
+ build = BuildService(obs_api, obs_user, obs_passwd)
+ # Init backend database
+ redis_host = os.getenv("REDIS_HOST")
+ redis_port = int(os.getenv("REDIS_PORT"))
+ backenddb = BackendDB(redis_host, redis_port)
+ if(is_prerelease_project(project)):
+ if(isReadyForPrerelease(build, project)):
+ print 'All the repositories are published for project %s.' \
+ 'Triggering the prerelease.' % (project)
+ trigger_next('#PRERELEASE#%s#%s' %(project,event_type),obs_event_fields)
+ else:
+ if(isReadyForCreateSnapshot(build, backenddb, project)):
+ print 'All the repositories are published for project %s.' \
+ 'Triggering the creating snapshot job..'%(project)
+ trigger_next('#SNAP#%s#%s' %(project,event_type),obs_event_fields)
+ else:
+ trigger_next('#%s#%s' %(project,obs_event_fields['event_type']),
+ obs_event_fields)
if __name__ == '__main__':
# Jenkins task dispatcher, receive events from OBS jenkins notify plugin
"url": url}]
}
+ saveinfo = build.get_info(project)
+ #print "images count : %s %s \n" % ( len(saveinfo['images']), saveinfo['images_count'])
+ if len(saveinfo['images']) + 1 >= saveinfo['images_count']:
+ # clear chksnap flag
+ info['chksnap'] = '0'
build.update_info(info, project)
if __name__ == "__main__":
images_ks (truple list): [(ks_file_name, ks_file_content),]
build_id (str): the prerelease repo build_id
"""
+ count = 0
for index, (ksname, kickstart) in enumerate(images_ks.items()):
+ count += 1
name = ksname.replace('.ks', '')
data = {'name': name,
'kickstart': kickstart,
})
trigger_next('%s/image_trigger_%s_%s' % (os.getenv('WORKSPACE'),
repo_name, index), data)
+ return count
def make_repo(project, repo, backenddb, base_url, base_path,
live_repo_base, build):
Raises:
LocalError if can't create repos or can't find image configurations
"""
+ images_count = 0
# Make build id from latest snapshot + project suffix
target_project, tstamp = get_info_from_prerelease_name(project)
repomaker.gen_image_info(images_ks)
# trigger image creation jobs
- trigger_image_creation(images_ks, prerelease.build_id,
+ images_count += trigger_image_creation(images_ks, prerelease.build_id,
os.path.join(prerelease.dir,
prerelease.build_id),
project, base_url, repo['Name'])
# reset 'images' and add download_url meta info
- build.update_info({'images': [],
+ build.update_info({'images_count': images_count,
+ 'images': [],
'download_url': os.path.join(base_url,
prerelease.dir,
prerelease.build_id)},
if action == 'create_images':
repo = content.get("repo")
-
- # Check whether all the repos published, we skip it if any one of
- # them not published
- repo_status = build.get_repo_state(project)
- for target_arch, status in repo_status.items():
- if status not in ['published', 'unpublished', 'unknown']:
- print "Skipping prerelease repository creation as OBS "\
- "repository: %s/%s/%s is still under %s, skip now." \
- % (project, repo, target_arch, status)
-
+ info = build.get_info(project)
+ try:
+ if (info['chksnap'] == '1'):
+ print "Already created snapshot....."
return 0
+ elif (info['chksnap'] == '0'):
+ build.update_info({'chksnap': '1'}, project)
+ print "create snapshot."
+ except:
+ build.update_info({'chksnap': '1'}, project)
# cleanup src.rpm files on Live repo
# we don't used src.rpm files on prerelease project.
'git_commit': git_revision,
'obs_url': os.path.join(os.getenv('OBS_URL'), \
'project/show?project=%s' % obs_project),
+ 'chksnap' : '0',
'images': []}
- if submitter:
- info['submitter'] = escape(submitter)
if build.exists(obs_project):
+ if submitter:
+ info['submitter'] = submitter
+
# update project info
build.update_info(info, obs_project)
# unlink the project to upload packages
except ObsError, error:
print 'Modify the meta conf to unlink failed: %s' % error
else:
+ if submitter:
+ info['submitter'] = escape(submitter)
+
if not build.exists(obs_target_prj):
raise LocalError("Target project %s doesn't exist" % obs_target_prj)
try: