Sha256: 33d896b861b8f1ac388e2c4cdb94eeb5da804f2726caaafaf8e780df04a50787

Contents?: true

Size: 1.58 KB

Versions: 4

Compression:

Stored size: 1.58 KB

Contents

require_relative '../consul'

require 'net/http'
require 'uri'

begin
  require 'zipruby'
rescue LoadError
  puts 'To use Dev::Consul::Build, you must install the zipruby gem!'
end

module Dev
  module Consul
    ##
    # Tools to fetch and extract Hashicorp's platform builds of Consul
    ##
    module Build
      REPOSITORY = "https://releases.hashicorp.com/consul/#{VERSION}".freeze
      PACKAGES = [
        "consul_#{VERSION}_darwin_386.zip",
        "consul_#{VERSION}_darwin_amd64.zip",
        "consul_#{VERSION}_freebsd_386.zip",
        "consul_#{VERSION}_freebsd_amd64.zip",
        "consul_#{VERSION}_freebsd_arm.zip",
        "consul_#{VERSION}_linux_386.zip",
        "consul_#{VERSION}_linux_amd64.zip",
        "consul_#{VERSION}_linux_arm.zip",
        "consul_#{VERSION}_solaris_amd64.zip"
      ].freeze

      class << self
        def fetch
          uri = URI.parse(REPOSITORY)
          client = Net::HTTP.new(uri.host, uri.port)
          client.use_ssl = true if uri.scheme == 'https'

          PACKAGES.each do |package|
            puts "Fetch #{File.join(uri.path, package)}"
            request = Net::HTTP::Get.new(File.join(uri.path, package))

            client.request(request) do |response|
              Zip::Archive.open_buffer(response.body) do |archive|
                archive.each do |file|
                  next unless file.name == 'consul'

                  open(File.join(Consul.bindir, File.basename(package, '.zip')), 'wb', 00755) { |io| io.write(file.read) }
                end
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dev-consul-0.6.4.3 lib/dev/consul/build.rb
dev-consul-0.6.4.2 lib/dev/consul/build.rb
dev-consul-0.6.4.1 lib/dev/consul/build.rb
dev-consul-0.6.4 lib/dev/consul/build.rb