op tool helper (#33053)
* op
* change this
* juggler
* options
* fix
* submodules
* typo
* venv
* clean + install
old-commit-hash: f60dfd4dbb
pull/33302/head
parent
e34c6db18c
commit
870a213e6b
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