release: Use sudo automatically when installing/uninstalling

This commit is contained in:
Anmol Sethi 2022-12-01 12:26:32 -08:00
parent 5e151c1e0a
commit 54311cbf3d
No known key found for this signature in database
GPG key ID: 25BC68888A99A8BA
8 changed files with 88 additions and 15 deletions

View file

@ -450,13 +450,10 @@ uninstall_tala_brew() {
}
is_prefix_writable() {
sh_c "mkdir -p '$INSTALL_DIR' 2>/dev/null" || true
# The reason for checking whether $INSTALL_DIR is writable is that on macOS you have
# /usr/local owned by root but you don't need root to write to its subdirectories which
# is all we want to do.
if [ ! -w "$INSTALL_DIR" ]; then
return 1
fi
is_writable_dir "$INSTALL_DIR"
}
cache_dir() {

View file

@ -14,6 +14,7 @@ sh_c cat >./ci/release/template/scripts/lib.sh <<EOF
#
# - ./ci/sub/lib/rand.sh
# - ./ci/sub/lib/log.sh
# - ./ci/sub/lib/release.sh
#
# Generated by ./ci/release/gen_template_lib.sh.
# *************
@ -25,5 +26,6 @@ EOF
sh_c cat \
./ci/sub/lib/rand.sh \
./ci/sub/lib/log.sh \
./ci/sub/lib/release.sh \
\| sed "-e'/^\. /d'" \>\>./ci/release/template/scripts/lib.sh
sh_c chmod -w ./ci/release/template/scripts/lib.sh

View file

@ -1,6 +1,11 @@
.POSIX:
.SILENT:
.PHONY: all
all:
(. ./scripts/lib.sh && echoerr "You must provide a target of install or uninstall for this Makefile")
exit 1
PREFIX = $(DESTDIR)/usr/local
.PHONY: install

View file

@ -9,10 +9,15 @@ main() {
return 1
fi
sh_c mkdir -p "$PREFIX/bin"
sh_c install ./bin/d2 "$PREFIX/bin/d2"
sh_c mkdir -p "$PREFIX/share/man/man1"
sh_c install ./man/d2.1 "$PREFIX/share/man/man1"
sh_c="sh_c"
if ! is_writable_dir "$PREFIX/bin"; then
sh_c="sudo_sh_c"
fi
"$sh_c" mkdir -p "$PREFIX/bin"
"$sh_c" install ./bin/d2 "$PREFIX/bin/d2"
"$sh_c" mkdir -p "$PREFIX/share/man/man1"
"$sh_c" install ./man/d2.1 "$PREFIX/share/man/man1"
}
main "$@"

View file

@ -7,6 +7,7 @@
#
# - ./ci/sub/lib/rand.sh
# - ./ci/sub/lib/log.sh
# - ./ci/sub/lib/release.sh
#
# Generated by ./ci/release/gen_template_lib.sh.
# *************
@ -298,3 +299,56 @@ capcode() {
code=$?
set -e
}
#!/bin/sh
if [ "${LIB_RELEASE-}" ]; then
return 0
fi
LIB_RELEASE=1
goos() {
case $1 in
macos) echo darwin ;;
*) echo $1 ;;
esac
}
os() {
uname=$(uname)
case $uname in
Linux) echo linux ;;
Darwin) echo macos ;;
FreeBSD) echo freebsd ;;
*) echo "$uname" ;;
esac
}
arch() {
uname_m=$(uname -m)
case $uname_m in
aarch64) echo arm64 ;;
x86_64) echo amd64 ;;
*) echo "$uname_m" ;;
esac
}
gh_repo() {
gh repo view --json nameWithOwner --template '{{ .nameWithOwner }}'
}
manpath() {
if command -v manpath >/dev/null; then
command manpath
elif man -w 2>/dev/null; then
man -w
else
echo "${MANPATH-}"
fi
}
is_writable_dir() {
# The path has to exist for -w to succeed.
sh_c "mkdir -p '$1' 2>/dev/null" || true
if [ ! -w "$1" ]; then
return 1
fi
}

View file

@ -9,8 +9,13 @@ main() {
return 1
fi
sh_c rm -f "$PREFIX/bin/d2"
sh_c rm -f "$PREFIX/share/man/man1/d2.1"
sh_c="sh_c"
if ! is_writable_dir "$PREFIX/bin"; then
sh_c="sudo_sh_c"
fi
"$sh_c" rm -f "$PREFIX/bin/d2"
"$sh_c" rm -f "$PREFIX/share/man/man1/d2.1"
}
main "$@"

2
ci/sub

@ -1 +1 @@
Subproject commit ea5566075122e826293ef3cf98c5fffcbee99341
Subproject commit 70a9ad95ea0ae1de83fa3b7f7d4a160db4853c20

View file

@ -480,6 +480,14 @@ manpath() {
echo "${MANPATH-}"
fi
}
is_writable_dir() {
# The path has to exist for -w to succeed.
sh_c "mkdir -p '$1' 2>/dev/null" || true
if [ ! -w "$1" ]; then
return 1
fi
}
#!/bin/sh
set -eu
@ -927,13 +935,10 @@ uninstall_tala_brew() {
}
is_prefix_writable() {
sh_c "mkdir -p '$INSTALL_DIR' 2>/dev/null" || true
# The reason for checking whether $INSTALL_DIR is writable is that on macOS you have
# /usr/local owned by root but you don't need root to write to its subdirectories which
# is all we want to do.
if [ ! -w "$INSTALL_DIR" ]; then
return 1
fi
is_writable_dir "$INSTALL_DIR"
}
cache_dir() {