1
0
Fork 0
dotfiles/bin/executable_install-binreleases

223 lines
8.5 KiB
Ruby

#!/usr/bin/env ruby
require 'json'
require 'erb'
require 'pry'
require 'yaml'
verbose = ARGV.include? "-v"
bindir = Pathname.new(File.expand_path("~/bin"))
binaries = YAML.load <<EOB
---
: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.20.4
: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: 2.0.3
: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.12.1
:version_argument: --version
:version_match: "^gopass <%= version %>"
:git-credential-gopass:
:url: https://github.com/gopasspw/git-credential-gopass/releases/download/v<%= version %>/git-credential-gopass-<%= version %>-linux-amd64.tar.gz
:version: 1.12.0
:version_argument: --version
:version_match: "^git-credential-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.15.1
:version_argument: version
:version_match: "^Terraform v<%= version %>"
:vagrant:
:url: https://releases.hashicorp.com/vagrant/<%= version %>/vagrant_<%= version
%>_linux_amd64.zip
:version: 2.2.14
: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/releases/download/<%= version %>/fzf-<%= version %>-linux_amd64.tar.gz
:version: 0.25.0
: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.82.0
: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://github.com/koalaman/shellcheck/releases/download/v<%= version %>/shellcheck-v<%= version %>.linux.x86_64.tar.xz
:version: 0.7.1
: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 %>"
:rg:
:url: https://github.com/BurntSushi/ripgrep/releases/download/<%= version %>/ripgrep-<%= version %>-x86_64-unknown-linux-musl.tar.gz
:version: 12.1.1
:version_match: "<%= version %>"
:version_argument: "--version"
:rga:
:url: https://github.com/phiresky/ripgrep-all/releases/download/v<%= version %>/ripgrep_all-v<%= version %>-x86_64-unknown-linux-musl.tar.gz
:version: 0.9.6
:version_match: "<%= version %>"
:version_argument: "--version"
:chezmoi:
:url: https://github.com/twpayne/chezmoi/releases/download/v<%= version %>/chezmoi_<%= version %>_linux_amd64.tar.gz
:version: 1.8.10
:version_match: "<%= version %>"
:version_argument: "--version"
:fd:
:url: https://github.com/sharkdp/fd/releases/download/v<%= version %>/fd-v<%= version %>-x86_64-unknown-linux-gnu.tar.gz
:version: 8.2.1
:version_match: "<%= version %>"
:version_argument: "--version"
:exa:
:url: https://github.com/ogham/exa/releases/download/v<%= version %>/exa-linux-x86_64-<%= version %>.zip
:version: 0.9.0
:version_match: "<%= version %>"
:version_argument: "--version"
:mutagen:
:url: https://github.com/mutagen-io/mutagen/releases/download/v<%= version %>/mutagen_linux_amd64_v<%= version %>.tar.gz
:version: 0.11.8
:version_match: "<%= version %>"
:version_argument: "version"
EOB
tmpdir = Dir.mktmpdir
binaries.each do |binary, download|
target = bindir.join(binary.to_s)
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|mutagen-agents.tar.gz/)
end
if (extracted_executables.length > 1) && (extracted_executables.include? binary.to_s)
puts "Found #{extracted_executables.length} executables, extracting all of them: #{extracted_executables.join(',')}"
extracted_executables.each do |executable|
FileUtils.mv(File.realpath(executable), bindir)
end
else
FileUtils.mv(File.realpath(extracted_executables.first), target)
end
end
File.chmod(0755, target)
end
end