PRJ_TEMPLATE = """<project name="%(target)s">
<title></title>
- <description></description>
+ <description>%(desp)s</description>
<person role="maintainer" userid="%(user)s"/>
<person role="bugowner" userid="%(user)s"/>
<link project="%(src)s"/>
sys.stdout.flush()
os.unlink(filename)
- def link_project(self, src, user):
+ def link_project(self, src, user, desp = ''):
targetmeta = PRJ_TEMPLATE % {'target': self.project, 'src': src,
- 'user': user, 'build': 'enable'}
- print targetmeta
+ 'user': user, 'build': 'enable',
+ 'desp': desp}
+
fileh, filename = tempfile.mkstemp(prefix="osc_metafile.",
suffix=".xml", text=True)
os.write(fileh, targetmeta)
packagingdir = utils.parse_link('%s/%s' % (prjdir, 'packaging'))
# Create temp project
- temp_prj = "%s:prerelease:%s:%s" %(OBS_REQ_PRJ, OBS_REQ_ID, OBS_REQ_PKG)
+ temp_prj = "%s:prerelease:%s" %(OBS_REQ_PRJ, os.path.basename(GIT_TAG))
+
os.system("gbs rb -B %s -T %s %s" %(OBS_REQ_PRJ, temp_prj, prjdir))
bs = buildservice.TempBuildService(temp_prj, OBS_API_URL, OBS_OSCRC_PATH)
- print 'temp_prj', temp_prj
- print type(temp_prj)
+
+ print "Temporary review project created on OBS: %s" %(temp_prj)
+
+ project_info = "OBS_REQ_ID: %s\n\
+OBS_REQ_PRJ: %s\n\
+GIT_PROJECT: %s\n\
+GIT_TAG: %s\n"%(OBS_REQ_ID, OBS_REQ_PRJ, GIT_PROJECT, GIT_TAG)
+
temp_prj = str(temp_prj)
- bs.link_project(OBS_REQ_PRJ, OBS_REQ_WHO)
+ bs.link_project(OBS_REQ_PRJ, OBS_REQ_WHO, desp = project_info)
+ time.sleep(2)
- time.sleep(20)
try:
status = bs.get_repostatus()
print status
REPOCONF_TEMPLATE="""
Name: %(name)s
PartOf: "review"
- TopLevel: /srv/builds/temp/%(partof)s/%(package)s
- Location: /srv/builds/temp/%(partof)s/%(package)s/repos/%(sandbox_repo)s/
+ TopLevel: %(partof)s/%(package)s
+ Location: %(partof)s/%(package)s/repos/%(sandbox_repo)s/
Project: %(project)s
AddRepos: %(addrepos)s
Target: %(target)s
SandboxOf: %(sandboxof)s
- SnapshotDir: /srv/snapshots/pre-release/%(package)s
+ SnapshotDir: /srv/snapshots/pre-release/
Release: "%(release)s"
Architectures: %(arch)s
"""
project = event_files["project"]
repo = event_files["repo"]
- match = re.match("(.*):prerelease:(\d*):([\.\w-]*)", project)
+ match = re.match("(.*):prerelease:([\.\w-]*)", project)
if not match:
raise Exception, "Ivalid project name found"
- target_prj, sr_id, package = match.groups()
+ target_prj, timestamp = match.groups()
REPO_CONF_STR = REPOCONF_TEMPLATE %{
"name": project.replace(":","-"),
- "partof": "review",
- "package": package,
+ "partof": WORKSPACE,
+ "package": timestamp,
"sandboxof": target_prj,
"sandbox_repo": os.path.basename(repos_conf.get_repo(target_prj)['Location']),
"project": project,
"target": repo,
- "release": "sr.%s" %sr_id,
+ "release": timestamp,
"arch":["ia32"],
"addrepos": ["Tizen:Base"] #FIXME
}
temp_repo_define_dict = temp_repo_define(event_fields, repos_conf)
# Generate the temp repos.yaml
repos_conf.save_to_file(temp_conf_fn, ext = temp_repo_define_dict)
-
+
server_conf.repos_conf = temp_conf_fn
- # Disable the project build to save resource
- tempbuild=TempBuildService(temp_repo_define_dict['Project'], OBS_API_URL, PATH_OSCRC)
-
- builds_dir = server_conf.builds
- if not os.path.exists(builds_dir):
- os.makedirs(builds_dir)
- # the owner will be root, with 0777 permission
- os.chmod(builds_dir, 0777)
-
-
- # check the toplevel dirs in repos.yaml
- dirs = repomaker.get_toplevel_dirs_from_repoconf(server_conf.repos_conf)
- for d in dirs:
- if not os.path.exists(d):
- os.makedirs(d)
- # the owner will be root, with 0777 permission
- os.chmod(d, 0777)
-
- # UGLY code need to be removed
- tmpdir = '/srv/tmp'
- if not os.path.exists(tmpdir):
- os.makedirs(tmpdir)
- # the owner will be root, with 0777 permission
- os.chmod(tmpdir, 0777)
- project = event_fields["project"]
- match = re.match("(.*):prerelease:(\d*):(\w*)", project)
- if not match:
+ project = event_fields["project"]
+ match = re.match("(.*):prerelease:([\.\w-]*)", project)
+
+ bs = BuildService(apiurl=server_conf.apiurl, oscrc=server_conf.oscrc)
+ review_repo = repomaker.ReviewRepo(project, server_conf, bs)
+
+ review_repo.create()
+ repoinfo = review_repo.get_info()
+
+ os.unlink(temp_conf_fn)
+ else:
#repoinfo = create_repo(server_conf, event_fields)
print "Disable creating repo for project: %s" %(project)
sys.exit(0)
- else:
- target_prj, sr_id, package = match.groups()
-
- bs = BuildService(apiurl=server_conf.apiurl, oscrc=server_conf.oscrc)
- a=repomaker.ReviewRepo(project, server_conf, bs)
-
- a.create()
- repoinfo = a.get_info()
-
+ print "====LOG:REPO_MAKER:REPOINFO===="
import pprint
pp = pprint.PrettyPrinter(indent=4)
print pp.pprint(repoinfo)
+ print "====LOG:REPO_MAKER:REPOINFO======================END===="
if repoinfo:
image_info = image_dispatch(repoinfo)
if image_info:
for index, imagerinfo in enumerate(image_info):
trigger_next('image_trigger_%s' %(index), imagerinfo)
-
- # remove temp repo configuration file
- if repo_conf_fn:
- os.unlink(repo_conf_fn)
-
export(envparas, locals())
-def search_published_repo(repo_path_base, project, sr_id):
+def search_published_repo(repo_path_base, sr_id):
""" Search publised repository, which releated with this sr
return is a list.
"""
ret_list = []
- reviewrepo_base = os.path.join(repo_path_base,'pre-release', project)
+ reviewrepo_base = os.path.join(repo_path_base,'pre-release')
if os.path.isdir(reviewrepo_base):
for dir_name in os.listdir(reviewrepo_base):
if dir_name.endswith("sr.%s" %sr_id):
sys.stdout.flush()
locals().update(trigger_info(TRIGGER_INFO))
+ obs_project = "%s:prerelease:%s" %(OBS_REQ_PRJ, os.path.basename(GIT_TAG))
- obs_project = "%s:prerelease:%s:%s" %( OBS_REQ_PRJ, OBS_REQ_ID, OBS_REQ_PKG)
bs = TempBuildService(obs_project, OBS_API_URL, PATH_OSCRC)
bs.cleanup()
print "OBS Project %s deleted" %obs_project
# Try again # FIX ME
os.system("osc -d -c /etc/repos/oscrc rdelete %s -m 'deleted'" %obs_project)
- reviewrepo_paths = search_published_repo(PATH_BUILDS, OBS_REQ_PKG, OBS_REQ_ID)
+ reviewrepo_paths = search_published_repo(PATH_BUILDS, os.path.basename(GIT_TAG))
if reviewrepo_paths:
for repodir in reviewrepo_paths:
print "Removing temporary repo: %s" %repodir
os.system("rm -rf %s" %repodir)
- # Remove the parent dir if empty
- parent_dir = os.path.abspath('%s/../../%s' %(reviewrepo_paths[0], OBS_REQ_PKG))
- if not os.listdir(parent_dir):
- os.system("rm -r %s" %parent_dir)
- print "Removing temporary repo parent: %s" %parent_dir
else:
print "WARN: Temporary repo doesn't exist!"
class BuildData:
def __init__(self):
- self.data = {}
self.__dict__['archs'] = []
self.__dict__['repos'] = []
+ def __setitem__(self, key, value):
+ return setattr(self, key, value)
+
def save_to_file(self, path_to_file):
impl = minidom.getDOMImplementation()
ele.appendChild(dom.createTextNode(arch))
repos.appendChild(ele)
- for attr in ['id', 'buildconf']:
+ other_keys = self.__dict__.keys()
+ other_keys.remove('archs')
+ other_keys.remove('repos')
+
+ for attr in other_keys:
if hasattr(self, attr):
- ele = dom.createElement(attr)
+ ele = dom.createElement(attr.lower())
ele.appendChild(dom.createTextNode(getattr(self,attr)))
root.appendChild(ele)
if 'ADDREPOS' in self.info.keys():
# Known issue: required repos only can refer to the snapshots under same release_id
# FIXME: hard code here: depends on path 'latest'
- self.info['RELEASEID'] = os.path.basename(
- os.path.realpath("%s/latest" %(self.info['ADDREPOS'][0]['SnapshotDir'])))
+ self.info['RELEASEID'] = "%s.sr.%s" %(
+ os.path.basename(os.path.realpath("%s/latest" %(self.info['ADDREPOS'][0]['SnapshotDir']))),
+ self.reviewrepo['Release'])
else:
from release import BuildID
bid = BuildID()
def release_project_conf(self):
pass
+ def get_gitinfo(self):
+ ret_dict = {}
+
+ stdin, stdout = os.popen2("osc meta prj %s" %self.project)
+
+ root = ET.parse(stdout)
+ if root:
+ try:
+ for line in root.find('description').text.split('\n'):
+ try:
+ key, value = line.split(':', 1)
+ except:
+ pass
+ ret_dict[key.strip()] = value.strip()
+ return ret_dict
+ except:
+ return {}
+
def get_info(self):
- self.info['release_build_id'] = self.builddata.id
+ self.info['release_build_id'] = self.builddata.id
# if 'SnapshotDir' use for repo, need to send relative URI to image-dispatcher
# FIX ME
if 'SnapshotDir' in self.reviewrepo:
relative_dir = req_repo['Location'].replace(req_repo['TopLevel'], '')
if relative_dir.startswith('/'):
relative_dir = relative_dir[1:]
- print "cp -al %s %s" %(os.path.join(req_repo['SnapshotDir'], self.info['RELEASEID'], relative_dir),
- os.path.join(target_dir, os.path.basename(req_repo['Location'])))
- os.system("cp -al %s %s" %(os.path.join(req_repo['SnapshotDir'], self.info['RELEASEID'], relative_dir),
- os.path.join(target_dir, os.path.basename(req_repo['Location']))))
+
+ source_dir = os.path.realpath("%s/latest" %(req_repo['SnapshotDir']))
+ print "cp -al %s %s" %(os.path.join(source_dir, relative_dir),
+ os.path.join(target_dir, os.path.basename(req_repo['Location'])))
+ os.system("cp -al %s %s" %(os.path.join(source_dir, relative_dir),
+ os.path.join(target_dir, os.path.basename(req_repo['Location']))))
def save_prj_conf(self):
""" save project config to PATH_DATA_BASE, return the prjconf name """
# Save project configuration
self.builddata.buildconf = self.save_prj_conf()
+
self.builddata.archs.extend(self.info['ARCHS'])
+
+ self.builddata.repos.extend(os.listdir(self.info['PATH_REPOS']))
# Copy tempory location to relase path
self.builddata.id = self.info['RELEASEID']
+
+ # Add Git info into build info
+ gitinfo = self.get_gitinfo()
+ for key in gitinfo.keys():
+ self.builddata[key] = gitinfo[key]
self.builddata.save_to_file("%s/build.xml" %(self.info['PATH_DATA_BASE']))
print "========================================"
sys.stdout.flush()
# Move the public path
path_public_target = os.path.join(self.info['PATH_PUBLIC_BASE'], self.info['RELEASEID'])
- if not os.path.isdir(path_public_target):
- os.system("mkdir -p %s" %path_public_target)
+
+ # Clean up the old repos
+ if os.path.isdir(path_public_target):
+ os.system("rm -r %s" %path_public_target)
+
+ os.system("mkdir -p %s" %path_public_target)
print "Moving %s to %s" %(self.info['TOPLEVEL'], path_public_target)