#!/usr/bin/env ruby require 'json' require 'erb' require 'pry' require 'yaml' verbose = ARGV.include? "-v" binaries = YAML.load </skaffold-linux-amd64 :version: v0.17.0 :version_argument: version :version_match: "<%= version %>" :kubectl: :url: https://storage.googleapis.com/kubernetes-release/release/<%= version %>/bin/linux/amd64/kubectl :version: v1.15.1 :version_argument: version --client :version_match: ^Client Version.*GitVersion:\"(?<%= version %>)\" :kustomize: :url: https://github.com/kubernetes-sigs/kustomize/releases/download/v<%= version %>/kustomize_<%= version %>_linux_amd64 :version: 2.0.3 :version_argument: version :version_match: "^Version: {KustomizeVersion:(?<%= version %>) " :yq: :url: https://github.com/mikefarah/yq/releases/download/<%= version %>/yq_linux_amd64 :version: 2.1.1 :version_argument: "--version" :version_match: "^yq version <%= version %>" :lab: :url: https://github.com/zaquestion/lab/releases/download/v<%= version %>/lab_<%= version %>_linux_amd64.tar.gz :version: 0.14.0 :version_argument: version :version_match: "^lab version <%= version %>" :gopass: :url: https://github.com/gopasspw/gopass/releases/download/v<%= version %>/gopass-<%= version %>-linux-amd64.tar.gz :version: 1.8.6 :version_argument: version :version_match: "^gopass <%= version %> " :greenclip: :url: https://github.com/erebe/greenclip/releases/download/<%= version %>/greenclip :version: '3.1' :version_argument: version :version_match: "^greenclip v<%= version %>" :packer: :url: https://releases.hashicorp.com/packer/<%= version %>/packer_<%= version %>_linux_amd64.zip :version: 1.3.5 :version_argument: version :version_match: "^Packer v<%= version %>" :minikube: :url: https://storage.googleapis.com/minikube/releases/v<%= version %>/minikube-linux-amd64 :version: 0.33.1 :version_argument: version :version_match: "^minikube version: v<%= version %>" :terraform: :url: https://releases.hashicorp.com/terraform/<%= version %>/terraform_<%= version %>_linux_amd64.zip :version: 0.12.19 :version_argument: version :version_match: "^Terraform v<%= version %>" :vagrant: :url: https://releases.hashicorp.com/vagrant/<%= version %>/vagrant_<%= version %>_linux_amd64.zip :version: 2.2.5 :version_argument: version :version_match: "^Installed Version: <%= version %>" :helm: :url: https://get.helm.sh/helm-v<%= version %>-linux-amd64.tar.gz :version: 3.0.2 :version_argument: "version --short" :version_match: v<%= version %> :fzf: :url: https://github.com/junegunn/fzf-bin/releases/download/<%= version %>/fzf-<%= version %>-linux_amd64.tgz :version: 0.17.5 :version_argument: "--version" :version_match: "<%= version %>.*" :bat: :url: https://github.com/sharkdp/bat/releases/download/v<%= version %>/bat-v<%= version %>-x86_64-unknown-linux-gnu.tar.gz :version: 0.12.1 :version_argument: "--version" :version_match: bat <%= version %> :hcloud: :url: https://github.com/hetznercloud/cli/releases/download/v<%= version %>/hcloud-linux-amd64-v<%= version %>.tar.gz :version: 1.12.0 :version_argument: version :version_match: v<%= version %> :hugo: :url: https://github.com/gohugoio/hugo/releases/download/v<%= version %>/hugo_<%= version %>_Linux-64bit.tar.gz :version: 0.59.1 :version_argument: version :version_match: Hugo Static Site Generator v<%= version %> :pandoc: :url: https://github.com/jgm/pandoc/releases/download/<%= version %>/pandoc-<%= version %>-linux.tar.gz :version: 2.7.3 :version_argument: "--version" :version_match: pandoc-citeproc 0.16.2 :hadolint: :url: https://github.com/hadolint/hadolint/releases/download/v<%= version %>/hadolint-Linux-x86_64 :version: 1.17.2 :version_match: "<%= version %>" :version_argument: "--version" :shellcheck: :url: https://storage.googleapis.com/shellcheck/shellcheck-v<%= version %>.linux.x86_64.tar.xz :version: 0.7.0 :version_match: "version: <%= version %>" :version_argument: "--version" :wally-cli: :url: https://github.com/zsa/wally/releases/download/<%= version %>-linux/wally-cli :version: 1.1.0 :version_match: "---" :rancher: :url: https://github.com/rancher/cli/releases/download/v<%= version %>/rancher-linux-amd64-v<%= version %>.tar.gz :version: 2.3.0 :version_match: "rancher version v<%= version %>" :version_argument: "--version" :uni: :url: https://github.com/arp242/uni/releases/download/v<%= version %>/uni-v<%= version %>-linux-amd64.gz :version: 1.0.0 :version_match: "v<%= version %>" EOB tmpdir = Dir.mktmpdir binaries.each do |binary, download| target = File.expand_path("~/bin/#{binary}") version = download[:version] download_url = ERB.new(download[:url]).result(binding) version_match = Regexp.new(ERB.new(download[:version_match]).result(binding)) version_string = "#{target} #{download[:version_argument]}" puts target if not download.has_key? :version_argument puts "→ Cannot check for version, no version_argument supplied" elsif File.executable? target and `#{version_string}`.match(version_match) puts "→ Already at #{version}" else puts "→ Installing #{binary} #{download[:version]}" File.unlink target if File.exists? target download_dir = File.join(tmpdir, binary.to_s) Dir.mkdir(download_dir) Dir.chdir(download_dir) do puts "Downloading from #{download_url} to #{download_dir}" if verbose system "curl -s -L -O #{download_url}" downloaded_file = Dir.glob("*").first puts "Downloaded as #{downloaded_file}" if verbose extraction_command = case File.basename(downloaded_file) when /.tgz$/, /.tar.gz$/, /.tar.xz$/ then "tar xvf" when /.gz$/ then "gunzip" when /.zip$/ then "unzip" end if extraction_command puts "Using #{extraction_command} to extract" if verbose system("#{extraction_command} #{downloaded_file} > /dev/null") else puts "Did not find any archive I could extract" end extracted_executables = Dir.glob("**/**").select do |f| `file #{f}`.match(/LSB executable|ELF 64-bit LSB shared object|ELF 64-bit LSB pie executable/) end FileUtils.mv(File.realpath(extracted_executables.first), target) end File.chmod(0755, target) end end