yolobs-studio/CI/install/osx/package_util.py
2017-04-19 21:54:15 +02:00

94 lines
3.3 KiB
Python

def cmd(cmd):
import subprocess
import shlex
return subprocess.check_output(shlex.split(cmd)).rstrip('\r\n')
def get_tag_info(tag):
rev = cmd('git rev-parse {0}'.format(latest_tag))
anno = cmd('git cat-file -p {0}'.format(rev))
tag_info = []
for i, v in enumerate(anno.splitlines()):
if i <= 4:
continue
tag_info.append(v.lstrip())
return tag_info
def gen_html(github_user, latest_tag):
url = 'https://github.com/{0}/obs-studio/commit/%H'.format(github_user)
with open('readme.html', 'w') as f:
f.write("<html><body>")
log_cmd = """git log {0}...HEAD --pretty=format:'<li>&bull; <a href="{1}">(view)</a> %s</li>'"""
log_res = cmd(log_cmd.format(latest_tag, url))
if len(log_res.splitlines()):
f.write('<p>Changes since {0}: (Newest to oldest)</p>'.format(latest_tag))
f.write(log_res)
ul = False
f.write('<p>')
import re
for l in get_tag_info(latest_tag):
if not len(l):
continue
if l.startswith('*'):
ul = True
if not ul:
f.write('<ul>')
f.write('<li>&bull; {0}</li>'.format(re.sub(r'^(\s*)?[*](\s*)?', '', l)))
else:
if ul:
f.write('</ul><p/>')
ul = False
f.write('<p>{0}</p>'.format(l))
if ul:
f.write('</ul>')
f.write('</p></body></html>')
cmd('textutil -convert rtf readme.html -output readme.rtf')
cmd("""sed -i '' 's/Times-Roman/Verdana/g' readme.rtf""")
def save_manifest(latest_tag, user, jenkins_build, branch, stable):
log = cmd('git log --pretty=oneline {0}...HEAD'.format(latest_tag))
manifest = {}
manifest['commits'] = []
for v in log.splitlines():
manifest['commits'].append(v)
manifest['tag'] = {
'name': latest_tag,
'description': get_tag_info(latest_tag)
}
manifest['version'] = cmd('git rev-list HEAD --count')
manifest['sha1'] = cmd('git rev-parse HEAD')
manifest['jenkins_build'] = jenkins_build
manifest['user'] = user
manifest['branch'] = branch
manifest['stable'] = stable
import cPickle
with open('manifest', 'w') as f:
cPickle.dump(manifest, f)
def prepare_pkg(project, package_id):
cmd('packagesutil --file "{0}" set package-1 identifier {1}'.format(project, package_id))
cmd('packagesutil --file "{0}" set package-1 version {1}'.format(project, '1.0'))
import argparse
parser = argparse.ArgumentParser(description='obs-studio package util')
parser.add_argument('-u', '--user', dest='user', default='jp9000')
parser.add_argument('-p', '--package-id', dest='package_id', default='org.obsproject.pkg.obs-studio')
parser.add_argument('-f', '--project-file', dest='project', default='OBS.pkgproj')
parser.add_argument('-j', '--jenkins-build', dest='jenkins_build', default='0')
parser.add_argument('-b', '--branch', dest='branch', default='master')
parser.add_argument('-s', '--stable', dest='stable', required=False, action='store_true', default=False)
args = parser.parse_args()
latest_tag = cmd('git describe --tags --abbrev=0')
gen_html(args.user, latest_tag)
prepare_pkg(args.project, args.package_id)
save_manifest(latest_tag, args.user, args.jenkins_build, args.branch, args.stable)