#!/bin/bash # # Dune Weaver CLI # # Usage: dw # # Commands: # install Run initial setup (Docker + WiFi fix) # start Start Dune Weaver # stop Stop Dune Weaver # restart Restart Dune Weaver # update Pull latest changes and restart # logs View live logs (Ctrl+C to exit) # status Show container status # shell Open a shell in the container # help Show this help message # set -e # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Find dune-weaver directory find_install_dir() { # Check common locations if [[ -f "$HOME/dune-weaver/main.py" ]]; then echo "$HOME/dune-weaver" elif [[ -f "/home/pi/dune-weaver/main.py" ]]; then echo "/home/pi/dune-weaver" elif [[ -f "./main.py" ]]; then pwd else echo "" fi } # Check if using Docker or systemd is_docker_mode() { [[ -f "$INSTALL_DIR/docker-compose.yml" ]] && command -v docker &> /dev/null && docker compose ps &> /dev/null } INSTALL_DIR=$(find_install_dir) # Check if installed check_installed() { if [[ -z "$INSTALL_DIR" ]]; then echo -e "${RED}Error: Dune Weaver not found${NC}" echo "" echo "Please install first:" echo " git clone https://github.com/tuanchris/dune-weaver --single-branch" echo " cd dune-weaver" echo " dw install" exit 1 fi } # Commands cmd_install() { if [[ -z "$INSTALL_DIR" ]]; then # Not installed, check if we're in the right directory if [[ -f "./docker-compose.yml" ]] && [[ -f "./main.py" ]]; then INSTALL_DIR=$(pwd) else echo -e "${RED}Error: Run this from the dune-weaver directory${NC}" echo "" echo " git clone https://github.com/tuanchris/dune-weaver --single-branch" echo " cd dune-weaver" echo " dw install" exit 1 fi fi cd "$INSTALL_DIR" bash setup-pi.sh "$@" } cmd_start() { check_installed echo -e "${BLUE}Starting Dune Weaver...${NC}" cd "$INSTALL_DIR" if is_docker_mode; then docker compose up -d else sudo systemctl start dune-weaver fi echo -e "${GREEN}Started!${NC} Access at http://$(hostname -I | awk '{print $1}'):8080" } cmd_stop() { check_installed echo -e "${BLUE}Stopping Dune Weaver...${NC}" cd "$INSTALL_DIR" if is_docker_mode; then docker compose down else sudo systemctl stop dune-weaver fi echo -e "${GREEN}Stopped${NC}" } cmd_restart() { check_installed echo -e "${BLUE}Restarting Dune Weaver...${NC}" cd "$INSTALL_DIR" if is_docker_mode; then docker compose restart else sudo systemctl restart dune-weaver fi echo -e "${GREEN}Restarted${NC}" } cmd_update() { check_installed echo -e "${BLUE}Updating Dune Weaver...${NC}" cd "$INSTALL_DIR" echo "Pulling latest code..." git pull if is_docker_mode; then echo "Pulling latest Docker image..." docker compose pull echo "Restarting with new version..." docker compose up -d else echo "Updating Python dependencies..." source .venv/bin/activate pip install -r requirements.txt echo "Restarting service..." sudo systemctl restart dune-weaver fi echo -e "${GREEN}Updated!${NC}" } cmd_logs() { check_installed cd "$INSTALL_DIR" if is_docker_mode; then docker compose logs -f else sudo journalctl -u dune-weaver -f fi } cmd_status() { check_installed cd "$INSTALL_DIR" if is_docker_mode; then docker compose ps else sudo systemctl status dune-weaver fi } cmd_shell() { check_installed cd "$INSTALL_DIR" if is_docker_mode; then docker compose exec dune-weaver /bin/bash else echo -e "${YELLOW}Shell not available in systemd mode${NC}" echo "Use: cd $INSTALL_DIR && source .venv/bin/activate" fi } cmd_help() { echo -e "${GREEN}Dune Weaver CLI${NC}" echo "" echo "Usage: dw " echo "" echo "Commands:" echo " install Run initial setup (Docker + WiFi fix)" echo " start Start Dune Weaver" echo " stop Stop Dune Weaver" echo " restart Restart Dune Weaver" echo " update Pull latest changes and restart" echo " logs View live logs (Ctrl+C to exit)" echo " status Show container status" echo " shell Open a shell in the container" echo " help Show this help message" echo "" if [[ -n "$INSTALL_DIR" ]]; then echo -e "Install directory: ${BLUE}$INSTALL_DIR${NC}" fi } # Main case "${1:-help}" in install) shift cmd_install "$@" ;; start) cmd_start ;; stop) cmd_stop ;; restart) cmd_restart ;; update) cmd_update ;; logs) cmd_logs ;; status) cmd_status ;; shell) cmd_shell ;; help|--help|-h) cmd_help ;; *) echo -e "${RED}Unknown command: $1${NC}" echo "" cmd_help exit 1 ;; esac