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.
 
 
 

245 lines
8.4 KiB

import json
import os
import requests
import sys
from hashlib import md5
from wget import download
import ssl
import hashlib
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):
print('开始OBS上传...')
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):
print('开始新增上传APP...')
# with open(".tags") as f: version = f.read().strip()
logoFile = obsUpload(file=str(os.getenv('logo')), uploadType='logo')
packageFile = obsUpload(file=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_windowsApp_GITversion(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')}")
print(f"version: {obj.get('version')}")
the_last_windowsAppZIP_GITversion=obj.get('version')
break # 找到第一个满足条件的对象后停止遍历
print('正在git获取上一个版本的代码:')
os.system('mkdir -p /tmp/theLastCode/')
os.system('git clone ' + os.getenv('DRONE_GIT_HTTP_URL') + ' /tmp/theLastCode/IOTContainer/' )
os.system('ls && pwd' )
os.system('cd /tmp/theLastCode/ && git checkout ' + the_last_windowsAppZIP_GITversion)
return the_last_windowsAppZIP_GITversion
else:
return None
def build_for_windowsApp():
print ("开始打包exe流程")
os.chdir('/drone/src/')
os.system('makensis Sources/nbn.nsi')
os.system('du -sh Sources/Setup.exe')
def count_files_in_directory(directory):
count = 0
for root, dirs, files in os.walk(directory):
# 仅计算文件数量,不包括目录
count += len(files)
return count
# def calculate_md5(file_path):
# md5 = hashlib.md5()
# with open(file_path, 'rb') as f:
# while True:
# data = f.read(4096)
# if not data:
# break
# md5.update(data)
# print( file_path + 'MD5值为' + md5.hexdigest())
# return md5.hexdigest()
def build_the_current_windowsApp(name):
the_last_windowsApp_GITversion = get_the_last_windowsApp_GITversion(name)
the_current_windowsAppZIP="/drone/src/" + os.getenv('DRONE_REPO_NAME') + '.' + os.getenv('version') + '.zip'
# the_last_windowsAppZIP = get_the_last_windowsAppZIP(name)
# os.system('mkdir -p /tmp/a/ /tmp/b/ /tmp/IOTContainer/')
# os.system('unzip -q ' + the_last_windowsAppZIP + ' -d /tmp/a/')
# os.system('unzip -q ' + the_current_windowsAppZIP + ' -d /tmp/b/')
os.system('/bin/sh -c /drone/src/zip_diff.sh')
file_count = count_files_in_directory('/tmp/IOTContainer/')
if the_last_windowsApp_GITversion == None:
print("初次上传,不比对zip,直接打包上传")
platformAppAdd(the_current_windowsAppZIP, '.zip')
build_for_windowsApp()
platformAppAdd('/drone/src/Sources/Setup.exe', '.exe')
else:
print ("比对新老版本zip文件")
the_current_windowsAppZIP_dir = '/drone/src/IOTContainer'
the_last_windowsAppZIP_dir = '/tmp/theLastCode/IOTContainer'
if file_count == 1:
print ("\033[34m比对结果: 程序版本无更新,流程终止\033[0m")
else:
print ("比对结果:程序版本已更新")
os.system('cd /tmp/IOTContainer/ && zip -rq ' + os.getenv('DRONE_REPO_NAME') + '.' + os.getenv('version') + '.zip ./')
diff_zip='/tmp/IOTContainer/' + os.getenv('DRONE_REPO_NAME') + '.' + os.getenv('version') + '.zip'
platformAppAdd(diff_zip, '.zip')
build_for_windowsApp()
platformAppAdd('/drone/src/Sources/Setup.exe', '.exe')
if os.getenv("isiot") != 'False':
name=os.getenv('name')
cdn_url = os.getenv('cdn_url')
build_the_current_windowsApp(name)
else:
print ("is not iot")