dotfiles/home/bin/install-binreleases

116 lines
4.1 KiB
Ruby
Executable File

#!/usr/bin/env ruby
require 'json'
require 'erb'
require 'pry'
binaries = {
skaffold: {
url: "https://storage.googleapis.com/skaffold/releases/<%= version %>/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.13.2",
version_argument: "version --client",
version_match: '^Client Version.*GitVersion:\"(?<version><%= version %>)\"'
},
kustomize: {
url: "https://github.com/kubernetes-sigs/kustomize/releases/download/v<%= version %>/kustomize_<%= version %>_linux_amd64",
version: "1.0.10",
version_argument: "version",
version_match: '^Version: {KustomizeVersion:(?<version><%= 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.3",
version_argument: "version",
version_match: '^gopass <%= version %> ',
extractor: lambda() do
Dir.glob("gopass*/gopass")
end
},
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.11.11",
version_argument: "version",
version_match: "^Terraform v<%= version %>"
},
helm: {
url: "https://storage.googleapis.com/kubernetes-helm/helm-v<%= version %>-linux-amd64.tar.gz",
version: "2.13.0",
version_argument: "version -c",
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: "v<%= version %>"
},
}
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 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
system "curl -s -L -O #{download_url}"
downloaded_file = Dir.glob("*").first
system("tar xvf #{downloaded_file} > /dev/null") if downloaded_file.end_with?(".tgz")
system("tar xvf #{downloaded_file} > /dev/null") if downloaded_file.end_with?(".gz")
system("unzip #{downloaded_file} > /dev/null") if downloaded_file.end_with?(".zip")
FileUtils.mv(File.realpath([Dir.glob("#{binary}-*/#{binary}*"), Dir.glob("**/**/#{binary}*"), binary].flatten.first), target)
end
File.chmod(0755, target)
end
end