You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

224 lines
7.9 KiB

import json
import os
import requests
import sys
from hashlib import md5
from wget import download
import ssl
def file_write(file_name,text_content):
# charset()
file = open(file_name , "w")
file.write(str(text_content))
file.close()
def dingtalk(cdn_url,packageUrl):
tpl_for_dingtalk=f'''
<font color=[TPL_STATUS_COLOR] size="3">
下载地址: (<a href="{cdn_url}{packageUrl}" target="_blank">{cdn_url}{packageUrl}</a>)
</font>
![image]([TPL_STATUS_PIC])
项目名称:[PLUGIN_TPL_REPO_SHORT_NAME]
更新作者: [CI_COMMIT_AUTHOR_NAME]
<font color=[TPL_STATUS_COLOR] size="3">
更新内容:[TPL_COMMIT_MSG]
</font>
[ [查看构建详情)]]([TPL_BUILD_LINK])
'''
print (tpl_for_dingtalk)
file_write("./.tpl",tpl_for_dingtalk)
def obsUpload(file,uploadType):
url_obsUpload = os.getenv('url_for_iotfile') + "/api/file/v1/attachment/obsUpload"
myfiles = {'file': open(file, 'rb')}
mydata = {'uploadType': uploadType}
r = requests.post(url_obsUpload, data=mydata, files=myfiles)
print (r.text)
json_str = r.text
info = json.loads(json_str)['data']
return info
# APP管理-新增APP
def platformAppAdd(package,suffix=None):
# with open(".tags") as f: version = f.read().strip()
logoFile = obsUpload(file=str(os.getenv('logo')), uploadType='logo')
packageFile = obsUpload(file=str(os.getenv('package')),uploadType='compress')
name = os.getenv('name')
if suffix !=None:
name = name + str(suffix)
bodyjson = {
'name': name,
'version': os.getenv('version'),
'genre': os.getenv('genre'),
'logoCode': logoFile['code'],
'logoUrl': logoFile['url'],
'packageCode': packageFile['code'],
'packageUrl': packageFile['url'],
'des': os.getenv('des')
}
print (bodyjson)
url_platformAppAdd = os.getenv('url_for_iotplatform') + "/api/platform/v1/platformApp/platformAppAdd"
headers = {'content-type': 'application/json;charset=UTF-8'}
r = requests.post(url_platformAppAdd, headers=headers, data=json.dumps(bodyjson))
print (r.text)
cdn_url = os.getenv('cdn_url')
packageUrl = packageFile['url']
dingtalk(cdn_url,packageUrl)
# 应用管理-授权(获取code list)
def getPlatformProgramList():
bodyjson = {
'name': os.getenv('name'),
'version': os.getenv('version'),
'genre': os.getenv('genre'),
}
print (bodyjson)
url_platformAppAdd = os.getenv('url_for_iotplatform') + "/api/platform/v1/platformProgram/getPlatformProgramList/1/10"
headers = {'content-type': 'application/json;charset=UTF-8'}
r = requests.post(url_platformAppAdd, headers=headers, data=json.dumps(bodyjson))
print (type(json.loads(r.text)))
print (json.loads(r.text)['data']["listObject"][0]['code'])
return json.loads(r.text)['data']["listObject"][0]['code']
# 应用管理-授权
def multipleProgramToOneProject():
codeList = getPlatformProgramList()
bodyjson = {
"projectCode": os.getenv('projectCode'),
"codeList": [codeList]
}
print (bodyjson)
url_platformAppAdd = os.getenv('url_for_iotplatform') + "/api/platform/v1/platformProgram/multipleProgramToOneProject"
headers = {'content-type': 'application/json;charset=UTF-8'}
r = requests.post(url_platformAppAdd, headers=headers, data=json.dumps(bodyjson))
print (r.text)
# 应用管理-新增应用
def platformProgramAdd():
# with open(".tags") as f: version = f.read().strip()
logoFile = obsUpload(file=str(os.getenv('logo')), uploadType='logo')
packageFile = obsUpload(file=str(os.getenv('package')),uploadType='compress')
bodyjson = {
'name': os.getenv('name'),
'version': os.getenv('version'),
'genre': os.getenv('genre'),
'sourceId': os.getenv('sourceId'),
"resolution": os.getenv('resolution'),
'logoCode': logoFile['code'],
'logoUrl': logoFile['url'],
'packageCode': packageFile['code'],
'packageUrl': packageFile['url'],
'des': os.getenv('des')
}
print (bodyjson)
url_platformAppAdd = os.getenv('url_for_iotplatform') + "/api/platform/v1/platformProgram/platformProgramAdd"
headers = {'content-type': 'application/json;charset=UTF-8'}
r = requests.post(url_platformAppAdd, headers=headers, data=json.dumps(bodyjson))
print (r.text)
cdn_url = os.getenv('cdn_url')
packageUrl = packageFile['url']
dingtalk(cdn_url,packageUrl)
# 自动授权
# multipleProgramToOneProject()
def get_the_last_windowsAppZIP(name):
bodyjson = {
'name': name
}
print (bodyjson)
url_platformAppAdd = os.getenv('url_for_iotplatform') + "/api/platform/v1/platformApp/getPlatformAppList/1/10"
headers = {'content-type': 'application/json;charset=UTF-8'}
r = requests.post(url_platformAppAdd, headers=headers, data=json.dumps(bodyjson))
listObject=json.loads(r.text)['data']['listObject']
if len(listObject) > 0:
for obj in listObject:
if obj.get("packageName", "").endswith(".zip"):
print(f"id: {obj.get('id')}")
print(f"name: {obj.get('name')}")
print(f"packageName: {obj.get('packageName')}")
print(f"packageUrl: {obj.get('packageUrl')}")
packageUrl=obj.get('packageUrl')
break # 找到第一个满足条件的对象后停止遍历
# 忽略未经核实的SSL证书认证,linux下wget可能会有ssl问题
context = ssl._create_unverified_context()
ssl._create_default_https_context = ssl._create_unverified_context
download(cdn_url + packageUrl)
print(cdn_url + packageUrl)
the_last_windowsAppZIP = os.getcwd() + packageUrl.split("/")[-1]
return the_last_windowsAppZIP
else:
return None
def build_for_windowsApp():
print ("开始打包exe流程")
os.system('makensis Sources/nbn.nsi')
os.system('du -sh Sources/Setup.exe')
def build_for_windowsAppZIP():
print ("开始打包zip流程")
os.system('unzip ' + the_last_windowsAppZIP + ' -d /tmp/a/')
os.system('unzip ' + the_current_windowsAppZIP + ' -d /tmp/b/')
def build_the_current_windowsApp(name):
the_last_windowsAppZIP = get_the_last_windowsAppZIP(name)
if the_last_windowsAppZIP == None:
print("初次上传,不比对zip,直接打包上传")
else:
print ("比对新老版本zip文件")
the_current_windowsAppZIP="/drone/src/IOTContainer/" + os.getenv('DRONE_REPO_NAME') + '.' + os.getenv('version') + '.zip'
with open(the_last_windowsAppZIP) as f: content1 = f.read()
with open(the_current_windowsAppZIP) as f: content2 = f.read()
if md5(content1.encode("utf8")).hexdigest() != md5(content2.encode("utf8")).hexdigest():
print ("比对结果:程序版本已更新")
os.system('mkdir -p /tmp/a/ /tmp/b/ /tmp/IOTContainer/')
os.system('unzip ' + the_last_windowsAppZIP + ' -d /tmp/a/')
os.system('unzip ' + the_current_windowsAppZIP + ' -d /tmp/b/')
os.system('/bin/sh -c zip_diff.sh')
diff_zip=os.getenv('DRONE_REPO_NAME') + '.' + os.getenv('version') + '.zip'
build_for_windowsApp()
platformAppAdd('/drone/src/Sources/Setup.exe', '.exe')
platformAppAdd(diff_zip, '.zip')
else:
print ("\033[34m比对结果: 程序版本无更新,流程终止\033[0m")
if os.getenv("isiot") != 'False':
name=os.getenv('name')
build_the_current_windowsApp(name)
else:
print ("is not iot")
if os.getenv("DRONE_BRANCH") == 'master':
cdn_url = 'https://qianmu-iot.1000my.com/'
else:
cdn_url = 'https://test-598d.1000my.com/'
packageUrl = os.getenv('DRONE_REPO_NAMESPACE') + '-' + os.getenv('DRONE_REPO_NAME') + '-' + os.getenv('DRONE_BRANCH') + '/' + os.getenv('DRONE_REPO_NAME') + '.' + os.getenv('version')+ '.zip'
dingtalk(cdn_url,packageUrl)