mirror of
https://github.com/denisidoro/navi
synced 2024-11-24 20:43:06 +00:00
Refactor scripts (#527)
This commit is contained in:
parent
90de292c1f
commit
7a7f1a3311
12 changed files with 138 additions and 148 deletions
5
Makefile
5
Makefile
|
@ -2,4 +2,7 @@ install:
|
|||
scripts/make install
|
||||
|
||||
uninstall:
|
||||
scripts/make uninstall
|
||||
scripts/make uninstall
|
||||
|
||||
fix:
|
||||
scripts/make fix
|
|
@ -46,7 +46,7 @@ cargo install navi
|
|||
bash <(curl -sL https://raw.githubusercontent.com/denisidoro/navi/master/scripts/install)
|
||||
|
||||
# (optional) to set directories:
|
||||
# SOURCE_DIR=/opt/navi BIN_DIR=/usr/local/bin bash <(curl -sL https://raw.githubusercontent.com/denisidoro/navi/master/scripts/install)
|
||||
# BIN_DIR=/usr/local/bin bash <(curl -sL https://raw.githubusercontent.com/denisidoro/navi/master/scripts/install)
|
||||
```
|
||||
|
||||
#### Downloading pre-compiled binaries
|
||||
|
|
44
scripts/brew
44
scripts/brew
|
@ -1,44 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
##? brew formula
|
||||
|
||||
export NAVI_HOME="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
source "${NAVI_HOME}/scripts/install"
|
||||
|
||||
gen_formula() {
|
||||
version="$(latest_version_released)"
|
||||
header "version: ${version}"
|
||||
|
||||
header "sha_for x86_64-unknown-linux-musl..."
|
||||
sha_linux="$(sha_for_asset_on_github "$version" "x86_64-unknown-linux-musl")"
|
||||
header "$sha_linux"
|
||||
|
||||
header "sha_for x86_64-apple-darwin..."
|
||||
sha_osx="$(sha_for_asset_on_github "$version" "x86_64-apple-darwin")"
|
||||
header "$sha_osx"
|
||||
|
||||
header "rb..."
|
||||
curl -s https://raw.githubusercontent.com/denisidoro/homebrew-tools/master/navi.rb \
|
||||
| sed -E "s/version ['\"].*/version '${version}'/" \
|
||||
| awk '!x{x=sub("sha256","sha_osx")}7' \
|
||||
| awk '!x{x=sub("sha256","sha_linux")}7' \
|
||||
| sed -E "s/sha_osx.*/sha256 \"${sha_osx}\"/" \
|
||||
| sed -E "s/sha_linux.*/sha256 \"${sha_linux}\"/"
|
||||
}
|
||||
|
||||
gen_sha() {
|
||||
version="${1:-$(latest_version_released)}"
|
||||
header "version: ${version}"
|
||||
|
||||
header "sha_for source..."
|
||||
sha_for_asset_on_github "$version"
|
||||
}
|
||||
|
||||
cmd="$1"
|
||||
shift
|
||||
|
||||
case "$cmd" in
|
||||
"formula") gen_formula "$@" ;;
|
||||
"sha") gen_sha "$@" ;;
|
||||
esac
|
|
@ -3,13 +3,30 @@ set -euo pipefail
|
|||
|
||||
export NAVI_HOME="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
cd "$NAVI_HOME"
|
||||
_start() {
|
||||
cd "$NAVI_HOME"
|
||||
|
||||
./scripts/release x86_64-unknown-linux-musl
|
||||
./scripts/release x86_64-unknown-linux-musl
|
||||
|
||||
docker run \
|
||||
-e HOMEBREW_NO_AUTO_UPDATE=1 \
|
||||
-e HOMEBREW_NO_INSTALL_CLEANUP=1 \
|
||||
-v "$(pwd):/navi" \
|
||||
-it 'bashell/alpine-bash' \
|
||||
bash -c 'apk add git; apk add curl; git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && yes | ln -s /navi/target/debug/navi /usr/local/bin/navi; source $HOME/.bashrc; bash'
|
||||
docker run \
|
||||
-e HOMEBREW_NO_AUTO_UPDATE=1 \
|
||||
-e HOMEBREW_NO_INSTALL_CLEANUP=1 \
|
||||
-v "$(pwd):/navi" \
|
||||
-it 'bashell/alpine-bash' \
|
||||
bash -c '/navi/scripts docker setup; exec bash'
|
||||
}
|
||||
|
||||
_setup() {
|
||||
apk add git
|
||||
apk add curl
|
||||
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
|
||||
ln -s /navi/target/debug/navi /usr/local/bin/navi
|
||||
}
|
||||
|
||||
main() {
|
||||
local -r fn="$1"
|
||||
shift || true
|
||||
"_${fn}" "$@"
|
||||
}
|
||||
|
||||
main "$@"
|
22
scripts/fix
22
scripts/fix
|
@ -4,21 +4,33 @@ set -euo pipefail
|
|||
export NAVI_HOME="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
source "${NAVI_HOME}/scripts/install"
|
||||
|
||||
_commit() {
|
||||
if [ -n "${DOTFILES:-}" ]; then
|
||||
git add --all || true
|
||||
dot git commit am || true
|
||||
fi
|
||||
}
|
||||
|
||||
cd "$NAVI_HOME"
|
||||
|
||||
header "cargo clippy fix..."
|
||||
_commit
|
||||
log::note "cargo clippy fix..."
|
||||
cargo +nightly clippy --fix -Z unstable-options || true
|
||||
|
||||
header "cargo fix..."
|
||||
_commit
|
||||
log::note "cargo fix..."
|
||||
cargo fix || true
|
||||
|
||||
header "cargo fmt..."
|
||||
_commit
|
||||
log::note "cargo fmt..."
|
||||
cargo fmt || true
|
||||
|
||||
header "clippy..."
|
||||
_commit
|
||||
log::note "clippy..."
|
||||
cargo clippy || true
|
||||
|
||||
header "dot code beautify..."
|
||||
_commit
|
||||
log::note "dot code beautify..."
|
||||
find scripts -type f | xargs -I% dot code beautify % || true
|
||||
dot code beautify "${NAVI_HOME}/tests/core.bash" || true
|
||||
dot code beautify "${NAVI_HOME}/tests/run" || true
|
||||
|
|
119
scripts/install
119
scripts/install
|
@ -1,34 +1,15 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
if ${X_MODE:-false}; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
# =====================
|
||||
# paths
|
||||
# =====================
|
||||
|
||||
get_dir() {
|
||||
local -r first_dir="$1"
|
||||
local -r second_dir="$2"
|
||||
local -r useless_folder="${first_dir}/useless"
|
||||
local folder
|
||||
mkdir -p "$useless_folder" 2>/dev/null \
|
||||
&& folder="$first_dir" \
|
||||
|| folder="$second_dir"
|
||||
rm -r "$useless_folder" 2>/dev/null
|
||||
echo "$folder"
|
||||
}
|
||||
|
||||
get_source_dir() {
|
||||
get_dir "/opt/navi" "${HOME}/.navi/src"
|
||||
}
|
||||
|
||||
get_bin_dir() {
|
||||
get_dir "/usr/bin" "/usr/local/bin"
|
||||
}
|
||||
|
||||
get_tmp_dir() {
|
||||
get_dir "/tmp/navi" "${HOME}/.navi/tmp"
|
||||
}
|
||||
export BIN_DIR="${BIN_DIR:-"${HOME}/.cargo/bin"}"
|
||||
|
||||
|
||||
# =====================
|
||||
|
@ -78,7 +59,7 @@ log::ansi() {
|
|||
_log() {
|
||||
local template="$1"
|
||||
shift
|
||||
echoerr -e "$(printf "$template" "$@")"
|
||||
echoerr "$(printf "$template" "$@")"
|
||||
}
|
||||
|
||||
_header() {
|
||||
|
@ -110,19 +91,19 @@ die() {
|
|||
}
|
||||
|
||||
no_binary_warning() {
|
||||
echoerr "There's no precompiled binary for your platform: $(uname -a)"
|
||||
log::note "There's no precompiled binary for your platform: $(uname -a)"
|
||||
}
|
||||
|
||||
installation_finish_instructions() {
|
||||
local -r shell="$(get_shell)"
|
||||
echoerr -e "Finished. To call navi, restart your shell or reload the config file:\n source ~/.${shell}rc"
|
||||
log::note -e "Finished. To call navi, restart your shell or reload the config file:\n source ~/.${shell}rc"
|
||||
local code
|
||||
if [[ "$shell" == "zsh" ]]; then
|
||||
code="navi widget ${shell} | source"
|
||||
else
|
||||
code='source <(navi widget '"$shell"')'
|
||||
fi
|
||||
echoerr -e "\nTo add the Ctrl-G keybinding, add the following to ~/.${shell}rc:\n ${code}"
|
||||
log::note -e "\nTo add the Ctrl-G keybinding, add the following to ~/.${shell}rc:\n ${code}"
|
||||
}
|
||||
|
||||
|
||||
|
@ -138,7 +119,7 @@ sha256() {
|
|||
elif command_exists openssl; then
|
||||
openssl dgst -sha256
|
||||
else
|
||||
echoerr "Unable to calculate sha256!"
|
||||
log::note "Unable to calculate sha256!"
|
||||
exit 43
|
||||
fi
|
||||
}
|
||||
|
@ -166,15 +147,14 @@ asset_url() {
|
|||
}
|
||||
|
||||
download_asset() {
|
||||
local -r tmp_dir="$(mktemp -d -t navi-install-XXXX)"
|
||||
local -r url="$(asset_url "$@")"
|
||||
mkdir -p "$TMP_DIR"
|
||||
cd "$TMP_DIR"
|
||||
rm -f navi.tar.gz
|
||||
echoerr "Downloading ${url}..."
|
||||
log::note "Downloading ${url}..."
|
||||
cd "$tmp_dir"
|
||||
curl -L "$url" -o navi.tar.gz
|
||||
tar xvzf navi.tar.gz
|
||||
rm -f navi.tar.gz
|
||||
cp "${TMP_DIR}/navi" "${BIN_DIR}/navi"
|
||||
mkdir -p "${BIN_DIR}" &>/dev/null || true
|
||||
mv "./navi" "${BIN_DIR}/navi"
|
||||
}
|
||||
|
||||
sha_for_asset_on_github() {
|
||||
|
@ -182,6 +162,11 @@ sha_for_asset_on_github() {
|
|||
curl -sL "$url" | sha256 | awk '{print $1}'
|
||||
}
|
||||
|
||||
error_installing() {
|
||||
log::error "Unable to install navi. Please check https://github.com/denisidoro/navi for alternative installation instructions"
|
||||
exit 33
|
||||
}
|
||||
|
||||
|
||||
# =====================
|
||||
# code
|
||||
|
@ -208,16 +193,13 @@ command_exists() {
|
|||
get_target() {
|
||||
local -r unamea="$(uname -a)"
|
||||
local -r archi="$(uname -sm)"
|
||||
local is_android
|
||||
|
||||
[[ $unamea = *Android* ]] && is_android=true || is_android=false
|
||||
|
||||
local target
|
||||
case "$archi" in
|
||||
Darwin*) target="x86_64-apple-darwin" ;;
|
||||
*x86*) $is_android && target="" || target="x86_64-unknown-linux-musl" ;;
|
||||
*aarch*) $is_android && target="aarch64-linux-android" || target="armv7-unknown-linux-musleabihf" ;;
|
||||
*arm*) $is_android && target="armv7-linux-androideabi" || target="armv7-unknown-linux-musleabihf" ;;
|
||||
case "$unamea $archi" in
|
||||
*arwin*) target="x86_64-apple-darwin" ;;
|
||||
*inux*x86*) target="x86_64-unknown-linux-musl" ;;
|
||||
*ndroid*aarch*|*ndroid*arm*) target="aarch64-linux-android" ;;
|
||||
*inux*aarch*|*inux*arm*) target="armv7-unknown-linux-musleabihf" ;;
|
||||
*) target="" ;;
|
||||
esac
|
||||
|
||||
|
@ -234,35 +216,46 @@ get_shell() {
|
|||
# =====================
|
||||
|
||||
install_navi() {
|
||||
export SRC_DIR="${SRC_DIR:-"$(get_source_dir)"}"
|
||||
export BIN_DIR="${BIN_DIR:-"$(get_bin_dir)"}"
|
||||
export TMP_DIR="${TMP_DIR:-"$(get_tmp_dir)"}"
|
||||
echoerr -e "Relevant directories:\n- src: ${SRC_DIR}\n- bin: ${BIN_DIR}\n- tmp: ${TMP_DIR}\n"
|
||||
|
||||
local -r target="$(get_target)"
|
||||
|
||||
if [[ -n "$target" ]]; then
|
||||
local -r version="$(latest_version_released)"
|
||||
download_asset "$version" "$target"
|
||||
if command_exists navi; then
|
||||
log::success "navi is already installed"
|
||||
exit 0
|
||||
|
||||
elif command_exists brew; then
|
||||
brew install navi
|
||||
|
||||
elif command_exists cargo; then
|
||||
no_binary_warning
|
||||
echoerr "Building sources..."
|
||||
git clone https://github.com/denisidoro/navi "$SRC_DIR"
|
||||
cd "$SRC_DIR"
|
||||
make install
|
||||
cargo install navi
|
||||
|
||||
elif [[ -n "$target" ]]; then
|
||||
local -r version="$(latest_version_released)"
|
||||
download_asset "$version" "$target" || error_installing
|
||||
|
||||
else
|
||||
no_binary_warning
|
||||
echoerr "You don't have the necessary tools to build it"
|
||||
echoerr "Please open an issue at https://github.com/denisidoro/navi"
|
||||
echoerr "Aborting..."
|
||||
exit 33
|
||||
error_installing
|
||||
|
||||
fi
|
||||
|
||||
local -r shell="$(get_shell)"
|
||||
echoerr -e "Finished. To call navi, restart your shell or reload the config file:\n source ~/.${shell}rc"
|
||||
echoerr -e "\nTo add the Ctrl-G keybinding, add the following to ~/.${shell}rc:\n source \"$(navi widget ${shell})\""
|
||||
echoerr
|
||||
log::success "Finished"
|
||||
log::success "navi is now available at ${BIN_DIR}/navi"
|
||||
echoerr
|
||||
|
||||
if echo "$PATH" | grep -q "$BIN_DIR"; then
|
||||
:
|
||||
else
|
||||
echoerr
|
||||
log::note 'Please add the following to your .bashrc-like file:'
|
||||
echo -e ' export PATH="${PATH}:'"$BIN_DIR"'"\n'
|
||||
fi
|
||||
|
||||
log::note "To call navi, restart your shell or reload your .bashrc-like config file"
|
||||
echo
|
||||
log::note "Check https://github.com/denisidoro/navi for more info"
|
||||
|
||||
export PATH="${PATH}:${BIN_DIR}"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
14
scripts/make
14
scripts/make
|
@ -8,23 +8,27 @@ export NAVI_HOME="$(cd "$(dirname "$0")/.." && pwd)"
|
|||
source "${NAVI_HOME}/scripts/install"
|
||||
|
||||
install() {
|
||||
export SOURCE_DIR="${SOURCE_DIR:-"$(get_source_dir)"}"
|
||||
export BIN_DIR="${BIN_DIR:-"$(get_bin_dir)"}"
|
||||
echoerr "The final binary will be available at ${BIN_DIR}/navi..."
|
||||
"${NAVI_HOME}/scripts/action" release
|
||||
ln -s "${NAVI_HOME}/target/tar/navi" "${BIN_DIR}/navi"
|
||||
}
|
||||
|
||||
uninstall() {
|
||||
export SOURCE_DIR="${SOURCE_DIR:-"$(get_source_dir)"}"
|
||||
rm -rf "${NAVI_HOME}/target"
|
||||
rm "$SOURCE_DIR"
|
||||
rm -f "${BIN_DIR}/navi"
|
||||
}
|
||||
|
||||
fix() {
|
||||
"${NAVI_HOME}/scripts/fix"
|
||||
}
|
||||
|
||||
cmd="$1"
|
||||
shift
|
||||
|
||||
export X_MODE=true
|
||||
set -x
|
||||
|
||||
case "$cmd" in
|
||||
"install") install "$@" ;;
|
||||
"uninstall") uninstall "$@" ;;
|
||||
"fix") fix "$@" ;;
|
||||
esac
|
||||
|
|
|
@ -14,7 +14,7 @@ is_windows() {
|
|||
get_env_target() {
|
||||
eval $(rustc --print cfg | grep target)
|
||||
local r raw="${target_arch}-${target_vendor}-${target_os}-${target_env}"
|
||||
echoerr "env_raw: $raw"
|
||||
log::note "env target raw: $raw"
|
||||
if echo "$raw" | grep -q "x86_64-apple-macos"; then
|
||||
echo "x86_64-apple-darwin"
|
||||
else
|
||||
|
@ -23,21 +23,21 @@ get_env_target() {
|
|||
}
|
||||
|
||||
_tap() {
|
||||
echoerr "$@"
|
||||
log::note "$@"
|
||||
"$@"
|
||||
}
|
||||
|
||||
release() {
|
||||
local -r cross_target="${1:-}"
|
||||
echoerr "cross_target: $cross_target"
|
||||
local -r env_target="$(get_env_target)"
|
||||
log::note "env target: $env_target"
|
||||
|
||||
local -r cross_target="${1:-"$env_target"}"
|
||||
log::note "desired target: $cross_target"
|
||||
|
||||
TAR_DIR="${NAVI_HOME}/target/tar"
|
||||
local use_zip=false
|
||||
local cross=true
|
||||
|
||||
local -r env_target="$(get_env_target)"
|
||||
echoerr "env_target: $env_target"
|
||||
|
||||
if [[ $cross_target == $env_target ]]; then
|
||||
cross=false
|
||||
fi
|
||||
|
@ -83,11 +83,10 @@ release() {
|
|||
|
||||
_ls "${bin_path}"
|
||||
_ls "${TAR_DIR}"
|
||||
|
||||
}
|
||||
|
||||
_ls() {
|
||||
echoerr "contents from $@:"
|
||||
log::note "contents from $@:"
|
||||
ls -la "$@" || true
|
||||
}
|
||||
|
||||
|
|
13
scripts/run
13
scripts/run
|
@ -4,6 +4,13 @@ set -euo pipefail
|
|||
export NAVI_HOME="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
cd "$NAVI_HOME"
|
||||
rm -rf "target/release/navi" 2> /dev/null || true
|
||||
rm -rf "target/debug/navi" 2> /dev/null || true
|
||||
cargo run -- "$@"
|
||||
|
||||
if command_exists navi; then
|
||||
navi "$@"
|
||||
elif [ -f "./target/release/navi" ]; then
|
||||
"./target/release/navi" "$@"
|
||||
elif [ -f "./target/debug/navi" ]; then
|
||||
"./target/debug/navi" "$@"
|
||||
else
|
||||
cargo run -- "$@"
|
||||
fi
|
||||
|
|
|
@ -5,7 +5,7 @@ export NAVI_HOME="$(cd "$(dirname "$0")/.." && pwd)"
|
|||
source "${NAVI_HOME}/scripts/install"
|
||||
|
||||
version="${1:-$(version_from_toml)}"
|
||||
echo "version: $version..."
|
||||
log::note "version: $version..."
|
||||
sleep 2
|
||||
|
||||
git tag -a "v${version}"
|
||||
|
|
|
@ -37,9 +37,8 @@ impl ShellSpawnError {
|
|||
pub fn out() -> Command {
|
||||
let shell = CONFIG.shell();
|
||||
let mut cmd = Command::new(&shell);
|
||||
if shell != "cmd.exe" {
|
||||
cmd.arg("-c");
|
||||
}
|
||||
let arg = if shell == "cmd.exe" { "/c" } else { "-c" };
|
||||
cmd.arg(arg);
|
||||
cmd
|
||||
}
|
||||
|
||||
|
|
10
tests/run
10
tests/run
|
@ -91,27 +91,27 @@ _integration() {
|
|||
rm "$log_file" 2>/dev/null || true
|
||||
mv "$cheats_path" "$bak_cheats_path" 2>/dev/null || true
|
||||
|
||||
echoerr "Starting sessions..."
|
||||
log::note "Starting sessions..."
|
||||
tmux new-session -d -s ci "export NAVI_TEST_PATH='${cheats_path}'; ${NAVI_HOME}/tests/run _navi |& tee '${log_file}'"
|
||||
sleep 5
|
||||
_assert_tmux "$log_file"
|
||||
|
||||
echoerr "Downloading default cheatsheets..."
|
||||
log::note "Downloading default cheatsheets..."
|
||||
tmux send-key -t ci "download default"; tmux send-key -t ci "Enter"
|
||||
sleep 1
|
||||
_assert_tmux "$log_file"
|
||||
|
||||
echoerr "Confirming import..."
|
||||
log::note "Confirming import..."
|
||||
tmux send-key -t ci "y"; tmux send-key -t ci "Enter"
|
||||
sleep 6
|
||||
_assert_tmux "$log_file"
|
||||
|
||||
echoerr "Running snippet..."
|
||||
log::note "Running snippet..."
|
||||
tmux send-key -t ci "pwd"
|
||||
sleep 1
|
||||
tmux send-key -t ci "Enter"
|
||||
|
||||
echoerr "Checking paths..."
|
||||
log::note "Checking paths..."
|
||||
sleep 2
|
||||
local -r downloaded_path="$(cat "$log_file" | grep 'They are now located at' | sed 's/They are now located at //')"
|
||||
ls "$downloaded_path" | grep -q '^pkg_mgr__brew.cheat$'
|
||||
|
|
Loading…
Reference in a new issue