job_pre_release: prepare live repos for image creation
authorHasan Wan <hasan.wan@intel.com>
Fri, 1 Mar 2013 08:25:33 +0000 (16:25 +0800)
committerHasan Wan <hasan.wan@intel.com>
Wed, 6 Mar 2013 07:10:19 +0000 (15:10 +0800)
Change-Id: Iee4f57711d2056bc2a300c627f387f652795324d
Signed-off-by: Hasan Wan <hasan.wan@intel.com>
job_pre_release.py
testprojects/prerelease.py

index ba74db0..e71e164 100755 (executable)
@@ -4,16 +4,16 @@
 """This job will help submit the changes to a temporary OBS project when SR created.
 """
 
+import os
+import sys
+import re
+
 from common.envparas import export
 from common import utils
 from common.git import Git, clone_gitproject
-from common.tempbuildpkg import TempBuildService
-from common.buildtrigger import trigger_info
-from testprojects.prerelease import PreRelease
-import os
-import tempfile
-import time
-import sys
+from common.tempbuildpkg import TempBuildService, ProjectRepository
+from common.buildtrigger import trigger_info, trigger_next
+from testprojects.prerelease import PreRelease, PreRelease2
 
 envparas = ['JENKINS_HOME',
             'WORKSPACE',
@@ -59,6 +59,55 @@ def cleanup(prerelease):
     else:
         print "WARN: Temporary repo doesn't exist!"
 
+
+def create_images(prerelease):
+
+    linked, depended = prerelease.get_parent_project()
+    repo = ProjectRepository(project)
+
+    print linked, depended
+    for link_prj in linked:
+        # TODO: get_url from repo.yaml configuration
+        link_prj_path = repo.get_latest_repo_path(link_prj) or '/srv/snapshots/trunk/common/latest'
+        print link_prj_path
+        repo.extract_image_ks(repo.get_live_repo_path(),
+                              link_prj_path)
+
+    ks_info = repo.get_valid_image_ks(os.path.join(repo.get_live_repo_path(),
+                                                   'builddata'))
+
+    url_replace = {}
+
+    new_repo_line = "repo --name=prerelease --baseurl=%s --save  --ssl_verify=no --priority 1" \
+        %repo.get_live_repo_pub_url()
+
+    # TODO: url_replace
+    url_replace['Tizen-main'] = ""
+    url_replace['Tizen-base'] = ""
+    for ks in ks_info.keys():
+        new_ks_lines = []
+        with open(os.path.join(repo.get_live_repo_path(),'builddata',
+                               ks_info[ks]['path'])) as ks_fh:
+            for line in ks_fh.readlines():
+                if line.startswith('repo') and \
+                        'baseurl=' in line and \
+                        '@BUILD_ID@' in line:
+                    for name in url_replace.keys():
+                        if line.find('--name=%s' %name) > 0:
+                            line = re.sub(r'--baseurl=http.*/repos/([a-zA-z\-]*)',
+                                          r'--baseurl=%s' %url_replace[name],
+                                          line)
+                new_ks_lines.append(line.strip())
+        print new_ks_lines
+        new_ks_lines.insert(new_ks_lines.index('%packages')-1,
+                            new_repo_line)
+
+        ks_info[ks]['kickstart'] = '\n'.join(new_ks_lines)
+
+        for index, image_info in enumerate(ks_info.values()):
+            trigger_next('%s/image_trigger_%s' %(WORKSPACE, index),
+                         image_info)
+
 if __name__ == '__main__':
 
     action = sys.argv[1]
@@ -66,11 +115,18 @@ if __name__ == '__main__':
 
     locals().update(trigger_info(TRIGGER_INFO))
 
-    prerelease = PreRelease(OBS_REQ_PRJ, OBS_API_USERNAME, GIT_TAG, GIT_PROJECT)
-
     if action == 'create':
+        prerelease = PreRelease(OBS_REQ_PRJ, OBS_API_USERNAME,
+                                GIT_TAG, GIT_PROJECT)
         create(prerelease)
     elif action == 'cleanup':
+        prerelease = PreRelease(OBS_REQ_PRJ, OBS_API_USERNAME,
+                                GIT_TAG, GIT_PROJECT)
         cleanup(prerelease)
+    elif action == 'create_images':
+        build = TempBuildService(project, OBS_API_URL,
+                                 OBS_API_USERNAME, OBS_API_PASSWD)
+        prerelease = PreRelease2(project, build)
+        create_images(prerelease)
     else:
         print "Not support method of Pre-release jobs"
index af80137..26d2384 100644 (file)
@@ -82,29 +82,33 @@ class PreRelease:
 
 class PreRelease2(PreRelease):
     """pre-release project class for repo maker"""
-    def __init__(self, obs_project, bs):
+    def __init__(self, obs_project, packagebuild):
         match = re.match("home:(.*):prerelease:(.*):([\.\w-]*)", obs_project)
         if not match:
             raise Exception, "Ivalid project name found, %s" %obs_project
 
-
+        self.packagebuild = packagebuild
         self.user = match.group(1)
         self.target_project = match.group(2)
+
         PreRelease.__init__(self, self.target_project, self.user, '', '')
 
         self.obs_project = obs_project
         self.tag_time_stamp = match.group(3)
 
-        self.bs = bs
+        self.update_git_info()
 
-    def get_repo_id(self, extr_repo=None):
+    def get_parent_project(self, repo_category = 'standard'):
+        return self.packagebuild.bs.get_parent_project(self.obs_project,
+                                                       repo_category)
 
-        if extr_repo:
-            return "%s.%s" %(os.path.basename(os.path.realpath("%s/latest" %(extr_repo['SnapshotDir']))),
-                             self.tag_time_stamp)
-        else:
-            # TODO, not support yet
-            return self.tag_time_stamp
+    def update_git_info(self):
+        desp =  self.packagebuild.bs.get_project_desp(self.obs_project)
+        for line in desp.split('\n'):
+            if line.startswith('GIT_TAG'):
+                self.git_tag = line.split(':')[1].strip()
+            elif line.startswith('GIT_PROJECT'):
+                self.git_project = line.split(':')[1].strip()
 
     def repo_define(self, event_fields, server_conf, repos_conf):
         import yaml