From 7ce10fd6f1c2caaf1bf2c4db6ea9f629a6e7f410 Mon Sep 17 00:00:00 2001 From: Mark McGranaghan Date: Sat, 2 Jan 2016 17:33:10 -0800 Subject: [PATCH] Add in our Ruby script --- tools/upload-site | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 tools/upload-site diff --git a/tools/upload-site b/tools/upload-site new file mode 100755 index 0000000..b1eda68 --- /dev/null +++ b/tools/upload-site @@ -0,0 +1,42 @@ +#!/usr/bin/env ruby + +# Upload the contents in public/ to the S3 bucket from which we serve +# gobyexample.com. We use this instead of `aws iam sync` because that command +# doesn't correctly guess the text/html mime time of the extension-less files. +# We didn't write this in Go because we had already written it in Ruby for +# another website and didn't want to re-write it. + +require "aws-sdk" +require "set" + +s3 = Aws::S3::Client.new( + region: "us-east-1", + credentials: Aws::Credentials.new(ENV["AWS_ACCESS_KEY_ID"], ENV["AWS_SECRET_ACCESS_KEY"]) +) + +# (Re-)upload each file to S3. We're not worried about what's currently there. +Dir.glob("./public/**/**").each do |local_path| + next if File.directory?(local_path) + + # Derive final path. + s3_path = local_path.sub("./public/", "") + + # Infer content type, including for HTML files that need pretty URLs. + content_type = + case s3_path + when /\.ico$/ then "image/x-icon" + when /\.png$/ then "image/png" + when /\.css$/ then "text/css" + else "text/html" + end + + puts("Uploading #{s3_path} (#{content_type})") + + File.open(local_path, "rb") do |local_file| + s3.put_object( + bucket: "gobyexample.com", + key: s3_path, + content_type: content_type, + body: local_file) + end +end