@ -1,8 +1,11 @@
import json
import json
import os
import os
import requests
import requests
import sys
from hashlib import md5
from wget import download
import ssl
import hashlib
def file_write ( file_name , text_content ) :
def file_write ( file_name , text_content ) :
# charset()
# charset()
file = open ( file_name , " w " )
file = open ( file_name , " w " )
@ -12,10 +15,7 @@ def file_write(file_name,text_content):
def dingtalk ( cdn_url , packageUrl ) :
def dingtalk ( cdn_url , packageUrl ) :
tpl_for_dingtalk = f '''
tpl_for_dingtalk = f '''
< font color = [ TPL_STATUS_COLOR ] size = " 3 " >
下载地址 : ( < a href = " {cdn_url} {packageUrl} " target = " _blank " > { cdn_url } { packageUrl } < / a > )
< / font >
下载地址 : ( < a href = " {cdn_url} {packageUrl} "
! [ image ] ( [ TPL_STATUS_PIC ] )
! [ image ] ( [ TPL_STATUS_PIC ] )
@ -35,6 +35,7 @@ def dingtalk(cdn_url,packageUrl):
def obsUpload ( file , uploadType ) :
def obsUpload ( file , uploadType ) :
print ( ' 开始OBS上传... ' )
url_obsUpload = os . getenv ( ' url_for_iotfile ' ) + " /api/file/v1/attachment/obsUpload "
url_obsUpload = os . getenv ( ' url_for_iotfile ' ) + " /api/file/v1/attachment/obsUpload "
myfiles = { ' file ' : open ( file , ' rb ' ) }
myfiles = { ' file ' : open ( file , ' rb ' ) }
mydata = { ' uploadType ' : uploadType }
mydata = { ' uploadType ' : uploadType }
@ -45,12 +46,18 @@ def obsUpload(file,uploadType):
return info
return info
# APP管理-新增APP
# APP管理-新增APP
def platformAppAdd ( ) :
def platformAppAdd ( package , suffix = None ) :
print ( ' 开始新增上传APP... ' )
# with open(".tags") as f: version = f.read().strip()
# with open(".tags") as f: version = f.read().strip()
logoFile = obsUpload ( file = str ( os . getenv ( ' logo ' ) ) , uploadType = ' logo ' )
logoFile = obsUpload ( file = str ( os . getenv ( ' logo ' ) ) , uploadType = ' logo ' )
packageFile = obsUpload ( file = str ( os . getenv ( ' package ' ) ) , uploadType = ' compress ' )
packageFile = obsUpload ( file = package , uploadType = ' compress ' )
name = os . getenv ( ' name ' )
if suffix != None :
name = name + str ( suffix )
bodyjson = {
bodyjson = {
' name ' : os . getenv ( ' name ' ) ,
' name ' : name ,
' version ' : os . getenv ( ' version ' ) ,
' version ' : os . getenv ( ' version ' ) ,
' genre ' : os . getenv ( ' genre ' ) ,
' genre ' : os . getenv ( ' genre ' ) ,
' logoCode ' : logoFile [ ' code ' ] ,
' logoCode ' : logoFile [ ' code ' ] ,
@ -131,18 +138,106 @@ def platformProgramAdd():
# multipleProgramToOneProject()
# 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 ( ' cp -rp /drone/src/ /tmp/theLastCode ' )
os . chdir ( ' /tmp/theLastCode/ ' )
# os.system('git clone ' + os.getenv('DRONE_GIT_HTTP_URL') + ' .' )
os . system ( ' git checkout ' + the_last_windowsAppZIP_GITversion )
os . system ( ' ls && pwd && git describe --abbrev=0 --tags ' )
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 ' :
if os . getenv ( " isiot " ) != ' False ' :
platformProgramAdd ( )
name = os . getenv ( ' name ' )
cdn_url = os . getenv ( ' cdn_url ' )
build_the_current_windowsApp ( name )
else :
else :
print ( " is not iot " )
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 )