Skip to content

Commit

Permalink
op tool helper (commaai#33053)
Browse files Browse the repository at this point in the history
* op

* change this

* juggler

* options

* fix

* submodules

* typo

* venv

* clean + install
old-commit-hash: f60dfd4
  • Loading branch information
maxime-desroches authored Jul 24, 2024
1 parent e34c6db commit 870a213
Showing 1 changed file with 262 additions and 0 deletions.
262 changes: 262 additions & 0 deletions tools/op.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 870a213

Please sign in to comment.