op tool helper (#33053)
	
		
	
				
					
				
			* op * change this * juggler * options * fix * submodules * typo * venv * clean + installx-params-test2
							parent
							
								
									1e9738131d
								
							
						
					
					
						commit
						f60dfd4dbb
					
				
				 1 changed files with 262 additions and 0 deletions
			
			
		| @ -0,0 +1,262 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| function op_first_install() { | ||||
|   (set -e | ||||
| 
 | ||||
|   echo "Installing op system-wide..." | ||||
|   RC_FILE="${HOME}/.$(basename ${SHELL})rc" | ||||
|   if [ "$(uname)" == "Darwin" ] && [ $SHELL == "/bin/bash" ]; then | ||||
|     RC_FILE="$HOME/.bash_profile" | ||||
|   fi | ||||
|   printf "\nalias op='source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )/op.sh" \"\$@\"'\n" >> $RC_FILE | ||||
|   echo -e " ↳ [${GREEN}✔${NC}] op installed successfully. Open a new shell to use it.\n" | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| # be default, assume openpilot dir is in current directory | ||||
| OPENPILOT_ROOT=$(pwd) | ||||
| function op_check_openpilot_dir() { | ||||
|   (set -e | ||||
| 
 | ||||
|   if [ ! -f "$OPENPILOT_ROOT/launch_openpilot.sh" ]; then | ||||
|     echo "openpilot directory not found!" | ||||
|     return 1 | ||||
|   fi | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function op_check_git() { | ||||
|   (set -e | ||||
| 
 | ||||
|   cd $OPENPILOT_ROOT | ||||
| 
 | ||||
|   echo "Checking for git..." | ||||
|   if ! command -v "git" > /dev/null 2>&1; then | ||||
|     echo -e " ↳ [${RED}✗${NC}] git not found on your system!" | ||||
|     return 1 | ||||
|   else | ||||
|     echo -e " ↳ [${GREEN}✔${NC}] git found on your system.\n" | ||||
|   fi | ||||
| 
 | ||||
|   echo "Checking for git lfs files..." | ||||
|   if [[ $(file -b $(git lfs ls-files -n | grep "\.so" | head -n 1)) == "ASCII text" ]]; then | ||||
|     echo -e " ↳ [${RED}✗${NC}] git lfs files not found! Run git lfs pull" | ||||
|     return 1 | ||||
|   else | ||||
|     echo -e " ↳ [${GREEN}✔${NC}] git lfs files found on your system.\n" | ||||
|   fi | ||||
| 
 | ||||
|   echo "Checking for git submodules..." | ||||
|   if $(git submodule foreach --quiet --recursive 'return 1' 2&> /dev/null); then | ||||
|     echo -e " ↳ [${RED}✗${NC}] git submodules not found! Run 'git submodule update --init --recursive'" | ||||
|     return 1 | ||||
|   else | ||||
|     echo -e " ↳ [${GREEN}✔${NC}] git submodules found on your system.\n" | ||||
|   fi | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function op_check_os() { | ||||
|   (set -e | ||||
| 
 | ||||
|   echo "Checking for compatible os version..." | ||||
|   if [[ "$OSTYPE" == "linux-gnu"* ]]; then | ||||
| 
 | ||||
|     if [ -f "/etc/os-release" ]; then | ||||
|       source /etc/os-release | ||||
|       case "$VERSION_CODENAME" in | ||||
|         "jammy" | "kinetic" | "noble" | "focal") | ||||
|           OS_VERSION="Ubuntu" | ||||
|           echo -e " ↳ [${GREEN}✔${NC}] Ubuntu $VERSION_CODENAME detected.\n" | ||||
|           ;; | ||||
|         * ) | ||||
|           echo -e " ↳ [${RED}✗${NC}] Incompatible Ubuntu version $VERSION_CODENAME detected!" | ||||
|           return 1 | ||||
|           ;; | ||||
|       esac | ||||
|     else | ||||
|       echo -e " ↳ [${RED}✗${NC}] No /etc/os-release on your system. Make sure you're running on Ubuntu, or similar!" | ||||
|       return 1 | ||||
|     fi | ||||
| 
 | ||||
|   elif [[ "$OSTYPE" == "darwin"* ]]; then | ||||
|     echo -e " ↳ [${GREEN}✔${NC}] macos detected.\n" | ||||
|     OS_VERSION="Darwin" | ||||
|   else | ||||
|     echo -e " ↳ [${RED}✗${NC}] OS type $OSTYPE not supported!" | ||||
|     return 1 | ||||
|   fi | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function op_check_python() { | ||||
|   (set -e | ||||
| 
 | ||||
|   echo "Checking for compatible python version..." | ||||
|   export REQUIRED_PYTHON_VERSION=$(grep "requires-python" pyproject.toml | cut -d= -f3- | tr -d '"' | tr -d ' ') | ||||
|   if ! command -v "python3" > /dev/null 2>&1; then | ||||
|     echo -e " ↳ [${RED}✗${NC}] python3 not found on your system. You need python version at least $REQUIRED_PYTHON_VERSION to continue!" | ||||
|     return 1 | ||||
|   else | ||||
|     if $(python3 -c "import sys; quit(not sys.version_info >= tuple(map(int, \"$REQUIRED_PYTHON_VERSION\".split('.'))))"); then | ||||
|       echo -e " ↳ [${GREEN}✔${NC}] $(python3 --version) detected.\n" | ||||
|     else | ||||
|       echo -e " ↳ [${RED}✗${NC}] You need python version at least $REQUIRED_PYTHON_VERSION to continue!" | ||||
|       return 1 | ||||
|     fi | ||||
|   fi | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| # this must be run in the same shell as the user calling "op" | ||||
| function op_venv() { | ||||
|   op_check_openpilot_dir || return 1 | ||||
|   source $OPENPILOT_ROOT/.venv/bin/activate || (echo -e "\nCan't activate venv. Have you ran 'op install' ?" && return 1) | ||||
| } | ||||
| 
 | ||||
| function op_check() { | ||||
|   (set -e | ||||
| 
 | ||||
|   op_check_openpilot_dir | ||||
|   cd $OPENPILOT_ROOT | ||||
|   op_check_git | ||||
|   op_check_os | ||||
|   op_check_python | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function op_run() { | ||||
|   (set -e | ||||
| 
 | ||||
|   op_venv | ||||
|   cd $OPENPILOT_ROOT | ||||
|   $OPENPILOT_ROOT/launch_openpilot.sh | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function op_install() { | ||||
|   (set -e | ||||
| 
 | ||||
|   op_check_openpilot_dir | ||||
|   cd $OPENPILOT_ROOT | ||||
| 
 | ||||
|   op_check_os | ||||
|   op_check_python | ||||
| 
 | ||||
|   case "$OS_VERSION" in | ||||
|     "Ubuntu") | ||||
|       $OPENPILOT_ROOT/tools/ubuntu_setup.sh | ||||
|       ;; | ||||
|     "Darwin") | ||||
|       $OPENPILOT_ROOT/tools/mac_setup.sh | ||||
|       ;; | ||||
|   esac | ||||
| 
 | ||||
|   git submodules update --init --recursive | ||||
|   git lfs pull | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function op_build() { | ||||
|   (set -e | ||||
| 
 | ||||
|   op_venv | ||||
|   cd $OPENPILOT_ROOT | ||||
| 
 | ||||
|   scons $@ || echo -e "\nBuild failed. Have you ran 'op install' ?" | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function op_juggle() { | ||||
|   (set -e | ||||
| 
 | ||||
|   op_venv | ||||
|   cd $OPENPILOT_ROOT | ||||
| 
 | ||||
|   $OPENPILOT_ROOT/tools/plotjuggler/juggle.py $@ | ||||
| 
 | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function op_default() { | ||||
|   echo "An openpilot helper" | ||||
|   echo "" | ||||
|   echo -e "\e[4mUsage:\e[0m op [OPTIONS] <COMMAND>" | ||||
|   echo "" | ||||
|   echo -e "\e[4mCommands:\e[0m" | ||||
|   echo "  venv       Activate the virtual environment" | ||||
|   echo "  check      Check system requirements (git, os, python) to start using openpilot" | ||||
|   echo "  install    Install requirements to use openpilot" | ||||
|   echo "  build      Build openpilot" | ||||
|   echo "  run        Run openpilot" | ||||
|   echo "  juggle     Run Plotjuggler" | ||||
|   echo "  help       Show this message" | ||||
|   echo "  --install  Install this tool system wide" | ||||
|   echo "" | ||||
|   echo -e "\e[4mOptions:\e[0m" | ||||
|   echo "  -d, --dir" | ||||
|   echo "          Specify the openpilot directory you want to use" | ||||
|   echo "          Default to the current working directory" | ||||
|   echo "" | ||||
|   echo -e "\e[4mExamples:\e[0m" | ||||
|   echo "  op --dir /tmp/openpilot check" | ||||
|   echo "          Run the check command on openpilot located in /tmp/openpilot" | ||||
|   echo "" | ||||
|   echo "  op juggle --install" | ||||
|   echo "          Install plotjuggler in the openpilot located in your current" | ||||
|   echo "          working directory" | ||||
|   echo "" | ||||
|   echo "  op --dir /tmp/openpilot build -j4" | ||||
|   echo "          Run the build command on openpilot located in /tmp/openpilot" | ||||
|   echo "          on 4 cores" | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function _op() { | ||||
|   # parse Options | ||||
|   case $1 in | ||||
|     -d | --dir ) shift 1; OPENPILOT_ROOT="$1"; shift 1 ;; | ||||
|   esac | ||||
| 
 | ||||
|   # parse Commands | ||||
|   case $1 in | ||||
|     venv )      shift 1; op_venv "$@" ;; | ||||
|     check )     shift 1; op_check "$@" ;; | ||||
|     install )   shift 1; op_install "$@" ;; | ||||
|     build )     shift 1; op_build "$@" ;; | ||||
|     run )       shift 1; op_run "$@" ;; | ||||
|     juggle )    shift 1; op_juggle "$@" ;; | ||||
|     --install ) shift 1; op_first_install "$@" ;; | ||||
|     * ) op_default "$@" ;; | ||||
|   esac | ||||
| } | ||||
| 
 | ||||
| _op $@ | ||||
| 
 | ||||
| # remove from env | ||||
| unset -f _op | ||||
| unset -f op_check | ||||
| unset -f op_install | ||||
| unset -f op_build | ||||
| unset -f op_run | ||||
| unset -f op_juggle | ||||
| unset -f op_venv | ||||
| unset -f op_check_openpilot_dir | ||||
| unset -f op_check_git | ||||
| unset -f op_check_python | ||||
| unset -f op_check_os | ||||
| unset -f op_first_install | ||||
| unset -f op_default | ||||
					Loading…
					
					
				
		Reference in new issue