From da220a38bb9513953714497bc7494aafc8f410fc Mon Sep 17 00:00:00 2001 From: Elwin Arens Date: Wed, 8 May 2019 14:00:56 +0200 Subject: [PATCH 1/2] Fix sort context imports in cloud_function example ctx.imports is an unsorted dictionary, causing unnecessary updates when the order arbitrarily changes. --- examples/v2/cloud_functions/python/cloud_function.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/v2/cloud_functions/python/cloud_function.py b/examples/v2/cloud_functions/python/cloud_function.py index 1e72bab1e..623631c49 100644 --- a/examples/v2/cloud_functions/python/cloud_function.py +++ b/examples/v2/cloud_functions/python/cloud_function.py @@ -25,7 +25,7 @@ def GenerateConfig(ctx): function_name = ctx.env['deployment'] + 'cf' zip_file = zipfile.ZipFile( in_memory_output_file, mode='w', compression=zipfile.ZIP_DEFLATED) - for imp in ctx.imports: + for imp in sorted(ctx.imports): if imp.startswith(ctx.properties['codeLocation']): zip_file.writestr(imp[len(ctx.properties['codeLocation']):], ctx.imports[imp]) From a08309fceb28fffdaf98c6af71054bf8ae8fbdad Mon Sep 17 00:00:00 2001 From: Elwin Arens Date: Thu, 9 May 2019 10:24:21 +0200 Subject: [PATCH 2/2] Fix make md5 deterministic The zipfile contains extra attributes like the timestamp that are included in the return value of getvalue(), causing a different md5 hash every second. --- examples/v2/cloud_functions/python/cloud_function.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/v2/cloud_functions/python/cloud_function.py b/examples/v2/cloud_functions/python/cloud_function.py index 623631c49..7346ac142 100644 --- a/examples/v2/cloud_functions/python/cloud_function.py +++ b/examples/v2/cloud_functions/python/cloud_function.py @@ -25,14 +25,16 @@ def GenerateConfig(ctx): function_name = ctx.env['deployment'] + 'cf' zip_file = zipfile.ZipFile( in_memory_output_file, mode='w', compression=zipfile.ZIP_DEFLATED) + m = hashlib.md5() for imp in sorted(ctx.imports): if imp.startswith(ctx.properties['codeLocation']): - zip_file.writestr(imp[len(ctx.properties['codeLocation']):], - ctx.imports[imp]) + filename = imp[len(ctx.properties['codeLocation']):] + contents = ctx.imports[imp] + m.update(filename) + m.update(contents) + zip_file.writestr(filename, contents) zip_file.close() content = base64.b64encode(in_memory_output_file.getvalue()) - m = hashlib.md5() - m.update(content) source_archive_url = 'gs://%s/%s' % (ctx.properties['codeBucket'], m.hexdigest() + '.zip') cmd = "echo '%s' | base64 -d > /function/function.zip;" % (content)