diff --git a/ci/release/_install.sh b/ci/release/_install.sh index 66cf1ac03..170d9d798 100755 --- a/ci/release/_install.sh +++ b/ci/release/_install.sh @@ -156,15 +156,7 @@ main() { INSTALL_DIR=$PREFIX/lib/d2 if [ -n "${UNINSTALL-}" ]; then - if ! command -v d2 >/dev/null; then - echoerr "no version of d2 installed" - return 1 - fi - INSTALLED_VERSION="$(d2 version)" - if ! uninstall; then - echoerr "failed to uninstall $INSTALLED_VERSION" - return 1 - fi + uninstall return 0 fi @@ -173,24 +165,13 @@ main() { fetch_release_info fi - if command -v d2 >/dev/null; then - INSTALLED_VERSION="$(d2 version)" - if [ ! "${FORCE-}" -a "$VERSION" = "$INSTALLED_VERSION" ]; then - log "skipping installation as version $VERSION is already installed." - return 0 - fi - log "uninstalling $INSTALLED_VERSION to install $VERSION" - if ! uninstall; then - warn "failed to uninstall $INSTALLED_VERSION" - fi - fi install } install() { - standalone_install + install_d2 if [ "${TALA-}" ]; then - standalone_install_tala + install_tala fi COLOR=2 header success @@ -207,14 +188,23 @@ EOF fi } -uninstall() { - standalone_uninstall - if [ "${TALA-}" ]; then - standalone_uninstall_tala +install_d2() { + if command -v d2 >/dev/null; then + INSTALLED_VERSION="$(d2 version)" + if [ ! "${FORCE-}" -a "$VERSION" = "$INSTALLED_VERSION" ]; then + log "skipping installation as version $VERSION is already installed." + return 0 + fi + log "uninstalling $INSTALLED_VERSION to install $VERSION" + if ! uninstall_d2; then + warn "failed to uninstall $INSTALLED_VERSION" + fi fi + + install_standalone_d2 } -standalone_install() { +install_standalone_d2() { ARCHIVE="d2-$VERSION-$OS-$ARCH.tar.gz" header "installing standalone release $ARCHIVE from github" @@ -232,11 +222,66 @@ standalone_install() { "$sh_c" sh -c "'cd \"$INSTALL_DIR/d2-$VERSION\" && make install PREFIX=\"$PREFIX\"'" } -standalone_uninstall() { +install_tala() { + install_standalone_tala +} + +install_standalone_tala() { + REPO="${REPO_TALA:-terrastruct/TALA}" + VERSION=${TALA:-latest} + RELEASE_INFO= + fetch_release_info + + ARCHIVE="d2plugin-tala-$VERSION-$OS-$ARCH.tar.gz" + header "installing standalone release $ARCHIVE from github" + + asset_line=$(cat "$RELEASE_INFO" | grep -n "$ARCHIVE" | cut -d: -f1 | head -n1) + asset_url=$(sed -n $((asset_line-3))p "$RELEASE_INFO" | sed 's/^.*: "\(.*\)",$/\1/g') + + fetch_gh "$asset_url" "$CACHE_DIR/$ARCHIVE" 'application/octet-stream' + + sh_c="sh_c" + if ! is_prefix_writable; then + sh_c="sudo_sh_c" + fi + + "$sh_c" tar -C "$INSTALL_DIR" -xzf "$CACHE_DIR/$ARCHIVE" + "$sh_c" sh -c "'cd \"$INSTALL_DIR/d2plugin-tala-$VERSION\" && make install PREFIX=\"$PREFIX\"'" +} + +uninstall() { + if ! command -v d2 >/dev/null; then + echoerr "no version of d2 installed" + return 1 + fi + INSTALLED_VERSION="$(d2 --version)" + if ! uninstall_d2; then + echoerr "failed to uninstall $INSTALLED_VERSION" + return 1 + fi + if [ "${TALA-}" ]; then + if ! command -v d2plugin-tala >/dev/null; then + echoerr "no version of d2plugin-tala installed" + return 1 + fi + INSTALLED_VERSION="$(d2plugin-tala --version)" + if ! uninstall_tala; then + echoerr "failed to uninstall d2plugin-tala $INSTALLED_VERSION" + return 1 + fi + fi + return 0 +} + +uninstall_d2() { + uninstall_standalone_d2 +} + +uninstall_standalone_d2() { header "uninstalling standalone release d2-$INSTALLED_VERSION" if [ ! -e "$INSTALL_DIR/d2-$INSTALLED_VERSION" ]; then - echoerr "no installed release directory for d2-$INSTALLED_VERSION in $INSTALL_DIR/d2-$INSTALLED_VERSION" + echoerr "missing standalone install release directory $INSTALL_DIR/d2-$INSTALLED_VERSION" return 1 fi @@ -249,6 +294,27 @@ standalone_uninstall() { "$sh_c" rm -rf "$INSTALL_DIR/d2-$INSTALLED_VERSION" } +uninstall_tala() { + uninstall_standalone_tala +} + +uninstall_standalone_tala() { + header "uninstalling standalone release d2plugin-tala-$INSTALLED_VERSION" + + if [ ! -e "$INSTALL_DIR/d2plugin-tala-$INSTALLED_VERSION" ]; then + echoerr "missing standalone install release directory $INSTALL_DIR/d2plugin-tala-$INSTALLED_VERSION" + return 1 + fi + + sh_c="sh_c" + if ! is_prefix_writable; then + sh_c="sudo_sh_c" + fi + + "$sh_c" sh -c "'cd \"$INSTALL_DIR/d2plugin-tala-$INSTALLED_VERSION\" && make uninstall PREFIX=\"$PREFIX\"'" + "$sh_c" rm -rf "$INSTALL_DIR/d2plugin-tala-$INSTALLED_VERSION" +} + is_prefix_writable() { sh_c "mkdir -p '$INSTALL_DIR' 2>/dev/null" || true # The reason for checking whether bin is writable specifically is that on macOS you have diff --git a/ci/release/gen_install.sh b/ci/release/gen_install.sh index b04325cc2..1931d9029 100755 --- a/ci/release/gen_install.sh +++ b/ci/release/gen_install.sh @@ -1,6 +1,6 @@ #!/bin/sh set -eu -cd -- "$(dirname "$0")/../.." +cd -- "$(dirname "$0")/../.." . ./ci/sub/lib.sh cat >./install.sh </dev/null; then - echoerr "no version of d2 installed" - return 1 - fi - INSTALLED_VERSION="$(d2 version)" - if ! uninstall; then - echoerr "failed to uninstall $INSTALLED_VERSION" - return 1 - fi + uninstall return 0 fi @@ -583,24 +575,13 @@ main() { fetch_release_info fi - if command -v d2 >/dev/null; then - INSTALLED_VERSION="$(d2 version)" - if [ ! "${FORCE-}" -a "$VERSION" = "$INSTALLED_VERSION" ]; then - log "skipping installation as version $VERSION is already installed." - return 0 - fi - log "uninstalling $INSTALLED_VERSION to install $VERSION" - if ! uninstall; then - warn "failed to uninstall $INSTALLED_VERSION" - fi - fi install } install() { - standalone_install + install_d2 if [ "${TALA-}" ]; then - standalone_install_tala + install_tala fi COLOR=2 header success @@ -617,14 +598,23 @@ EOF fi } -uninstall() { - standalone_uninstall - if [ "${TALA-}" ]; then - standalone_uninstall_tala +install_d2() { + if command -v d2 >/dev/null; then + INSTALLED_VERSION="$(d2 version)" + if [ ! "${FORCE-}" -a "$VERSION" = "$INSTALLED_VERSION" ]; then + log "skipping installation as version $VERSION is already installed." + return 0 + fi + log "uninstalling $INSTALLED_VERSION to install $VERSION" + if ! uninstall_d2; then + warn "failed to uninstall $INSTALLED_VERSION" + fi fi + + install_standalone_d2 } -standalone_install() { +install_standalone_d2() { ARCHIVE="d2-$VERSION-$OS-$ARCH.tar.gz" header "installing standalone release $ARCHIVE from github" @@ -642,11 +632,66 @@ standalone_install() { "$sh_c" sh -c "'cd \"$INSTALL_DIR/d2-$VERSION\" && make install PREFIX=\"$PREFIX\"'" } -standalone_uninstall() { +install_tala() { + install_standalone_tala +} + +install_standalone_tala() { + REPO="${REPO_TALA:-terrastruct/TALA}" + VERSION=${TALA:-latest} + RELEASE_INFO= + fetch_release_info + + ARCHIVE="d2plugin-tala-$VERSION-$OS-$ARCH.tar.gz" + header "installing standalone release $ARCHIVE from github" + + asset_line=$(cat "$RELEASE_INFO" | grep -n "$ARCHIVE" | cut -d: -f1 | head -n1) + asset_url=$(sed -n $((asset_line-3))p "$RELEASE_INFO" | sed 's/^.*: "\(.*\)",$/\1/g') + + fetch_gh "$asset_url" "$CACHE_DIR/$ARCHIVE" 'application/octet-stream' + + sh_c="sh_c" + if ! is_prefix_writable; then + sh_c="sudo_sh_c" + fi + + "$sh_c" tar -C "$INSTALL_DIR" -xzf "$CACHE_DIR/$ARCHIVE" + "$sh_c" sh -c "'cd \"$INSTALL_DIR/d2plugin-tala-$VERSION\" && make install PREFIX=\"$PREFIX\"'" +} + +uninstall() { + if ! command -v d2 >/dev/null; then + echoerr "no version of d2 installed" + return 1 + fi + INSTALLED_VERSION="$(d2 --version)" + if ! uninstall_d2; then + echoerr "failed to uninstall $INSTALLED_VERSION" + return 1 + fi + if [ "${TALA-}" ]; then + if ! command -v d2plugin-tala >/dev/null; then + echoerr "no version of d2plugin-tala installed" + return 1 + fi + INSTALLED_VERSION="$(d2plugin-tala --version)" + if ! uninstall_tala; then + echoerr "failed to uninstall d2plugin-tala $INSTALLED_VERSION" + return 1 + fi + fi + return 0 +} + +uninstall_d2() { + uninstall_standalone_d2 +} + +uninstall_standalone_d2() { header "uninstalling standalone release d2-$INSTALLED_VERSION" if [ ! -e "$INSTALL_DIR/d2-$INSTALLED_VERSION" ]; then - echoerr "no installed release directory for d2-$INSTALLED_VERSION in $INSTALL_DIR/d2-$INSTALLED_VERSION" + echoerr "missing standalone install release directory $INSTALL_DIR/d2-$INSTALLED_VERSION" return 1 fi @@ -659,6 +704,27 @@ standalone_uninstall() { "$sh_c" rm -rf "$INSTALL_DIR/d2-$INSTALLED_VERSION" } +uninstall_tala() { + uninstall_standalone_tala +} + +uninstall_standalone_tala() { + header "uninstalling standalone release d2plugin-tala-$INSTALLED_VERSION" + + if [ ! -e "$INSTALL_DIR/d2plugin-tala-$INSTALLED_VERSION" ]; then + echoerr "missing standalone install release directory $INSTALL_DIR/d2plugin-tala-$INSTALLED_VERSION" + return 1 + fi + + sh_c="sh_c" + if ! is_prefix_writable; then + sh_c="sudo_sh_c" + fi + + "$sh_c" sh -c "'cd \"$INSTALL_DIR/d2plugin-tala-$INSTALLED_VERSION\" && make uninstall PREFIX=\"$PREFIX\"'" + "$sh_c" rm -rf "$INSTALL_DIR/d2plugin-tala-$INSTALLED_VERSION" +} + is_prefix_writable() { sh_c "mkdir -p '$INSTALL_DIR' 2>/dev/null" || true # The reason for checking whether bin is writable specifically is that on macOS you have