lib/kinesis_producer/tasks/binary.rake (51 lines of code) (raw):
#
# Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Amazon Software License (the "License").
# You may not use this file except in compliance with the License.
# A copy of the License is located at
#
# http://aws.amazon.com/asl/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
require 'kinesis_producer'
require 'net/http'
require 'zip'
jar_version = "0.10.2"
jar_file = "amazon-kinesis-producer-#{jar_version}.jar"
jar_url = "https://search.maven.org/remotecontent?filepath=com/amazonaws/amazon-kinesis-producer/#{jar_version}/#{jar_file}"
cache_dir = Pathname.new(".cache")
cache_jar_file = cache_dir.join(jar_file)
binaries = KinesisProducer::Binary::Files.values
directory cache_dir
file cache_jar_file => [cache_dir] do |t|
puts "Downloading #{jar_file}"
download(jar_url, t.name)
end
binaries.each do |bin|
file bin => [cache_jar_file] do |t|
puts "Extracting #{bin} from #{jar_file}"
unzip(cache_jar_file, bin)
chmod 0755, bin
end
end
task :binaries => binaries
task :clean do
rm_rf cache_dir
rm_rf File.dirname(File.dirname(binary))
end
def download(url, target)
rm_f target
uri = URI(url)
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |https|
req = Net::HTTP::Get.new(uri.request_uri)
https.request(req) do |res|
open(target, 'wb') do |io|
res.read_body do |chunk|
io.write(chunk)
end
end
end
end
end
def unzip(zip_file, *targets)
rm_f targets
Zip::File.open(zip_file) do |z|
z.each do |entry|
if targets.include?(entry.name)
mkdir_p File.dirname(entry.name)
entry.extract(entry.name)
end
end
end
end