You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
1.8 KiB
95 lines
1.8 KiB
6 years ago
|
#!/bin/sh
|
||
|
|
||
|
set -eu
|
||
|
|
||
|
unset -v progname progdir
|
||
|
progname="${0##*/}"
|
||
|
case "${0}" in
|
||
|
*/*) progdir="${0%/*}";;
|
||
|
*) progdir=".";;
|
||
|
esac
|
||
|
|
||
|
msg() { case $# in [1-9]*) echo "${progname}: $*" >&2;; esac; }
|
||
|
|
||
|
print_usage() {
|
||
|
cat <<- ENDEND
|
||
|
usage: ${progname} [-h] pkg ...
|
||
|
|
||
|
Register the given tool package(s) in tools/tools.go and go.mod.
|
||
|
|
||
|
pkg is a tool to install, ex: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.15.0
|
||
|
omitting the @version suffix installs the latest.
|
||
|
|
||
|
options:
|
||
|
-h print this help
|
||
|
ENDEND
|
||
|
}
|
||
|
|
||
|
usage() {
|
||
|
msg "$@"
|
||
|
print_usage >&2
|
||
|
exit 64
|
||
|
}
|
||
|
|
||
|
unset -v opt
|
||
|
OPTIND=1
|
||
|
while getopts :h opt
|
||
|
do
|
||
|
case "${opt}" in
|
||
|
"?") usage "unrecognized option -${OPTARG}";;
|
||
|
":") usage "missing argument for -${OPTARG}";;
|
||
|
h) print_usage; exit 0;;
|
||
|
esac
|
||
|
done
|
||
|
shift $((${OPTIND} - 1))
|
||
|
|
||
|
cd "${progdir}/.."
|
||
|
|
||
|
if git status --short go.mod tools/tools.go | grep -q .
|
||
|
then
|
||
|
msg "go.mod or tools/tools.go contains local change;" \
|
||
|
"commit or stash them first." >&2
|
||
|
exit 69
|
||
|
fi
|
||
|
|
||
|
go mod tidy
|
||
|
if git status --short go.mod | grep -q .
|
||
|
then
|
||
|
git commit -m 'go mod tidy' go.mod
|
||
|
fi
|
||
|
|
||
|
doit() {
|
||
|
local pkg pkg_name
|
||
|
pkg="${1-}"
|
||
|
shift 1 || return $?
|
||
|
pkg_name="${pkg%%@*}"
|
||
|
msg "adding ${pkg} to tools/tools.go"
|
||
|
sed -i.orig '/^import ($/a\
|
||
|
_ "'"${pkg_name}"'"
|
||
|
' tools/tools.go
|
||
|
rm -f tools/tools.go.orig
|
||
|
goimports -w tools/tools.go
|
||
|
if git diff --exit-code tools/tools.go
|
||
|
then
|
||
|
msg "${pkg_name} already seems to be in tools/tools.go"
|
||
|
return 0
|
||
|
fi
|
||
|
msg "adding ${pkg} to go.mod"
|
||
|
go get "${pkg}"
|
||
|
go mod tidy
|
||
|
if git diff --exit-code go.mod
|
||
|
then
|
||
|
msg "${pkg} already seems to be in go.mod" \
|
||
|
"(maybe it is already required as a build dependency)"
|
||
|
fi
|
||
|
git commit -m "Add ${pkg} as a build tool" tools/tools.go go.mod
|
||
|
}
|
||
|
|
||
|
unset -v pkg ok
|
||
|
ok=true
|
||
|
for pkg
|
||
|
do
|
||
|
doit "${pkg}" || ok=false
|
||
|
done
|
||
|
exec "${ok}"
|