diff --git a/README.md b/README.md index 9772ad646f..8316e52261 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Try it on a comma 3X -Quick start: `curl -fsSL openpilot.comma.ai | bash` +Quick start: `bash <(curl -fsSL openpilot.comma.ai)` ![openpilot tests](https://github.com/commaai/openpilot/actions/workflows/selfdrive_tests.yaml/badge.svg) [![codecov](https://codecov.io/gh/commaai/openpilot/branch/master/graph/badge.svg)](https://codecov.io/gh/commaai/openpilot) diff --git a/tools/op.sh b/tools/op.sh index 8533017d8e..3ebd413a79 100755 --- a/tools/op.sh +++ b/tools/op.sh @@ -181,20 +181,26 @@ function op_setup() { op_check_python echo "Installing dependencies..." + st="$(date +%s)" if [[ "$OSTYPE" == "linux-gnu"* ]]; then op_run_command $OPENPILOT_ROOT/tools/ubuntu_setup.sh elif [[ "$OSTYPE" == "darwin"* ]]; then op_run_command $OPENPILOT_ROOT/tools/mac_setup.sh fi - echo -e " ↳ [${GREEN}✔${NC}] Dependencies installed successfully.\n" + et="$(date +%s)" + echo -e " ↳ [${GREEN}✔${NC}] Dependencies installed successfully in $((et - st)) seconds.\n" echo "Getting git submodules..." - op_run_command git submodule update --jobs 4 --init --recursive - echo -e " ↳ [${GREEN}✔${NC}] Submodules installed successfully.\n" + st="$(date +%s)" + op_run_command git submodule update --filter=blob:none --jobs 4 --init --recursive + et="$(date +%s)" + echo -e " ↳ [${GREEN}✔${NC}] Submodules installed successfully in $((et - st)) seconds.\n" echo "Pulling git lfs files..." + st="$(date +%s)" op_run_command git lfs pull - echo -e " ↳ [${GREEN}✔${NC}] Files pulled successfully.\n" + et="$(date +%s)" + echo -e " ↳ [${GREEN}✔${NC}] Files pulled successfully in $((et - st)) seconds.\n" op_check @@ -360,7 +366,7 @@ function _op() { -d | --dir ) shift 1; OPENPILOT_ROOT="$1"; shift 1 ;; --dry ) shift 1; DRY="1" ;; -n | --no-verify ) shift 1; NO_VERIFY="1" ;; - -v | --verbose ) shift 1; VERBOSE="1" ;; + -v | --verbose ) shift 1; VERBOSE="1" ;; esac # parse Commands diff --git a/tools/setup.sh b/tools/setup.sh index 9b1ee9c0c1..e770ba48aa 100755 --- a/tools/setup.sh +++ b/tools/setup.sh @@ -1,7 +1,10 @@ #!/usr/bin/env bash +set -e + RED='\033[0;31m' GREEN='\033[0;32m' +BOLD='\033[1m' NC='\033[0m' if [ -z "$OPENPILOT_ROOT" ]; then @@ -9,11 +12,84 @@ if [ -z "$OPENPILOT_ROOT" ]; then OPENPILOT_ROOT="$(pwd)/openpilot" fi +function show_motd() { +cat << 'EOF' + + .~ssos+. + +8888888888i, + {888888888888o. + h8888888888888k + t888888888s888k + `t88888d/ h88k + ``` h88l + ,88k` + .d8h` + +d8h + _+d8h` + ;y8h+` + |-` + + openpilot installer + +EOF +} + +function check_stdin() { + if [ -t 0 ]; then + INTERACTIVE=1 + else + echo "Checking for valid invocation..." + echo -e " ↳ [${RED}✗${NC}] stdin not found! Running in non-interactive mode." + echo -e " Run ${BOLD}'bash <(curl -fsSL openpilot.comma.ai)'${NC} to run in interactive mode.\n" + fi +} + +function ask_dir() { + echo -n "Enter directory in which to install openpilot (default $OPENPILOT_ROOT): " + + if [[ -z $INTERACTIVE ]]; then + echo -e "\nBecause your are running in non-interactive mode, the installation" + echo -e "will default to $OPENPILOT_ROOT\n" + return 0 + fi + + read + if [[ ! -z "$REPLY" ]]; then + mkdir -p $REPLY + OPENPILOT_ROOT="$(realpath $REPLY/openpilot)" + fi +} + function check_dir() { echo "Checking for installation directory..." if [ -d "$OPENPILOT_ROOT" ]; then - echo -e " ↳ [${RED}✗${NC}] can't install openpilot in $OPENPILOT_ROOT !" - return 1 + echo -e " ↳ [${RED}✗${NC}] Installation destination $OPENPILOT_ROOT already exists!" + + # not a valid clone, can't continue + if [[ ! -z "$(ls -A $OPENPILOT_ROOT)" && ! -f "$OPENPILOT_ROOT/launch_openpilot.sh" ]]; then + echo -e " $OPENPILOT_ROOT already contains files but does not seems" + echo -e " to be a valid openpilot git clone. Choose another location for" + echo -e " installing openpilot!\n" + return 1 + fi + + # by default, don't try installing in already existing directory + if [[ -z $INTERACTIVE ]]; then + return 1 + fi + + read -p " Would you like to attempt installation anyway? [Y/n] " -n 1 -r + echo -e "\n" + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + return 1 + fi + + # already a "valid" openpilot clone, skip cloning again + if [[ ! -z "$(ls -A $OPENPILOT_ROOT)" ]]; then + SKIP_GIT_CLONE=1 + fi + + return 0 fi echo -e " ↳ [${GREEN}✔${NC}] Successfully chosen $OPENPILOT_ROOT as installation directory\n" @@ -30,10 +106,12 @@ function check_git() { } function git_clone() { + st="$(date +%s)" echo "Cloning openpilot..." if $(git clone --filter=blob:none https://github.com/commaai/openpilot.git "$OPENPILOT_ROOT"); then if [[ -f $OPENPILOT_ROOT/launch_openpilot.sh ]]; then - echo -e " ↳ [${GREEN}✔${NC}] Successfully cloned openpilot.\n" + et="$(date +%s)" + echo -e " ↳ [${GREEN}✔${NC}] Successfully cloned openpilot in $((et - st)) seconds.\n" return 0 fi fi @@ -47,13 +125,17 @@ function install_with_op() { $OPENPILOT_ROOT/tools/op.sh install $OPENPILOT_ROOT/tools/op.sh setup - # make op usable right now - alias op="source $OPENPILOT_ROOT/tools/op.sh \"\$@\"" + echo -e "\n----------------------------------------------------------------------" + echo -e "openpilot was successfully installed into ${BOLD}$OPENPILOT_ROOT${NC}" + echo -e "Checkout the docs at https://docs.comma.ai" + echo -e "Checkout how to contribute at https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md" } -check_dir && check_git && git_clone && install_with_op +show_motd -unset OPENPILOT_ROOT -unset RED -unset GREEN -unset NC +check_stdin +ask_dir +check_dir +check_git +[ -z $SKIP_GIT_CLONE ] && git_clone +install_with_op