diff --git a/.gitignore b/.gitignore index 511ae6ed3e..9c152c3d6a 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ buildWin.sh .vscode/ .lldbinit __pycache__/ +scripts/refresh_name_layers/vendor/ +scripts/refresh_name_layers/refresh_name_layers.zip diff --git a/scripts/push-refresh-script.sh b/scripts/push-refresh-script.sh new file mode 100755 index 0000000000..d5ed338263 --- /dev/null +++ b/scripts/push-refresh-script.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +OLDPATH=$(pwd) +cd scripts/refresh_name_layers +bundle install +rm refresh_name_layers.zip +zip -r refresh_name_layers.zip refresh_name_layers.rb vendor +aws lambda update-function-code \ + --function-name NameRefresher \ + --zip-file fileb://refresh_name_layers.zip +cd $OLDPATH \ No newline at end of file diff --git a/scripts/refresh_name_layers/.bundle/config b/scripts/refresh_name_layers/.bundle/config new file mode 100644 index 0000000000..2369228816 --- /dev/null +++ b/scripts/refresh_name_layers/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: "vendor/bundle" diff --git a/scripts/refresh_name_layers/Gemfile b/scripts/refresh_name_layers/Gemfile new file mode 100644 index 0000000000..e1d0f68233 --- /dev/null +++ b/scripts/refresh_name_layers/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gem "rubyzip" \ No newline at end of file diff --git a/scripts/refresh_name_layers/Gemfile.lock b/scripts/refresh_name_layers/Gemfile.lock new file mode 100644 index 0000000000..9193fe9c05 --- /dev/null +++ b/scripts/refresh_name_layers/Gemfile.lock @@ -0,0 +1,14 @@ +GEM + remote: https://rubygems.org/ + specs: + rubyzip (2.3.2) + +PLATFORMS + arm64-darwin-21 + x86_64-darwin-21 + +DEPENDENCIES + rubyzip + +BUNDLED WITH + 2.3.7 diff --git a/scripts/refresh_name_layers/function.zip b/scripts/refresh_name_layers/function.zip new file mode 100644 index 0000000000..948138331a Binary files /dev/null and b/scripts/refresh_name_layers/function.zip differ diff --git a/scripts/refresh_name_layers/refresh_name_layers.rb b/scripts/refresh_name_layers/refresh_name_layers.rb new file mode 100755 index 0000000000..9586a676a4 --- /dev/null +++ b/scripts/refresh_name_layers/refresh_name_layers.rb @@ -0,0 +1,74 @@ +#!/usr/bin/env ruby + +require 'net/http' +require 'uri' +require 'aws-sdk-s3' +require 'aws-sdk-lambda' +require 'zip' + +def fetch(uri_str, limit = 10) + # You should choose a better exception. + raise ArgumentError, 'too many HTTP redirects' if limit == 0 + + response = Net::HTTP.get_response(URI(uri_str)) + + case response + when Net::HTTPSuccess then + response + when Net::HTTPRedirection then + location = response['location'] + warn "redirected to #{location}" + fetch(location, limit - 1) + else + response.value + end +end + +def lambda_handler(event:, context:) + response = fetch("https://docs.google.com/spreadsheets/d/1DHEsiv4cY4gE6AX3sVH82K__mpBD1aznIYCQwQxA_F0/export?gid=0&format=tsv") + + stringio = Zip::OutputStream.write_buffer do |zio| + zip_entry = Zip::Entry.new(zio, 'names.tsv', nil, nil, nil, nil, nil, nil, Zip::DOSTime.at(0)) + zio.put_next_entry(zip_entry) + zio.write(response.body) + end + stringio.rewind + new_contents = stringio.string.bytes + + s3 = Aws::S3::Client.new + original_resp = s3.get_object(bucket:'eagle0', key:'names.tsv.zip') + original_contents = original_resp.body.string.bytes + + if original_contents != new_contents then + puts "Different contents" + resp = s3.put_object(body: stringio.sysread, bucket:'eagle0', key:'names.tsv.zip') + puts "successfully uploaded zip" + puts resp + + client = Aws::Lambda::Client.new + lambda_response = client.publish_layer_version({ + layer_name: "namesLayer", + content: { + s3_bucket: 'eagle0', + s3_key: 'names.tsv.zip' + } + }) + new_version_arn = lambda_response.layer_version_arn + puts "successfully updated layer" + puts lambda_response + + lambda_response = client.update_function_configuration({ + function_name: "Name_Generator", + layers: [new_version_arn, "arn:aws:lambda:us-east-1:339296677100:layer:nameConstructionLayer:2"] + }) + puts "successfully updated config" + puts lambda_response + + { statusCode: 200, headers: { "Content-Type": "text/html; charset=UTF-8" }, body: lambda_response } + else + puts "Contents are identical, not uploading" + { statusCode: 200, headers: { "Content-Type": "text/html; charset=UTF-8" }, body: "No change" } + end +end + +lambda_handler(event: nil, context: nil) \ No newline at end of file