''' @File: publish.py @Description: CI Publish Script @Author: leon.li(l2m2lq@gmail.com) @Date: 2019-09-12 14:05:07 ''' import platform import os import argparse import sys import subprocess import glob import re import json import qtciutil def sincpm_bin(cmd): return qtciutil.common_cmd('SINCPM_BIN', cmd) def sincpm_publish(pkg_name): # check sincpm.json if exists ci_script_dir = os.path.dirname(os.path.realpath(__file__)) filepath = os.path.join(ci_script_dir, "../sincpm.json") if not os.path.isfile(filepath): raise qtciutil.QtCiUtilError("no sincpm.json found.") # get platform infomation qt_verison_str = qtciutil.qt_version() qmake_spec_str = qtciutil.qmake_spec() compiler_str = qmake_spec_str.split('-')[1] if compiler_str == 'g++': compiler_str = 'gcc' os_system = qtciutil.platform_system() arch_str = 'x64' if os_system == 'windows': arch_str = 'x86' # sincpm package package_args = [sincpm_bin('sincpm'), 'package'] package_args.append('--os=%s' % os_system) package_args.append('--qt=%s' % qt_verison_str) package_args.append('--compiler=%s' % compiler_str) package_args.append('--arch=%s' % arch_str) package_args.append(pkg_name) print("package_args: ", package_args) pinfo = subprocess.run(package_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) if pinfo.returncode != 0: raise qtciutil.QtCiUtilError("sincpm pakcage failed.") output = pinfo.stdout.decode('utf-8') print("sincpm pakcage output: %s" % output) m = re.search(r'package to "(.*)/(.*)"', output) if not m: raise qtciutil.QtCiUtilError("sincpm package failed. No expected output.") # sincpm upload local_dir = m.group(1) pkg_dir = m.group(2) os.chdir(local_dir) pinfo = subprocess.run([sincpm_bin('sincpm'), 'upload', pkg_dir], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) # if pinfo.returncode != 0: # raise qtciutil.QtCiUtilError("sincpm upload failed.") m = re.search(r'error: ', pinfo.stdout.decode('utf-8'), re.IGNORECASE) if m: raise qtciutil.QtCiUtilError("The upload result contains an error message.") if __name__ == "__main__": parser = argparse.ArgumentParser(description='Publish Arg Parser') parser.add_argument('--package_name', '-p', type=str, required=True, help='package name', metavar='topikm6-tpm') args = vars(parser.parse_args()) package_name = args['package_name'] sincpm_publish(package_name) print("Successfully published.")