Files
skyweave/skyweave_deploy.sh
T

110 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
# skyweave_deploy.sh - Deploy Skyweave API framework
# --- Repository and Local Paths ---
LOCAL_REPO_ROOT="."
LOCAL_CGI_SCRIPT_RELPATH="cgi_scripts/skyweave.lua"
LOCAL_SKYWEAVE_MODULE_DIR_RELPATH="skyweave"
LOCAL_JSON_LIB_RELPATH="lib/json.lua"
# --- Remote Target Paths ---
REMOTE_BASE_DIR="/usr/lib/lua"
REMOTE_CGI_SCRIPT="/www/cgi-bin/skyweave.lua"
REMOTE_SKYWEAVE_MODULE_DIR="${REMOTE_BASE_DIR}/skyweave"
REMOTE_JSON_LIB="${REMOTE_BASE_DIR}/json.lua"
REMOTE_CGI_DIR="/www/cgi-bin"
# --- User-configurable settings ---
SSH_ALIAS="roof-unit"
ROOF_IP="192.168.10.254"
REMOTE_HTTP_PORT="${1:-42069}" # Use first script arg for port, or default
SCP_FLAG_O="-O -o LogLevel=ERROR" # For legacy SCP mode if needed by server
# Colors
GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[0;33m'; NC='\033[0m'
echo -e "${YELLOW}Starting Skyweave framework deployment to ${SSH_ALIAS}...${NC}"
echo -e "${YELLOW}(Ensure '${SSH_ALIAS}' is correctly configured in your ~/.ssh/config)${NC}"
echo ""
# === 1. Check Local Source Files and Directories ===
echo -e "${YELLOW}Checking local source files and directories...${NC}"
if [ ! -f "${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH}" ]; then
echo -e "${RED}Error: Local CGI script ${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH} not found!${NC}"
exit 1
fi
if [ ! -d "${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH}" ]; then
echo -e "${RED}Error: Local Skyweave module directory ${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH} not found!${NC}"
exit 1
fi
if [ ! -f "${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH}" ]; then
echo -e "${RED}Error: Local json.lua library ${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH} not found!${NC}"
exit 1
fi
echo -e "${GREEN}Local files and directories found.${NC}"
echo ""
# === 2. Create Remote Directories ===
echo -e "${YELLOW}Creating remote directories...${NC}"
ssh -q ${SSH_ALIAS} "mkdir -p ${REMOTE_SKYWEAVE_MODULE_DIR}/handlers ${REMOTE_CGI_DIR}"
if [ $? -ne 0 ]; then
echo -e "${RED}Error: Failed to create remote directories on ${SSH_ALIAS}!${NC}"
exit 1
fi
echo -e "${GREEN}Remote directories ensured.${NC}"
echo ""
# === 3. Deploy Files ===
echo -e "${YELLOW}Deploying json.lua library...${NC}"
scp ${SCP_FLAG_O} "${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH}" "${SSH_ALIAS}:${REMOTE_JSON_LIB}"
if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy json.lua to ${SSH_ALIAS}!${NC}"; exit 1; fi
echo -e "${GREEN}json.lua deployed.${NC}"
echo ""
echo -e "${YELLOW}Deploying Skyweave module directory (${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH})...${NC}"
scp ${SCP_FLAG_O} -r "${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH}/." "${SSH_ALIAS}:${REMOTE_SKYWEAVE_MODULE_DIR}/"
if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy Skyweave module directory to ${SSH_ALIAS}!${NC}"; exit 1; fi
echo -e "${GREEN}Skyweave module directory deployed.${NC}"
echo ""
echo -e "${YELLOW}Deploying main CGI script (${LOCAL_CGI_SCRIPT_RELPATH})...${NC}"
scp ${SCP_FLAG_O} "${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH}" "${SSH_ALIAS}:${REMOTE_CGI_SCRIPT}"
if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy CGI script to ${SSH_ALIAS}!${NC}"; exit 1; fi
echo -e "${GREEN}Main CGI script deployed.${NC}"
echo ""
# === 4. Set Permissions on Remote Files ===
echo -e "${YELLOW}Setting permissions on remote files...${NC}"
CGI_CHMOD_FAILED=0
ssh -q ${SSH_ALIAS} "chmod +x ${REMOTE_CGI_SCRIPT}" || CGI_CHMOD_FAILED=1
ssh -q ${SSH_ALIAS} "chmod 644 ${REMOTE_JSON_LIB}" || echo -e "${YELLOW}Warning: chmod failed for ${REMOTE_JSON_LIB}.${NC}"
ssh -q ${SSH_ALIAS} "find ${REMOTE_SKYWEAVE_MODULE_DIR} -type d -exec chmod 755 {} \;" || echo -e "${YELLOW}Warning: chmod failed for module dirs in ${REMOTE_SKYWEAVE_MODULE_DIR}.${NC}"
ssh -q ${SSH_ALIAS} "find ${REMOTE_SKYWEAVE_MODULE_DIR} -type f -exec chmod 644 {} \;" || echo -e "${YELLOW}Warning: chmod failed for module files in ${REMOTE_SKYWEAVE_MODULE_DIR}.${NC}"
if [ "$CGI_CHMOD_FAILED" = "1" ]; then
echo -e "${RED}Critical permission setting for CGI script failed. Deployment may not be functional.${NC}"
exit 1
fi
echo -e "${GREEN}Remote permissions set.${NC}"
echo ""
# === 5. Test Deployed API ===
echo -e "${GREEN}All deployment and permission operations complete for ${SSH_ALIAS}!${NC}"
echo "" # Add a newline for spacing before API test
echo -e "${YELLOW}Testing API via http://${ROOF_IP}:${REMOTE_HTTP_PORT}...${NC}"
API_TEST_URL="http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua?get_config=network_config"
RESPONSE=$(curl -s -X GET "${API_TEST_URL}")
if [ $? -eq 0 ] && [[ "${RESPONSE}" == *'"errCode":0'* ]]; then
echo -e "${GREEN}API test successful!${NC}"
echo -e "Response: ${RESPONSE}"
else
echo -e "${RED}API test failed!${NC}"
echo -e "Curl exit status for ${API_TEST_URL}: $?"
echo -e "Response: ${RESPONSE}"
fi
echo -e "\n${YELLOW}API endpoint: http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua${NC}"
echo -e "${YELLOW}Example usage: curl -X POST -H \"Content-Type: application/json\" -d '{\"ssid\":\"MyNetwork\",\"key\":\"MyPassword\",\"encryption\":\"psk2\"}' http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua?set_config=connect_wifi${NC}"
echo ""
echo -e "${GREEN}Deployment script finished.${NC}"