Files
Nixie_Tube_Clock/kibot_launch.sh
aidanbrzezinski 1d094e6a04
Some checks failed
CI / release (push) Has been cancelled
CI / generate_outputs (push) Has been cancelled
Inital commit
2026-02-17 08:39:27 -05:00

188 lines
7.1 KiB
Bash
Executable File

#!/bin/bash
# ANSI color codes
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Default options
variant="CHECKED"
output_dir="."
kibot_base="kibot"
kibot_config="-c 'kibot_yaml/kibot_main.yaml'"
revision=""
costs_flag=false
server_flag=false
server_port=8000
pid_file="/tmp/kibot_server.pid"
# Display help
function display_help() {
echo -e "USAGE"
echo -e " ./kibot_launch.sh [OPTIONS]"
echo
echo -e "OPTIONS"
echo -e " -v, --variant VARIANT Specify a variant name. Supported variants:"
echo -e " RELEASED, DRAFT, PRELIMINARY, CHECKED, or others."
echo -e " --version VERSION Specify a version to use in the command."
echo -e " --costs Replace draft_group or all_group with xlsx_bom, and enforce specific skip-pre options."
echo -e " --server [PORT] Start an HTTP server on the specified port (default: 8000)."
echo -e " --stop-server Stop the running HTTP server."
echo -e " -h, --help Display this help message."
echo
echo -e "EXAMPLES"
echo -e " ./kibot_launch.sh Run with default options."
echo -e " ./kibot_launch.sh -v RELEASED Run with RELEASED variant."
echo -e " ./kibot_launch.sh --costs Compute XLSX costs spreadsheet. Results in Manufacturing/Assembly folder"
echo -e " ./kibot_launch.sh -v DRAFT Run with DRAFT variant."
echo -e " ./kibot_launch.sh -v PRELIMINARY Run with PRELIMINARY variant."
echo -e " ./kibot_launch.sh -v CUSTOM_VARIANT Run with a custom variant, saved in the Variants folder."
echo -e " ./kibot_launch.sh --server Start an HTTP server on port 8000."
echo -e " ./kibot_launch.sh --server 8080 Start an HTTP server on port 8080."
echo -e " ./kibot_launch.sh --stop-server Stop the running HTTP server."
echo
echo -e "VARIANT DESCRIPTIONS"
echo -e " DRAFT: only schematic in progress, will only generate schematic PDF, netlist and BoM"
echo -e " PRELIMINARY: will generate both schematic and PCB documents, but no ERC/DRC"
echo -e " CHECKED: will generate both schematic and PCB documents, with ERC/DRC"
echo -e " RELEASED: similar to CHECKED but should only be used for releases"
echo -e " Other variants: will be saved in the Variants folder"
exit 0
}
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--variant|-v)
if [[ -n $2 && $2 != -* ]]; then
variant="$2"
shift
else
echo -e "${YELLOW}Warning: --variant|-v requires a value.${NC}"
exit 1
fi
;;
--version)
if [[ -n $2 && $2 != -* ]]; then
revision="$2"
shift
else
echo -e "${YELLOW}Warning: --version requires a value.${NC}"
exit 1
fi
;;
--costs)
costs_flag=true
;;
--server)
server_flag=true
if [[ -n $2 && $2 != -* ]]; then
server_port="$2"
shift
fi
if [[ -f $pid_file ]]; then
pid=$(cat $pid_file)
if kill -0 $pid 2>/dev/null; then
echo -e "${YELLOW}A server is already running on PID $pid. Please stop it first with --stop-server.${NC}"
exit 1
else
echo -e "${YELLOW}Stale PID file detected. Removing it.${NC}"
rm -f $pid_file
fi
fi
;;
--stop-server)
if [[ -f $pid_file ]]; then
pid=$(cat $pid_file)
if kill -0 $pid 2>/dev/null; then
echo -e "${GREEN}Stopping HTTP server with PID $pid...${NC}"
kill $pid
rm -f $pid_file
echo -e "${GREEN}Server stopped.${NC}"
exit 0
else
echo -e "${YELLOW}No running server found. Removing stale PID file.${NC}"
rm -f $pid_file
exit 1
fi
else
echo -e "${YELLOW}No server is running.${NC}"
exit 1
fi
;;
-h|--help)
display_help
;;
*)
echo -e "${YELLOW}Warning: Unrecognized argument: $1${NC}"
display_help
;;
esac
shift
done
# Get version if not specified
if [[ -z "$revision" ]]; then
revision=$(python3 kibot_resources/scripts/get_changelog_version.py -f CHANGELOG.md)
if [[ $? -ne 0 ]]; then
echo -e "${YELLOW}Warning: Unable to determine version from CHANGELOG.md. Defaulting to empty revision.${NC}"
revision=""
fi
fi
# Check KiCad version and set group command accordingly
kicad_version=$(kicad-cli --version)
if [[ "$kicad_version" =~ ^9\.[0-9]+\.[0-9]+$ ]]; then
all_group="all_group_k9"
else
all_group="all_group"
fi
# Handle server flag
if [[ "$server_flag" == true ]]; then
echo -e "${GREEN}Starting HTTP server on port $server_port...${NC}"
python3 -m http.server "$server_port" &
echo $! > $pid_file
sleep 1
echo -e "${GREEN}Server running. Navigate to: http://localhost:$server_port${NC}"
exit 0
fi
# Determine output directory based on variant
case "$variant" in
DRAFT|PRELIMINARY|CHECKED|RELEASED)
output_dir="."
;;
*)
output_dir="Variants"
;;
esac
# Determine command based on variant
if [[ "$costs_flag" == true ]]; then
kibot_command1="$kibot_base --skip-pre erc,drc,draw_fancy_stackup $kibot_config -d '$output_dir' -g variant=$variant -E REVISION='$revision' -E KICOST_CONFIG='kibot_yaml/kicost_config_local.yaml' xlsx_bom"
else
case "$variant" in
DRAFT)
kibot_command1="$kibot_base --skip-pre set_text_variables,draw_fancy_stackup,erc,drc $kibot_config -d '$output_dir' -g variant=$variant -E REVISION='$revision' md_readme"
kibot_command2="$kibot_base --skip-pre draw_fancy_stackup,erc,drc $kibot_config -d '$output_dir' -g variant=$variant -E REVISION='$revision' draft_group"
;;
PRELIMINARY)
kibot_command1="$kibot_base --skip-pre erc,drc $kibot_config -d '$output_dir' -g variant=$variant -E REVISION='$revision' notes"
kibot_command2="$kibot_base --skip-pre erc,drc $kibot_config -d '$output_dir' -g variant=$variant -E REVISION='$revision' $all_group"
;;
CHECKED|RELEASED|*)
kibot_command1="$kibot_base --skip-pre set_text_variables,draw_fancy_stackup,erc,drc $kibot_config -d '$output_dir' -g variant=$variant -E REVISION='$revision' notes"
kibot_command2="$kibot_base $kibot_config -d '$output_dir' -g variant=$variant -E REVISION='$revision' $all_group"
;;
esac
fi
# Execute the commands
echo -e "${GREEN}Running: $kibot_command1${NC}"
eval $kibot_command1
if [[ "$costs_flag" == false ]]; then
echo -e "${GREEN}Running: $kibot_command2${NC}"
eval $kibot_command2
fi