[bin] The big YAML-reckoning + more debug output when needed
This commit is contained in:
parent
b3254ce91d
commit
dedee63ed3
|
@ -3,118 +3,123 @@
|
|||
require 'json'
|
||||
require 'erb'
|
||||
require 'pry'
|
||||
require 'yaml'
|
||||
|
||||
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.15.1",
|
||||
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.8.6",
|
||||
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.12.2",
|
||||
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: "^Vagrant <%= version %>"
|
||||
},
|
||||
helm: {
|
||||
url: "https://storage.googleapis.com/kubernetes-helm/helm-v<%= version %>-linux-amd64.tar.gz",
|
||||
version: "2.13.0",
|
||||
version_argument: "--version",
|
||||
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.10.0",
|
||||
version_argument: "--version",
|
||||
version_match: "v<%= 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.55.6",
|
||||
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"
|
||||
},
|
||||
"wally-cli": {
|
||||
url: "https://github.com/zsa/wally/releases/download/<%= version %>-linux/wally-cli",
|
||||
version: "1.1.0"
|
||||
},
|
||||
}
|
||||
verbose = ARGV.include? "-v"
|
||||
|
||||
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.15.1
|
||||
: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.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.10
|
||||
: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://storage.googleapis.com/kubernetes-helm/helm-v<%= version %>-linux-amd64.tar.gz
|
||||
:version: 2.13.0
|
||||
:version_argument: "--version"
|
||||
: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.55.6
|
||||
: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: "---"
|
||||
|
||||
EOB
|
||||
|
||||
tmpdir = Dir.mktmpdir
|
||||
|
||||
|
@ -138,18 +143,26 @@ binaries.each do |binary, download|
|
|||
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
|
||||
|
||||
extraction_command = case File.extname(downloaded_file)
|
||||
when ".tgz", ".tar.gz", ".gz" then
|
||||
puts "Downloaded as #{downloaded_file}" if verbose
|
||||
extraction_command = case File.basename(downloaded_file)
|
||||
when /.tgz$/, /.tar.gz$/, /.gz$/, /.tar.xz$/ then
|
||||
"tar xvf"
|
||||
when ".zip" then
|
||||
when /.zip$/ then
|
||||
"unzip"
|
||||
end
|
||||
system("#{extraction_command} #{downloaded_file} > /dev/null")
|
||||
|
||||
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/)
|
||||
`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
|
||||
|
|
Loading…
Reference in New Issue