1
0
forked from IPKM/nmreval

reorganized AppImage build and upload scripts for GoCD build server; fixed zsync URL

This commit is contained in:
Markus Rosenstihl 2022-11-22 13:30:59 +01:00
parent 1f81ca0a51
commit e80247af07
3 changed files with 98 additions and 1 deletions

View File

@ -80,6 +80,6 @@ AppDir:
command: ./AppRun command: ./AppRun
AppImage: AppImage:
update-information: 'zsync|http://mirror.infra.pkm/nmreval/NMReval-latest.AppImage.zsync' update-information: 'zsync|http://mirror.infra.pkm/nmreval/NMReval-latest-x86_64.AppImage.zsync'
sign-key: None sign-key: None
arch: x86_64 arch: x86_64

0
create_AppImage.bash → tools/build.sh Normal file → Executable file
View File

97
tools/upload_appimage.py Executable file
View File

@ -0,0 +1,97 @@
#!/usr/bin/env python3
# from: https://github.com/kneufeld/minio-put/blob/master/minio-put.py
import os
import sys
import glob
import argparse
import datetime
import urllib.request
import yaml
import requests
def upload(key, secret, host, bucket, filename, dest_name=None):
"""
call this function when using this file as a library
date header must be relatively in sync with server or you
get forbidden error
returns True on success
raises on error
"""
base_name = os.path.basename(filename)
try:
hostname, port = host.split(':')
except ValueError:
hostname = host
if dest_name:
resource = f"/{bucket}/{dest_name}"
else:
resource = f"/{bucket}/{base_name}"
content_type = "application/octet-stream"
date = tznow().strftime('%a, %d %b %Y %X %z')
_signature = f"PUT\n\n{content_type}\n{date}\n{resource}"
signature = sig_hash(secret, _signature)
url = f"http://{host}{resource}"
headers = {
'Host': hostname,
'Date': date, # eg. Sat, 03 Mar 2018 10:11:16 -0700
'Content-Type': content_type,
'Authorization': f"AWS {key}:{signature}",
}
#import pprint
#pprint.pprint(headers)
#pprint.pprint(url)
filedata = open(filename, 'rb')
#req = urllib.request.Request(url, data=filedata, method='PUT', headers=headers)
#resp = urllib.request.urlopen(req)
req = requests.put(url, data=filedata, headers=headers)
print(req)
return req or True
# based on: https://gist.github.com/heskyji/5167567b64cb92a910a3
def sig_hash(secret, sig):
import hashlib
import hmac
import base64
# signature=`echo -en ${sig} | openssl sha1 -hmac ${secret} -binary | base64`
secret = bytes(secret, 'UTF-8')
sig = bytes(sig, 'UTF-8')
digester = hmac.new(secret, sig, hashlib.sha1)
signature1 = digester.digest()
signature2 = base64.standard_b64encode(signature1)
#signature2 = base64.urlsafe_b64encode(signature1)
return str(signature2, 'UTF-8')
def tznow():
def utc_to_local(utc_dt):
return utc_dt.replace(tzinfo=datetime.timezone.utc).astimezone(tz=None)
ts = datetime.datetime.utcnow()
return utc_to_local(ts)
if __name__ == "__main__":
key = os.environ["s3_key"]
secret = os.environ["s3_secret"]
host = "mirror.infra.pkm:9000"
bucket = "nmreval-appimage"
appimage_version = yaml.safe_load(open("AppImageBuilder.yml"))["AppDir"]["app_info"]["version"]
filenames = [f"NMReval-{appimage_version}-x86_64.AppImage",
f"NMReval-{appimage_version}-x86_64.AppImage.zsync",
]
upload(key, secret, host, bucket,
f"NMReval-{appimage_version}-x86_64.AppImage")
upload(key, secret, host, bucket,
f"NMReval-{appimage_version}-x86_64.AppImage.zsync")
upload(key, secret, host, bucket,
f"NMReval-{appimage_version}-x86_64.AppImage.zsync",
f"NMReval-ldates-x86_64.AppImage.zsync")