publish.py 2.43 KB
Newer Older
‘oliver.hui’'s avatar
‘oliver.hui’ committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
'''
@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.")