mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-19 13:41:10 +02:00
155 lines
3.1 KiB
Bash
Executable File
155 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
set -euo pipefail
|
|
|
|
# Determine the root directory of the repository
|
|
repo_root() {
|
|
git rev-parse --show-toplevel
|
|
}
|
|
|
|
# Install an external Go tool.
|
|
go_install() {
|
|
if go install "$1"; then
|
|
echo "--> $1 ✔"
|
|
else
|
|
echo "--> $1 ✖"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Check for a tool binary in the path.
|
|
check_tool() {
|
|
if builtin type -P "$2" &> /dev/null; then
|
|
echo "--> $2 ✔"
|
|
else
|
|
echo "--> $2 ✖"
|
|
echo "Could not find required $1 tool $2. Run 'make tools-$1' to install it." 1>&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Install external tools.
|
|
install_external() {
|
|
local tools
|
|
# If you update this please update check_external below as well as our external tools
|
|
# install action ./github/actions/install-external-tools.yml
|
|
tools=(
|
|
github.com/bufbuild/buf/cmd/buf@v1.25.0
|
|
github.com/favadi/protoc-go-inject-tag@latest
|
|
github.com/golangci/misspell/cmd/misspell@latest
|
|
github.com/golangci/revgrep/cmd/revgrep@latest
|
|
golang.org/x/tools/cmd/goimports@latest
|
|
google.golang.org/protobuf/cmd/protoc-gen-go@latest
|
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
|
|
gotest.tools/gotestsum@latest
|
|
honnef.co/go/tools/cmd/staticcheck@latest
|
|
mvdan.cc/gofumpt@latest
|
|
)
|
|
|
|
echo "==> Installing external tools..."
|
|
for tool in "${tools[@]}"; do
|
|
go_install "$tool"
|
|
done
|
|
}
|
|
|
|
# Check that all tools are installed
|
|
check_external() {
|
|
# Ensure that all external tools are available. In CI we'll prefer installing pre-built external
|
|
# tools for speed instead of go install so that we don't require downloading Go modules and
|
|
# compiling tools from scratch in every CI job.
|
|
# See .github/actions/install-external-tools.yml for that workflow.
|
|
local tools
|
|
tools=(
|
|
buf
|
|
gofumpt
|
|
goimports
|
|
gotestsum
|
|
misspell
|
|
protoc-gen-go
|
|
protoc-gen-go-grpc
|
|
protoc-go-inject-tag
|
|
revgrep
|
|
staticcheck
|
|
)
|
|
|
|
echo "==> Checking for external tools..."
|
|
for tool in "${tools[@]}"; do
|
|
check_tool external "$tool"
|
|
done
|
|
}
|
|
|
|
# Install internal tools.
|
|
install_internal() {
|
|
local tools
|
|
# If you update this please update check tools below.
|
|
tools=(
|
|
codechecker
|
|
stubmaker
|
|
)
|
|
|
|
echo "==> Installing internal tools..."
|
|
pushd "$(repo_root)" &> /dev/null
|
|
for tool in "${tools[@]}"; do
|
|
go_install ./tools/"$tool"
|
|
done
|
|
popd &> /dev/null
|
|
}
|
|
|
|
# Check internal that all tools are installed
|
|
check_internal() {
|
|
# Ensure that all required internal tools are available.
|
|
local tools
|
|
tools=(
|
|
codechecker
|
|
stubmaker
|
|
)
|
|
|
|
echo "==> Checking for internal tools..."
|
|
for tool in "${tools[@]}"; do
|
|
check_tool internal "$tool"
|
|
done
|
|
}
|
|
|
|
# Install tools.
|
|
install() {
|
|
install_internal
|
|
install_external
|
|
}
|
|
|
|
# Check tools.
|
|
check() {
|
|
check_internal
|
|
check_external
|
|
}
|
|
|
|
main() {
|
|
case $1 in
|
|
install-external)
|
|
install_external
|
|
;;
|
|
install-internal)
|
|
install_internal
|
|
;;
|
|
check-external)
|
|
check_external
|
|
;;
|
|
check-internal)
|
|
check_internal
|
|
;;
|
|
install)
|
|
install
|
|
;;
|
|
check)
|
|
check
|
|
;;
|
|
*)
|
|
echo "unknown sub-command" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
main "$@"
|