tasks/browser.rake (86 lines of code) (raw):
require 'json'
def write_configuration
config_cmd = <<-eof
c=require('./').config.credentials;c.refresh(function() {
console.log(c.accessKeyId, c.secretAccessKey, c.sessionToken);
});
eof
config = {}
if File.exist?('configuration')
config = JSON.parse(File.read('configuration'))
out = `node -e "#{config_cmd}"`.split(/\s+/)
config['accessKeyId'] ||= out[0]
config['secretAccessKey'] ||= out[1]
config['sessionToken'] ||= out[2] if out[2] && out[2] != "undefined"
end
File.open('test/configuration.js', 'w') do |f|
config_json = JSON.generate(config).inspect
f.puts "module.exports = JSON.parse(#{config_json});"
end
end
def sdk_version
JSON.parse(File.read('package.json'))['version']
end
def excluded_files(name)
name.start_with?("test/react-native/") || name.start_with?("test/publisher")
end
namespace :browser do
$BUILDER = "node dist-tools/browser-builder.js"
$BROWSERIFY = "browserify"
$BROWSERIFY_DIST = "dist/aws-sdk.js"
$BROWSERIFY_TEST = "test/browser/build/tests.js"
task :all => [:build, :test]
task :setup_dist_tools do
unless File.directory?("dist-tools/node_modules")
Dir.chdir('dist-tools') do
sh "npm install"
end
end
end
desc 'Builds browser distributable (SERVICES=s3,dynamodb,...)'
task :build => :build_complete do
sh({"MINIFY" => "1"}, "#{$BUILDER} > #{$BROWSERIFY_DIST.sub('.js', '.min.js')}")
end
task :build_complete => [:setup_dist_tools, :dist_path] do
sh({"MINIFY" => ""}, "#{$BUILDER} > #{$BROWSERIFY_DIST}")
end
task :build_all => [:setup_dist_tools, :dist_path] do
sh({"MINIFY" => "1"}, "#{$BUILDER} all > dist/aws-sdk-all.js")
end
desc 'Caches assets to the dist-tools build server'
task :build_server => [:setup_dist_tools] do
version = ENV['VERSION'].sub(/^v/, '')
raise "Missing version" unless version
root = "vendor/dist-server/sdks/v#{version}"
mkdir_p(root)
mkdir_p("#{root}/node_modules")
cp_r "lib", root
cp_r "node_modules/xmlbuilder", "#{root}/node_modules/xmlbuilder"
cp_r "node_modules/xml2js", "#{root}/node_modules/xml2js"
Dir.chdir("vendor/dist-server") do
sh "node setup-versions v#{version}"
end
end
desc 'Builds browser test harness and runner'
task :test => [:node10_only, :setup_dist_tools, :dist_path, :build_all] do
write_configuration
mkdir_p "test/browser/build"
cp "dist/aws-sdk-all.js", "test/browser/build/aws-sdk-all.js"
files = "test/helpers.js ";
files += Dir.glob("test/**/*.spec.js").delete_if{|name| excluded_files(name)}.sort().join(" ")
sh({"SERVICES" => "all"}, $BROWSERIFY +
" -i domain #{files} > #{$BROWSERIFY_TEST}")
rm_f "test/configuration.js"
end
task :dist_path do
mkdir_p 'dist'
end
task :node10_only do
version = `node -v`.chomp
v = version.split('.')
if v[0] == 'v0' && v[1].to_i < 10
puts "Skipping task #{ARGV[0]} due to unmet Node version (#{version} < v0.10.x)."
exit 0
end
end
end