commit
1ae03fe8e1
15 changed files with 319 additions and 120 deletions
26
.github/workflows/ci.yml
vendored
26
.github/workflows/ci.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
- run: TERM=xterm-256color ./make.sh assert-linear
|
||||
- run: COLOR=1 ./make.sh assert-linear
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
|
|
@ -25,7 +25,21 @@ jobs:
|
|||
with:
|
||||
go-version-file: ./go.mod
|
||||
cache: true
|
||||
- run: TERM=xterm-256color ./make.sh fmt
|
||||
- run: COLOR=1 ./make.sh fmt
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
gen:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version-file: ./go.mod
|
||||
cache: true
|
||||
- run: COLOR=1 ./make.sh gen
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
|
|
@ -39,7 +53,7 @@ jobs:
|
|||
with:
|
||||
go-version-file: ./go.mod
|
||||
cache: true
|
||||
- run: TERM=xterm-256color ./make.sh lint
|
||||
- run: COLOR=1 ./make.sh lint
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
|
|
@ -53,7 +67,7 @@ jobs:
|
|||
with:
|
||||
go-version-file: ./go.mod
|
||||
cache: true
|
||||
- run: TERM=xterm-256color ./make.sh build
|
||||
- run: COLOR=1 ./make.sh build
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
|
|
@ -67,7 +81,7 @@ jobs:
|
|||
with:
|
||||
go-version-file: ./go.mod
|
||||
cache: true
|
||||
- run: TERM=xterm-256color ./make.sh test
|
||||
- run: COLOR=1 ./make.sh test
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
|
|
@ -86,7 +100,7 @@ jobs:
|
|||
with:
|
||||
go-version-file: ./go.mod
|
||||
cache: true
|
||||
- run: TERM=xterm-256color ./make.sh race
|
||||
- run: COLOR=1 ./make.sh race
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
|
|
|
|||
2
.github/workflows/daily.yml
vendored
2
.github/workflows/daily.yml
vendored
|
|
@ -20,7 +20,7 @@ jobs:
|
|||
with:
|
||||
go-version-file: ./go.mod
|
||||
cache: true
|
||||
- run: CI_ALL=1 TERM=xterm-256color ./make.sh
|
||||
- run: CI_ALL=1 COLOR=1 ./make.sh
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
|
|
|
|||
5
Makefile
5
Makefile
|
|
@ -1,7 +1,7 @@
|
|||
.POSIX:
|
||||
|
||||
.PHONY: all
|
||||
all: fmt lint build test
|
||||
all: fmt gen lint build test
|
||||
ifdef CI
|
||||
all: assert-linear
|
||||
endif
|
||||
|
|
@ -9,6 +9,9 @@ endif
|
|||
.PHONY: fmt
|
||||
fmt:
|
||||
prefix "$@" ./ci/sub/fmt/make.sh
|
||||
.PHONY: gen
|
||||
gen:
|
||||
prefix "$@" ./ci/gen.sh
|
||||
.PHONY: lint
|
||||
lint:
|
||||
prefix "$@" go vet --composites=false ./...
|
||||
|
|
|
|||
11
ci/gen.sh
Executable file
11
ci/gen.sh
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
cd -- "$(dirname "$0")/.."
|
||||
. ./ci/sub/lib.sh
|
||||
|
||||
./ci/release/gen_install.sh
|
||||
./ci/release/gen_template_lib.sh
|
||||
|
||||
if [ -n "${CI-}" ]; then
|
||||
git_assert_clean
|
||||
fi
|
||||
|
|
@ -86,8 +86,7 @@ EOF
|
|||
|
||||
main() {
|
||||
METHOD=standalone
|
||||
while :; do
|
||||
flag_parse "$@"
|
||||
while flag_parse "$@"; do
|
||||
case "$FLAG" in
|
||||
h|help)
|
||||
help
|
||||
|
|
@ -129,15 +128,12 @@ main() {
|
|||
flag_noarg && shift "$FLAGSHIFT"
|
||||
UNINSTALL=1
|
||||
;;
|
||||
'')
|
||||
shift "$FLAGSHIFT"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
flag_errusage "unrecognized flag $FLAGRAW"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift "$FLAGSHIFT"
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
flag_errusage "no arguments are accepted"
|
||||
|
|
@ -176,7 +172,7 @@ install() {
|
|||
TALA_VERSION="$( install_tala && echo "$VERSION" )"
|
||||
fi
|
||||
|
||||
COLOR=2 header success
|
||||
FGCOLOR=2 header success
|
||||
log "d2-$VERSION-$OS-$ARCH has been successfully installed into $PREFIX"
|
||||
if [ -n "${TALA-}" ]; then
|
||||
log "tala-$TALA_VERSION-$OS-$ARCH has been successfully installed into $PREFIX"
|
||||
|
|
|
|||
|
|
@ -42,8 +42,7 @@ EOF
|
|||
}
|
||||
|
||||
main() {
|
||||
while :; do
|
||||
flag_parse "$@"
|
||||
while flag_parse "$@"; do
|
||||
case "$FLAG" in
|
||||
h|help)
|
||||
help
|
||||
|
|
@ -78,16 +77,12 @@ main() {
|
|||
flag_noarg && shift "$FLAGSHIFT"
|
||||
LOCKFILE_FORCE=1
|
||||
;;
|
||||
'')
|
||||
shift "$FLAGSHIFT"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
flag_errusage "unrecognized flag $FLAGRAW"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
shift "$FLAGSHIFT"
|
||||
if [ $# -gt 0 ]; then
|
||||
flag_errusage "no arguments are accepted"
|
||||
fi
|
||||
|
|
@ -169,16 +164,16 @@ build_local() {
|
|||
|
||||
build_remote_macos() {
|
||||
sh_c lockfile_ssh "$REMOTE_HOST" .d2-build-lock
|
||||
trap unlockfile_ssh EXIT
|
||||
sh_c ssh "$REMOTE_HOST" mkdir -p src
|
||||
sh_c rsync --archive --human-readable --delete ./ "$REMOTE_HOST:src/d2/"
|
||||
sh_c ssh "$REMOTE_HOST" "DRY_RUN=${DRY_RUN-} \
|
||||
sh_c ssh "$REMOTE_HOST" "COLOR=${COLOR-} \
|
||||
TERM=${TERM-} \
|
||||
DRY_RUN=${DRY_RUN-} \
|
||||
HW_BUILD_DIR=$HW_BUILD_DIR \
|
||||
VERSION=$VERSION \
|
||||
OS=$OS \
|
||||
ARCH=$ARCH \
|
||||
ARCHIVE=$ARCHIVE \
|
||||
TERM=$TERM \
|
||||
PATH=\\\"/usr/local/bin:/usr/local/sbin:/opt/homebrew/bin:/opt/homebrew/sbin\\\${PATH+:\\\$PATH}\\\" \
|
||||
./src/d2/ci/release/_build.sh"
|
||||
sh_c mkdir -p "$HW_BUILD_DIR"
|
||||
|
|
@ -187,16 +182,16 @@ PATH=\\\"/usr/local/bin:/usr/local/sbin:/opt/homebrew/bin:/opt/homebrew/sbin\\\$
|
|||
|
||||
build_remote_linux() {
|
||||
sh_c lockfile_ssh "$REMOTE_HOST" .d2-build-lock
|
||||
trap unlockfile_ssh EXIT
|
||||
sh_c ssh "$REMOTE_HOST" mkdir -p src
|
||||
sh_c rsync --archive --human-readable --delete ./ "$REMOTE_HOST:src/d2/"
|
||||
sh_c ssh "$REMOTE_HOST" "DRY_RUN=${DRY_RUN-} \
|
||||
sh_c ssh "$REMOTE_HOST" "COLOR=${COLOR-} \
|
||||
TERM=${TERM-} \
|
||||
DRY_RUN=${DRY_RUN-} \
|
||||
HW_BUILD_DIR=$HW_BUILD_DIR \
|
||||
VERSION=$VERSION \
|
||||
OS=$OS \
|
||||
ARCH=$ARCH \
|
||||
ARCHIVE=$ARCHIVE \
|
||||
TERM=$TERM \
|
||||
./src/d2/ci/release/build_docker.sh"
|
||||
sh_c mkdir -p "$HW_BUILD_DIR"
|
||||
sh_c rsync --archive --human-readable "$REMOTE_HOST:src/d2/$ARCHIVE" "$ARCHIVE"
|
||||
|
|
|
|||
|
|
@ -13,5 +13,4 @@ docker_run \
|
|||
-e OS \
|
||||
-e ARCH \
|
||||
-e ARCHIVE \
|
||||
-e TERM \
|
||||
"$tag" ./src/d2/ci/release/_build.sh
|
||||
|
|
|
|||
|
|
@ -12,8 +12,7 @@ EOF
|
|||
}
|
||||
|
||||
main() {
|
||||
while :; do
|
||||
flag_parse "$@"
|
||||
while flag_parse "$@"; do
|
||||
case "$FLAG" in
|
||||
h|help)
|
||||
help
|
||||
|
|
@ -27,15 +26,12 @@ main() {
|
|||
flag_nonemptyarg && shift "$FLAGSHIFT"
|
||||
KEY_FILE=$FLAGARG
|
||||
;;
|
||||
'')
|
||||
shift "$FLAGSHIFT"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
flag_errusage "unrecognized flag $FLAGRAW"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift "$FLAGSHIFT"
|
||||
if [ -z "${KEY_FILE-}" ]; then
|
||||
echoerr "-i is required"
|
||||
exit 1
|
||||
|
|
|
|||
|
|
@ -12,8 +12,7 @@ EOF
|
|||
}
|
||||
|
||||
main() {
|
||||
while :; do
|
||||
flag_parse "$@"
|
||||
while flag_parse "$@"; do
|
||||
case "$FLAG" in
|
||||
h|help)
|
||||
help
|
||||
|
|
@ -27,15 +26,12 @@ main() {
|
|||
flag_noarg && shift "$FLAGSHIFT"
|
||||
SKIP_CREATE=1
|
||||
;;
|
||||
'')
|
||||
shift "$FLAGSHIFT"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
flag_errusage "unrecognized flag $FLAGRAW"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift "$FLAGSHIFT"
|
||||
if [ $# -gt 0 ]; then
|
||||
flag_errusage "no arguments are accepted"
|
||||
fi
|
||||
|
|
@ -204,7 +200,7 @@ init_remote_hosts() {
|
|||
header macos-arm64
|
||||
REMOTE_HOST=$TSTRUCT_MACOS_ARM64_BUILDER init_remote_macos
|
||||
|
||||
COLOR=2 header summary
|
||||
FGCOLOR=2 header summary
|
||||
log "export TSTRUCT_LINUX_AMD64_BUILDER=$TSTRUCT_LINUX_AMD64_BUILDER"
|
||||
log "export TSTRUCT_LINUX_ARM64_BUILDER=$TSTRUCT_LINUX_ARM64_BUILDER"
|
||||
log "export TSTRUCT_MACOS_AMD64_BUILDER=$TSTRUCT_MACOS_AMD64_BUILDER"
|
||||
|
|
|
|||
|
|
@ -12,8 +12,7 @@ EOF
|
|||
}
|
||||
|
||||
main() {
|
||||
while :; do
|
||||
flag_parse "$@"
|
||||
while flag_parse "$@"; do
|
||||
case "$FLAG" in
|
||||
h|help)
|
||||
help
|
||||
|
|
@ -27,15 +26,12 @@ main() {
|
|||
flag_reqarg && shift "$FLAGSHIFT"
|
||||
JOBFILTER="$FLAGARG"
|
||||
;;
|
||||
'')
|
||||
shift "$FLAGSHIFT"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
flag_errusage "unrecognized flag $FLAGRAW"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift "$FLAGSHIFT"
|
||||
|
||||
REMOTE_HOST=$TSTRUCT_LINUX_AMD64_BUILDER; runjob linux-amd64 ssh "$REMOTE_HOST" "$@"
|
||||
REMOTE_HOST=$TSTRUCT_LINUX_ARM64_BUILDER; runjob linux-arm64 ssh "$REMOTE_HOST" "$@"
|
||||
|
|
|
|||
29
ci/release/gen_template_lib.sh
Executable file
29
ci/release/gen_template_lib.sh
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
cd -- "$(dirname "$0")/../.."
|
||||
. ./ci/sub/lib.sh
|
||||
|
||||
sh_c chmod +w ./ci/release/template/scripts/lib.sh
|
||||
sh_c cat >./ci/release/template/scripts/lib.sh <<EOF
|
||||
#!/bin/sh
|
||||
|
||||
# *************
|
||||
# DO NOT EDIT
|
||||
#
|
||||
# lib.sh was bundled together from
|
||||
#
|
||||
# - ./ci/sub/lib/rand.sh
|
||||
# - ./ci/sub/lib/log.sh
|
||||
#
|
||||
# Generated by ./ci/release/gen_template_lib.sh.
|
||||
# *************
|
||||
|
||||
EOF
|
||||
|
||||
# sed removes the sourcing dependency lines as we're bundled everything into a single
|
||||
# script.
|
||||
sh_c cat \
|
||||
./ci/sub/lib/rand.sh \
|
||||
./ci/sub/lib/log.sh \
|
||||
\| sed "-e'/^\. /d'" \>\>./ci/release/template/scripts/lib.sh
|
||||
sh_c chmod -w ./ci/release/template/scripts/lib.sh
|
||||
|
|
@ -1,8 +1,21 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ -n "${DEBUG-}" ]; then
|
||||
set -x
|
||||
# *************
|
||||
# DO NOT EDIT
|
||||
#
|
||||
# lib.sh was bundled together from
|
||||
#
|
||||
# - ./ci/sub/lib/rand.sh
|
||||
# - ./ci/sub/lib/log.sh
|
||||
#
|
||||
# Generated by ./ci/release/gen_template_lib.sh.
|
||||
# *************
|
||||
|
||||
#!/bin/sh
|
||||
if [ "${LIB_RAND-}" ]; then
|
||||
return 0
|
||||
fi
|
||||
LIB_RAND=1
|
||||
|
||||
rand() {
|
||||
seed="$1"
|
||||
|
|
@ -14,15 +27,51 @@ rand() {
|
|||
}
|
||||
|
||||
pick() {
|
||||
if ! command -v shuf >/dev/null || ! command -v md5sum >/dev/null; then
|
||||
eval "_echo \"\$3\""
|
||||
return
|
||||
fi
|
||||
|
||||
seed="$1"
|
||||
shift
|
||||
i="$(rand "$seed" "1-$#")"
|
||||
eval "_echo \"\$$i\""
|
||||
}
|
||||
#!/bin/sh
|
||||
if [ "${LIB_LOG-}" ]; then
|
||||
return 0
|
||||
fi
|
||||
LIB_LOG=1
|
||||
|
||||
if [ -n "${DEBUG-}" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
tput() {
|
||||
if [ -n "$TERM" ]; then
|
||||
command tput "$@"
|
||||
if should_color; then
|
||||
TERM=${TERM:-xterm-256color} command tput "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
should_color() {
|
||||
if [ -n "${COLOR-}" ]; then
|
||||
if [ "$COLOR" = 0 -o "$COLOR" = false ]; then
|
||||
_COLOR=
|
||||
return 1
|
||||
elif [ "$COLOR" = 1 -o "$COLOR" = true ]; then
|
||||
_COLOR=1
|
||||
return 0
|
||||
else
|
||||
printf '$COLOR must be 0, 1, false or true but got %s' "$COLOR" >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -t 1 ]; then
|
||||
_COLOR=1
|
||||
return 0
|
||||
else
|
||||
_COLOR=
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -59,14 +108,15 @@ printfp() {(
|
|||
prefix="$1"
|
||||
shift
|
||||
|
||||
if [ -z "${COLOR:-}" ]; then
|
||||
COLOR="$(get_rand_color "$prefix")"
|
||||
if [ -z "${FGCOLOR-}" ]; then
|
||||
FGCOLOR="$(get_rand_color "$prefix")"
|
||||
fi
|
||||
printf '%s' "$(setaf "$COLOR" "$prefix")"
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
printf ': '
|
||||
printf "$@"
|
||||
if [ $# -eq 0 ]; then
|
||||
should_color || true
|
||||
printf '%s' $(COLOR=${_COLOR-} setaf "$FGCOLOR" "$prefix")
|
||||
else
|
||||
should_color || true
|
||||
printf '%s: %s\n' $(COLOR=${_COLOR-} setaf "$FGCOLOR" "$prefix") "$(printf "$@")"
|
||||
fi
|
||||
)}
|
||||
|
||||
|
|
@ -74,13 +124,8 @@ catp() {
|
|||
prefix="$1"
|
||||
shift
|
||||
|
||||
printfp "$prefix"
|
||||
printf ': '
|
||||
read -r line
|
||||
_echo "$line"
|
||||
|
||||
indent=$(repeat ' ' 2)
|
||||
sed "s/^/$indent/"
|
||||
should_color || true
|
||||
sed "s/^/$(COLOR=${_COLOR-} printfp "$prefix" '')/"
|
||||
}
|
||||
|
||||
repeat() {
|
||||
|
|
@ -94,48 +139,144 @@ strlen() {
|
|||
}
|
||||
|
||||
echoerr() {
|
||||
COLOR=1 echop err "$*" >&2
|
||||
FGCOLOR=1 logp err "$*" | humanpath>&2
|
||||
}
|
||||
|
||||
caterr() {
|
||||
COLOR=1 catp err "$@" >&2
|
||||
FGCOLOR=1 logpcat err "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
printferr() {
|
||||
COLOR=1 printfp err "$@" >&2
|
||||
FGCOLOR=1 logfp err "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
logp() {
|
||||
echop "$@" >&2
|
||||
should_color >&2 || true
|
||||
COLOR=${_COLOR-} echop "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
logfp() {
|
||||
printfp "$@" >&2
|
||||
should_color >&2 || true
|
||||
COLOR=${_COLOR-} printfp "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
logpcat() {
|
||||
catp "$@" >&2
|
||||
should_color >&2 || true
|
||||
COLOR=${_COLOR-} catp "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
log() {
|
||||
COLOR=5 logp log "$@"
|
||||
FGCOLOR=5 logp log "$@"
|
||||
}
|
||||
|
||||
logf() {
|
||||
COLOR=5 logfp log "$@"
|
||||
FGCOLOR=5 logfp log "$@"
|
||||
}
|
||||
|
||||
logcat() {
|
||||
COLOR=5 catp log "$@" >&2
|
||||
FGCOLOR=5 logpcat log "$@"
|
||||
}
|
||||
|
||||
warn() {
|
||||
FGCOLOR=3 logp warn "$@"
|
||||
}
|
||||
|
||||
warnf() {
|
||||
FGCOLOR=3 logfp warn "$@"
|
||||
}
|
||||
|
||||
warncat() {
|
||||
FGCOLOR=3 logpcat warn "$@"
|
||||
}
|
||||
|
||||
sh_c() {
|
||||
COLOR=3 logp exec "$*"
|
||||
FGCOLOR=3 logp exec "$*"
|
||||
if [ -z "${DRY_RUN-}" ]; then
|
||||
"$@"
|
||||
eval "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
sudo_sh_c() {
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
sh_c "$@"
|
||||
elif command -v doas >/dev/null; then
|
||||
sh_c "doas $*"
|
||||
elif command -v sudo >/dev/null; then
|
||||
sh_c "sudo $*"
|
||||
elif command -v su >/dev/null; then
|
||||
sh_c "su root -c '$*'"
|
||||
else
|
||||
caterr <<EOF
|
||||
This script needs to run the following command as root:
|
||||
$*
|
||||
Please install doas, sudo, or su.
|
||||
EOF
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
header() {
|
||||
logp "/* $1 */"
|
||||
}
|
||||
|
||||
# humanpath replaces all occurrences of " $HOME" with " ~"
|
||||
# and all occurrences of '$HOME' with the literal '$HOME'.
|
||||
humanpath() {
|
||||
if [ -z "${HOME-}" ]; then
|
||||
cat
|
||||
else
|
||||
sed -e "s# $HOME# ~#g" -e "s#$HOME#\$HOME#g"
|
||||
fi
|
||||
}
|
||||
|
||||
hide() {
|
||||
out="$(mktemp)"
|
||||
set +e
|
||||
"$@" >"$out" 2>&1
|
||||
code="$?"
|
||||
set -e
|
||||
if [ "$code" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
cat "$out" >&2
|
||||
return "$code"
|
||||
}
|
||||
|
||||
echo_dur() {
|
||||
local dur=$1
|
||||
local h=$((dur/60/60))
|
||||
local m=$((dur/60%60))
|
||||
local s=$((dur%60))
|
||||
printf '%dh%dm%ds' "$h" "$m" "$s"
|
||||
}
|
||||
|
||||
sponge() {
|
||||
dst="$1"
|
||||
tmp="$(mktemp)"
|
||||
cat > "$tmp"
|
||||
cat "$tmp" > "$dst"
|
||||
}
|
||||
|
||||
stripansi() {
|
||||
# First regex gets rid of standard xterm escape sequences for controlling
|
||||
# visual attributes.
|
||||
# The second regex I'm not 100% sure, the reference says it selects the US
|
||||
# encoding but I'm not sure why that's necessary or why it always occurs
|
||||
# in tput sgr0 before the standard escape sequence.
|
||||
# See tput sgr0 | xxd
|
||||
sed -e $'s/\x1b\[[0-9;]*m//g' -e $'s/\x1b(.//g'
|
||||
}
|
||||
|
||||
runtty() {
|
||||
case "$(uname)" in
|
||||
Darwin)
|
||||
script -q /dev/null "$@"
|
||||
;;
|
||||
Linux)
|
||||
script -eqc "$*"
|
||||
;;
|
||||
*)
|
||||
echoerr "runtty: unsupported OS $(uname)"
|
||||
return 1
|
||||
esac
|
||||
}
|
||||
|
|
|
|||
2
ci/sub
2
ci/sub
|
|
@ -1 +1 @@
|
|||
Subproject commit df51b90892737ebe9feca3dd982bcdfc7f684834
|
||||
Subproject commit 8f9a24045546e76e39175ed148fdadd770c750ba
|
||||
2
go.sum
2
go.sum
|
|
@ -769,6 +769,8 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
|
|||
nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
|
||||
nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
|
||||
oss.terrastruct.com/cmdlog v0.0.0-20221116181457-07977d95ac37 h1:Xy1JKJHc4hcuwi57s0BvGUY16GjxTtBmLUybsuGDU7E=
|
||||
oss.terrastruct.com/cmdlog v0.0.0-20221116181457-07977d95ac37 h1:Xy1JKJHc4hcuwi57s0BvGUY16GjxTtBmLUybsuGDU7E=
|
||||
oss.terrastruct.com/cmdlog v0.0.0-20221116181457-07977d95ac37/go.mod h1:ROL3yxl2X+S3O+Rls00qdX6aMh+p1dF8IdxDRwDDpsg=
|
||||
oss.terrastruct.com/cmdlog v0.0.0-20221116181457-07977d95ac37/go.mod h1:ROL3yxl2X+S3O+Rls00qdX6aMh+p1dF8IdxDRwDDpsg=
|
||||
oss.terrastruct.com/diff v1.0.2-0.20221116222035-8bf4dd3ab541 h1:I9B1O1IJ6spivIQxbFRZmbhAwVeLwrcQRR1JbYUOvrI=
|
||||
oss.terrastruct.com/diff v1.0.2-0.20221116222035-8bf4dd3ab541/go.mod h1:ags2QDy/T6jr69hT6bpmAmhr2H98n9o8Atf3QlUJPiU=
|
||||
|
|
|
|||
105
install.sh
105
install.sh
|
|
@ -54,8 +54,30 @@ if [ -n "${DEBUG-}" ]; then
|
|||
fi
|
||||
|
||||
tput() {
|
||||
if [ -n "$TERM" ]; then
|
||||
command tput "$@"
|
||||
if should_color; then
|
||||
TERM=${TERM:-xterm-256color} command tput "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
should_color() {
|
||||
if [ -n "${COLOR-}" ]; then
|
||||
if [ "$COLOR" = 0 -o "$COLOR" = false ]; then
|
||||
_COLOR=
|
||||
return 1
|
||||
elif [ "$COLOR" = 1 -o "$COLOR" = true ]; then
|
||||
_COLOR=1
|
||||
return 0
|
||||
else
|
||||
printf '$COLOR must be 0, 1, false or true but got %s' "$COLOR" >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -t 1 ]; then
|
||||
_COLOR=1
|
||||
return 0
|
||||
else
|
||||
_COLOR=
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -92,14 +114,15 @@ printfp() {(
|
|||
prefix="$1"
|
||||
shift
|
||||
|
||||
if [ -z "${COLOR:-}" ]; then
|
||||
COLOR="$(get_rand_color "$prefix")"
|
||||
if [ -z "${FGCOLOR-}" ]; then
|
||||
FGCOLOR="$(get_rand_color "$prefix")"
|
||||
fi
|
||||
printf '%s' "$(setaf "$COLOR" "$prefix")"
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
printf ': '
|
||||
printf "$@"
|
||||
if [ $# -eq 0 ]; then
|
||||
should_color || true
|
||||
printf '%s' $(COLOR=${_COLOR-} setaf "$FGCOLOR" "$prefix")
|
||||
else
|
||||
should_color || true
|
||||
printf '%s: %s\n' $(COLOR=${_COLOR-} setaf "$FGCOLOR" "$prefix") "$(printf "$@")"
|
||||
fi
|
||||
)}
|
||||
|
||||
|
|
@ -107,7 +130,8 @@ catp() {
|
|||
prefix="$1"
|
||||
shift
|
||||
|
||||
sed "s/^/$(printfp "$prefix" '')/"
|
||||
should_color || true
|
||||
sed "s/^/$(COLOR=${_COLOR-} printfp "$prefix" '')/"
|
||||
}
|
||||
|
||||
repeat() {
|
||||
|
|
@ -121,51 +145,58 @@ strlen() {
|
|||
}
|
||||
|
||||
echoerr() {
|
||||
COLOR=1 echop err "$*" | humanpath>&2
|
||||
FGCOLOR=1 logp err "$*" | humanpath>&2
|
||||
}
|
||||
|
||||
caterr() {
|
||||
COLOR=1 catp err "$@" | humanpath >&2
|
||||
FGCOLOR=1 logpcat err "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
printferr() {
|
||||
COLOR=1 printfp err "$@" | humanpath >&2
|
||||
FGCOLOR=1 logfp err "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
logp() {
|
||||
echop "$@" | humanpath >&2
|
||||
should_color >&2 || true
|
||||
COLOR=${_COLOR-} echop "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
logfp() {
|
||||
printfp "$@" | humanpath >&2
|
||||
should_color >&2 || true
|
||||
COLOR=${_COLOR-} printfp "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
logpcat() {
|
||||
catp "$@" | humanpath >&2
|
||||
should_color >&2 || true
|
||||
COLOR=${_COLOR-} catp "$@" | humanpath >&2
|
||||
}
|
||||
|
||||
log() {
|
||||
COLOR=5 logp log "$@"
|
||||
FGCOLOR=5 logp log "$@"
|
||||
}
|
||||
|
||||
logf() {
|
||||
COLOR=5 logfp log "$@"
|
||||
FGCOLOR=5 logfp log "$@"
|
||||
}
|
||||
|
||||
logcat() {
|
||||
COLOR=5 logpcat log "$@"
|
||||
FGCOLOR=5 logpcat log "$@"
|
||||
}
|
||||
|
||||
warn() {
|
||||
COLOR=3 logp warn "$@"
|
||||
FGCOLOR=3 logp warn "$@"
|
||||
}
|
||||
|
||||
warnf() {
|
||||
COLOR=3 logfp warn "$@"
|
||||
FGCOLOR=3 logfp warn "$@"
|
||||
}
|
||||
|
||||
warncat() {
|
||||
FGCOLOR=3 logpcat warn "$@"
|
||||
}
|
||||
|
||||
sh_c() {
|
||||
COLOR=3 logp exec "$*"
|
||||
FGCOLOR=3 logp exec "$*"
|
||||
if [ -z "${DRY_RUN-}" ]; then
|
||||
eval "$@"
|
||||
fi
|
||||
|
|
@ -280,9 +311,8 @@ LIB_FLAG=1
|
|||
# FLAGSHIFT contains the number by which the arguments should be shifted to
|
||||
# start at the next flag/argument
|
||||
#
|
||||
# After each call check $FLAG for the name of the parsed flag.
|
||||
# If empty, then no more flags are left.
|
||||
# Still, call shift "$FLAGSHIFT" in case there was a --
|
||||
# flag_parse exits with a non zero code when there are no more flags
|
||||
# to be parsed. Still, call shift "$FLAGSHIFT" in case there was a --
|
||||
#
|
||||
# If the argument for the flag is optional, then use ${FLAGARG-} to access
|
||||
# the argument if one was passed. Use ${FLAGARG+x} = x to check if it was set.
|
||||
|
|
@ -310,18 +340,15 @@ flag_parse() {
|
|||
# Remove everything before first equal sign.
|
||||
FLAGARG="${1#*=}"
|
||||
FLAGSHIFT=1
|
||||
return 0
|
||||
;;
|
||||
-)
|
||||
FLAG=
|
||||
FLAGRAW=
|
||||
unset FLAGARG
|
||||
FLAGSHIFT=0
|
||||
return 1
|
||||
;;
|
||||
--)
|
||||
FLAG=
|
||||
FLAGRAW=
|
||||
unset FLAGARG
|
||||
FLAGSHIFT=1
|
||||
return 1
|
||||
;;
|
||||
-*)
|
||||
# Remove leading hyphens.
|
||||
|
|
@ -343,15 +370,13 @@ flag_parse() {
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
FLAG=
|
||||
FLAGRAW=
|
||||
unset FLAGARG
|
||||
FLAGSHIFT=0
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
return 0
|
||||
}
|
||||
|
||||
flag_reqarg() {
|
||||
|
|
@ -520,8 +545,7 @@ EOF
|
|||
|
||||
main() {
|
||||
METHOD=standalone
|
||||
while :; do
|
||||
flag_parse "$@"
|
||||
while flag_parse "$@"; do
|
||||
case "$FLAG" in
|
||||
h|help)
|
||||
help
|
||||
|
|
@ -563,15 +587,12 @@ main() {
|
|||
flag_noarg && shift "$FLAGSHIFT"
|
||||
UNINSTALL=1
|
||||
;;
|
||||
'')
|
||||
shift "$FLAGSHIFT"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
flag_errusage "unrecognized flag $FLAGRAW"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift "$FLAGSHIFT"
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
flag_errusage "no arguments are accepted"
|
||||
|
|
@ -610,7 +631,7 @@ install() {
|
|||
TALA_VERSION="$( install_tala && echo "$VERSION" )"
|
||||
fi
|
||||
|
||||
COLOR=2 header success
|
||||
FGCOLOR=2 header success
|
||||
log "d2-$VERSION-$OS-$ARCH has been successfully installed into $PREFIX"
|
||||
if [ -n "${TALA-}" ]; then
|
||||
log "tala-$TALA_VERSION-$OS-$ARCH has been successfully installed into $PREFIX"
|
||||
|
|
|
|||
Loading…
Reference in a new issue