From 4fb21efa3aa8ac26106d8a196a86e7429db7dd8c Mon Sep 17 00:00:00 2001 From: Junghyun Kim Date: Sat, 21 Jan 2017 09:22:27 +0900 Subject: [PATCH] REPA: check permission only if "REPA_CHECK_PERMISSION" is set - buildmonitor Do not check build failure for _aggregate packages Change-Id: Id8c848d80f292bb6754a5bd6e682090271a9fe24 Signed-off-by: Junghyun Kim --- job_buildmonitor.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ job_repa.py | 9 +++++---- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/job_buildmonitor.py b/job_buildmonitor.py index 4c2a7a7..b45a8ee 100644 --- a/job_buildmonitor.py +++ b/job_buildmonitor.py @@ -43,6 +43,7 @@ TABLE : sr_status import os import sys import datetime +import re from time import sleep from common import buildmonitor_db @@ -291,6 +292,46 @@ def update_fail_status_for_sr_stage(project, bm_git_tag): query_data = ('F', curr_sr_status_id, info_stage_id, curr_build_project_id) buildmonitor_db.do_query(query, query_data) +def num_failed_packages_except_aggregate(build_project_id): + query = "SELECT bt.repository, bt.arch, ipa.package_name, bpa.build_status "\ + "FROM build_project bp, build_target bt, build_package bpa, info_package ipa "\ + "WHERE bp.id = bt.build_project_id " \ + "AND bt.id = bpa.build_target_id " \ + "AND ipa.id = bpa.info_package_id " \ + "AND bp.id = %s " \ + "ORDER BY bpa.id " + query_data = build_project_id + multi_build_status = buildmonitor_db.get_multi_values_from_query_data(query, query_data) + + build_status = {} + # Save the final build status for each package. + # This is required because a package can be build several times and + # only the last build status is meaningful in this case. + for each_build_status in multi_build_status: + repo = each_build_status[0] + arch = each_build_status[1] + pkg = each_build_status[2] + status = each_build_status[3] + + if repo not in build_status: + build_status[repo] = {} + if arch not in build_status[repo]: + build_status[repo][arch] = {} + build_status[repo][arch][pkg] = status.lower() + + failed_packages_cnt = 0 + # Count the number of failed packages except *_aggregate packages. + for repo in build_status.keys(): + for arch in build_status[repo].keys(): + for pkg in build_status[repo][arch].keys(): + if not re.match(".*_aggregate", pkg): + if build_status[repo][arch][pkg] == 'failed': + failed_packages_cnt += 1 + + + # return the number of failed packages except *_aggregate packages. + return failed_packages_cnt + def start_pre_create_snapshot_for_sr_stage(project, bm_git_tag, bm_start_datetime): print '[%s] enter start_pre_create_snapshot_for_sr_stage\n' % (__file__) @@ -336,6 +377,15 @@ def start_pre_create_snapshot_for_sr_stage(project, bm_git_tag, bm_start_datetim # [16_1208] change the build fail check method from build_target status to build_project status if curr_build_project_status == 'F': info_stage_status = 'F' + + # if only *_aggregate packages are failed, make it 'S' + if num_failed_packages_except_aggregate(curr_build_project_id) == 0: + print + print ('[%s] The build status is determined as failed, ' % (__file__)), + print 'but only _aggregate packages are failed.' + print '[%s] So, final build status is corrected to S!' % (__file__) + info_stage_status = 'S' + else: info_stage_status = 'S' diff --git a/job_repa.py b/job_repa.py index f7693e9..2741301 100644 --- a/job_repa.py +++ b/job_repa.py @@ -137,19 +137,20 @@ def main(): build = BuildService(obs_api, obs_user, obs_passwd) ret = 0 - + # home:prerelease:Tizen:Mobile:submit:tizen:20161025.103628 prerelease_proj=get_prerelease_project_name(obs_project, sr_tag) - if not check_permission(build, obs_project, repa_user): - raise LocalError("User %s does not have permission for OBS project %s" % (repa_user, obs_project)) + if os.getenv("REPA_CHECK_PERMISSION", 0): + if not check_permission(build, obs_project, repa_user): + raise LocalError("User %s does not have permission for OBS project %s" % (repa_user, obs_project)) if repa_decision == "accept": repa_accept(build, prerelease_proj, sr_tag, repa_comment) else: repa_reject(build, prerelease_proj, sr_tag, repa_comment) - return 0 + return 0 if __name__ == '__main__': try: -- 2.7.4