query_data = (sr_stage_status, curr_sr_status_id, info_stage_id, curr_build_project_id)
buildmonitor_db.do_query(query, query_data)
-def start_pre_create_snapshot_for_sr_stage(project, bm_git_tag, bm_start_datetime, bBuildFail):
+def start_pre_create_snapshot_for_sr_stage(project, bm_git_tag, bm_start_datetime, bBuildFail, BuildFailReason):
print '[%s] enter start_pre_create_snapshot_for_sr_stage\n' % (__file__)
# get curr_sr_status_id
print '[%s] bBuildFail(%s)\n' % (__file__, bBuildFail)
if bBuildFail == True:
info_stage_status = 'F'
+ if BuildFailReason == 'Cycles':
+ info_stage_status = 'C'
else:
info_stage_status = 'S'
bm_git_tag = content.get("bm_git_tag")
bm_start_datetime = content.get("bm_start_datetime")
bBuildFail = content.get("bBuildFail")
+ BuildFailReason = content.get("BuildFailReason", "")
unresolvable_broken_packages = content.get("unresolvable_broken_packages")
# func call
if bm_stage == 'Pre_Snap_Start':
print '[%s][Pre_Snap_Start]\n' % (__file__)
- start_pre_create_snapshot_for_sr_stage(project, bm_git_tag, bm_start_datetime, bBuildFail)
+ start_pre_create_snapshot_for_sr_stage(project, bm_git_tag, bm_start_datetime, bBuildFail, BuildFailReason)
# [17_0110] TRBS
if bm_stage == '[TRBS]_Pre_Snap_Start':
from common.buildservice import BuildService
from common.backenddb import BackendDB
from common.snapshot import snapshot_project_enabled
-from common.prerelease import is_prerelease_project
+from common.prerelease import is_prerelease_project, get_info_from_prerelease_name
from common.trbs import is_trbs_project
+from common import buildmonitor_db
def isReadyForPrerelease(build, project):
"""
if(isReadyForPrerelease(build, project)):
print 'All the repositories are published for project %s.' \
'Triggering the prerelease.' % (project)
+ try:
+ target_project_name = get_info_from_prerelease_name(project)[0]
+ buildmonitor_db.connect_db()
+ query = 'SELECT build_cycle_check FROM main_project ' \
+ 'WHERE name=%s ;'
+ ret_data = buildmonitor_db.get_value_from_query_data(query, (target_project_name,))
+ obs_event_fields['build_cycle_check'] = int(ret_data)
+ buildmonitor_db.disconnect_db()
+ except Exception as err:
+ buildmonitor_db.disconnect_db()
+ print repr(err)
trigger_next('#PRERELEASE#%s#%s' %(project,event_type),obs_event_fields)
elif(is_trbs_project(project)):
if(isReadyForTrbs(build, project)):
raise SystemExit('This job do NOT support to carry parameters')
sys.exit(main(trigger_info(os.getenv('para'))))
+
import shutil
import base64
import datetime
+import xml.etree.ElementTree as ElementTree
from common.repomaker import find_files, RepoMaker, RepoMakerError
from common.buildtrigger import trigger_info, trigger_next
return True
return False
+def get_cycle_packages(build, project, repo_arch):
+ for repo in repo_arch:
+ for idx, item in enumerate(repo_arch[repo]):
+ cycle_packages = []
+ dep_xml = build.get_dependson(project, repo, item.get('arch'))
+ dep_tree = ElementTree.fromstring(dep_xml)
+ for cycle in dep_tree.findall('cycle'):
+ for cycle_child in cycle.findall('package'):
+ cycle_packages.append(cycle_child.text)
+ repo_arch[repo][idx]['cycles'].extend(list(set(cycle_packages)))
+ return repo_arch
+
+def cycle_build_added(build, prerelease_project, source_project):
+
+ prerelease_repo_arch = {}
+ for x in build.get_targets(prerelease_project):
+ repo, arch = x.split('/')
+ if repo not in prerelease_repo_arch:
+ prerelease_repo_arch[repo] = []
+ prerelease_repo_arch[repo].append({'arch': arch, 'cycles': []})
+
+ prerelease_repo_arch = get_cycle_packages(build, prerelease_project, prerelease_repo_arch)
+
+ for repo in prerelease_repo_arch:
+ for arch in prerelease_repo_arch[repo]:
+ if len(arch.get('cycles')) >= 1:
+ return prerelease_repo_arch
+
+ return None
+
def get_unresolvable_broken_packages(unresolvable_broken_failed_status):
unresolvable_broken_packages = {}
print 'buildstatus=%s' %(buildstatus)
build.update_buildstatus(buildstatus,project)
global bBuildFail
+ global BuildFailReason
unresolvable_broken_failed_status = build.get_package_build_result(project, ("unresolvable", "broken", "failed"))
bBuildFail = check_build_fail(unresolvable_broken_failed_status)
+ if bBuildFail == True:
+ BuildFailReason = "Build"
+ else:
+ BuildFailReason = ""
if buildmonitor_enabled:
+ unresolvable_broken_packages = get_unresolvable_broken_packages(unresolvable_broken_failed_status)
+ if content.get('build_cycle_check', 0) == 1:
+ try:
+ cycle_packages = cycle_build_added(build, project, info.get('obs_target_prj'))
+ if cycle_packages is not None:
+ print 'Cycle build detected. %s \nSet bBuildFail True' % cycle_packages
+ bBuildFail = True
+ BuildFailReason = 'Cycles'
+ # Update cycle info
+ for cp_repo in cycle_packages:
+ for cp_item in cycle_packages[cp_repo]:
+ for cp_pkg in cp_item.get('cycles'):
+ unresolvable_broken_packages[cp_repo][cp_item.get('arch')][cp_pkg] = 'cycle'
+ except Exception as err:
+ print repr(err)
+
bm_git_tag = info['git_tag']
#buildmonitor.start_pre_create_snapshot_for_sr_stage(project, bm_git_tag, bm_start_datetime)
#buildmonitor.start_pre_create_snapshot_for_build_snapshot(project, bm_start_datetime)
"bm_git_tag" : bm_git_tag,
"bm_start_datetime": str(bm_start_datetime),
"bBuildFail": bBuildFail,
- "unresolvable_broken_packages": get_unresolvable_broken_packages(unresolvable_broken_failed_status)
+ "BuildFailReason": BuildFailReason,
+ "unresolvable_broken_packages": unresolvable_broken_packages
}
trigger_next("BUILD-MONITOR-1-%s" % bm_stage, bm_data)
except LocalError, error:
print error
sys.exit(1)
+