Pentarctagon c082660aa6 Compress linux and windows debug information before uploading.
Also limit sftp to taking at most 5 minutes.
2020-09-03 19:21:38 -05:00

95 lines
2.7 KiB
Python
Executable File

#!/usr/bin/env python3
# encoding: utf-8
import paramiko
import platform
import os
import datetime
import time
import sys
import hashlib
import multiprocessing
start = int(time.time())
now = datetime.datetime.now()
dest = "/home/frs/project/bfw-travis-upload/"
# upload a single file
def upload_file(src, dest):
with paramiko.Transport(("frs.sourceforge.net", 22)) as transport:
try:
transport.connect(None, "bfw-uploader", os.environ["SFTP_PASSWORD"])
except:
print("SFTP_PASSWORD not present, exiting...")
sys.exit(1)
with paramiko.SFTPClient.from_transport(transport) as sftp:
sftp.put(src, dest)
# delete a single file
def delete_file(dest):
with paramiko.Transport(("frs.sourceforge.net", 22)) as transport:
try:
transport.connect(None, "bfw-uploader", os.environ["SFTP_PASSWORD"])
except:
print("SFTP_PASSWORD not present, exiting...")
sys.exit(1)
with paramiko.SFTPClient.from_transport(transport) as sftp:
sftp.remove(dest)
# make remote directories if they don't already exist
with paramiko.Transport(("frs.sourceforge.net", 22)) as transport:
try:
transport.connect(None, "bfw-uploader", os.environ["SFTP_PASSWORD"])
except:
print("SFTP_PASSWORD not present, exiting...")
sys.exit(1)
with paramiko.SFTPClient.from_transport(transport) as sftp:
dest = dest+os.environ["BRANCH"]+"/"
try:
sftp.mkdir(dest)
except:
pass
dest = dest+str(now.year)+"-"+str(now.month).zfill(2)+"-"+str(now.day).zfill(2)+"/"
try:
sftp.mkdir(dest)
except:
pass
dest = dest+os.environ["TRAVIS_COMMIT"]+"/"
try:
sftp.mkdir(dest)
except:
pass
dest = dest+os.environ["UPLOAD_ID"]+"/"
try:
sftp.mkdir(dest)
except:
pass
for arg in sys.argv[1:]:
if __name__ == '__main__':
proc = multiprocessing.Process(name="Upload", target=upload_file, args=(arg, dest+arg.split("/")[-1]))
proc.start()
proc.join(300)
if proc.is_alive():
proc.terminate()
delete_file(dest+arg.split("/")[-1])
print("Killed upload for "+dest+arg.split("/")[-1]+" due to taking too long.")
continue
sha256 = hashlib.sha256()
with open(arg, "rb") as f:
while True:
data = f.read(100000)
if not data:
break
sha256.update(data)
print("sha256 of "+arg+": "+sha256.hexdigest())
print("SFTP duration: "+str(int(time.time())-start)+" seconds")