Created
September 16, 2016 17:36
-
-
Save nandomoreirame/f32044c09aa89b026f475cdb4c17ab84 to your computer and use it in GitHub Desktop.
deploy to aws s3 with Rake tasks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'aws-sdk' | |
require 'pathname' | |
require 'yaml' | |
CONFIG = { | |
"distPath" => "public/dist", | |
"stylesheetsPath" => "public/dist/stylesheets", | |
"javascriptsPath" => "public/dist/javascripts", | |
"fontsPath" => "public/dist/fonts" | |
} | |
def log(params, what) | |
puts "\033[33;32m [Site LKD #{params[:version]}] step:\033[0m #{what}" | |
end | |
namespace :deploy do | |
desc "Deploys a new version" | |
task :run, [:env, :version] do |_t, params| | |
Rake::Task["deploy:precompile"].invoke(params[:env], params[:version]) | |
Rake::Task["deploy:s3_upload"].invoke(params[:version]) | |
end | |
desc "Upload new files to S3" | |
task :s3_upload, :version do |_t, params| | |
@version = params[:version] | |
log params, "Uploading files to S3..." | |
setup_s3 | |
upload_css | |
upload_js | |
upload_images | |
upload_fonts | |
log params, "Upload done." | |
end | |
desc 'Precompile' | |
task :precompile, [:env, :version] do |_t, params| | |
log params, 'Building project...' | |
sh "gulp build --env #{params['env']} --releaseFolder #{params['version']}" | |
log params, 'Project builded.' | |
end | |
# http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html | |
def setup_s3 | |
secrets = YAML.load_file("s3.secrets.yml") | |
@s3 = Aws::S3::Resource.new( | |
region: secrets["region"], | |
access_key_id: secrets["access_key_id"], | |
secret_access_key: secrets["secret_access_key"] | |
) | |
@bucket = @s3.bucket(secrets["bucket"]) | |
end | |
def upload_css | |
upload_dir("#{CONFIG["stylesheetsPath"]}/*.css", { prefix: "stylesheets", gzip: true }) | |
end | |
def upload_js | |
upload_dir("#{CONFIG["javascriptsPath"]}/*.js", { prefix: "javascripts", gzip: true }) | |
end | |
def upload_images | |
upload_dir("#{CONFIG["distPath"]}/**/*.{jpg,png,jpeg,gif,svg,ico}") | |
end | |
def upload_fonts | |
upload_dir("#{CONFIG["fontsPath"]}/**/*.*", { prefix: "fonts" }) | |
end | |
def upload_dir(dir, params = {}) | |
Dir[dir].each do |file| | |
upload_file(file, params) | |
end | |
end | |
def upload_file(file, params = {}) | |
name = Pathname.new(file) | |
aws_options = { acl: "public-read" } | |
if params[:gzip] | |
aws_options[:content_encoding] = "gzip" | |
end | |
ext = ['.jpg', '.png', '.jpeg', '.gif', '.svg', '.ico'] | |
if ext.include?(name.extname) | |
name = name.sub('public/dist/', '') | |
else | |
name = name.basename | |
end | |
upload_to = ["dist", @version, params[:prefix], name] | |
@bucket.object(upload_to.compact.join("/")).upload_file(file, aws_options) | |
puts "\e[93m -> #{file}\e[0m \e[96m-> #{upload_to.compact.join("/")}\e[0m" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment