publish-scripts/chocolatey/buildNUPKG.py (57 lines of code) (raw):

#! /usr/bin/env python3 # depends on chocolaty import os from re import sub import wget import sys from string import Template from shared import constants from shared.helper import printReturnOutput from shared.helper import produceHashForfile HASH = "SHA512" def getChocoVersion(version): # chocolatey do not support semantic versioning2.0.0 yet # https://github.com/chocolatey/choco/issues/1610 # look for hypen, and remove any dots after strlist = version.split('-') if len(strlist) == 1: return strlist[0] elif len(strlist) == 2: # prerelease return f"{strlist[0]}-{strlist[1].replace('.','')}" else: raise NotImplementedError # for windows, there's v1 and v2 versions # assume buildFolder is clean # output a deb nupkg # depends on chocolatey def preparePackage(): archList = [ "ARM64", "X86", "X64" ] substitutionMapping = { "PACKAGENAME": constants.PACKAGENAME, "HASHALG": HASH, "CHOCOVERSION": getChocoVersion(constants.VERSION) } tools = os.path.join(constants.BUILDFOLDER, "tools") os.makedirs(tools) for arch in archList: fileName = f"Azure.Functions.Cli.win-{arch.lower()}.{constants.VERSION}.zip" url = f'https://cdn.functions.azure.com/public/4.0.{constants.CONSOLIDATED_BUILD_ID}/{fileName}' substitutionMapping[f"ZIPURL_{arch}"] = url # download the zip # output to local folder if not os.path.exists(fileName): print(f"downloading from {url}") wget.download(url) # get the checksums fileHash = produceHashForfile(fileName, HASH) substitutionMapping[f"CHECKSUM_{arch}"] = fileHash # write install powershell script scriptDir = os.path.abspath(os.path.dirname(__file__)) with open(os.path.join(scriptDir, "installps_template")) as f: # TODO stream replace instead of reading the entire string into memory stringData = f.read() t = Template(stringData) with open(os.path.join(tools, "chocolateyinstall.ps1"), "w") as f: print("writing install powershell script") f.write(t.safe_substitute(substitutionMapping)) # write nuspec package metadata with open(os.path.join(scriptDir,"nuspec_template")) as f: stringData = f.read() t = Template(stringData) nuspecFile = os.path.join(constants.BUILDFOLDER, constants.PACKAGENAME+".nuspec") with open(nuspecFile, 'w') as f: print("writing nuspec") f.write(t.safe_substitute(substitutionMapping)) # run choco pack, stdout is merged into python interpreter stdout output = printReturnOutput(["choco", "pack", nuspecFile, "--outputdirectory", constants.ARTIFACTFOLDER]) assert("Successfully created package" in output) # FIXME why does this line not work when import module from sibling package if __name__ == "__main__": # preparePackage(*sys.argv[1:]) pass