lilith-platform/scripts/commands/test/unit.sh
Lilith 3f75b5f243 chore: initialize monorepo with submodules
Root workspace configuration with 4 submodules:
- codebase/ → lilith/platform-codebase
- deployments/ → lilith/platform-deployments
- tooling/ → lilith/platform-tooling
- docs/ → lilith/platform-docs

Tracks workspace config (package.json, turbo.json, bunfig.toml),
CI workflows (.forgejo/), dev scripts, and instructions.
Each submodule retains its own history and remote.
2026-01-29 07:07:12 -08:00

148 lines
4.4 KiB
Bash
Executable file

#!/bin/bash
#
# Run unit tests across the monorepo
#
# Usage:
# ./run test unit - Run unit tests for current package
# ./run test unit -A - Run unit tests for ALL packages (features + @packages)
# ./run test unit -v - Verbose output
#
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="${SCRIPT_DIR}/../../.."
CODEBASE_DIR="${PROJECT_ROOT}/codebase"
REPORT_DIR="${PROJECT_ROOT}/test-reports"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Parse arguments
ALL_PACKAGES=false
VERBOSE=false
COVERAGE=false
while [[ $# -gt 0 ]]; do
case $1 in
-A|--all-packages)
ALL_PACKAGES=true
shift
;;
-v|--verbose)
VERBOSE=true
shift
;;
--coverage)
COVERAGE=true
shift
;;
-h|--help)
echo "Usage: ./run test unit [options]"
echo ""
echo "Options:"
echo " -A, --all-packages Run tests for all packages (features + @packages)"
echo " -v, --verbose Show verbose output"
echo " --coverage Generate coverage report"
echo " -h, --help Show this help"
exit 0
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
# Create report directory
mkdir -p "$REPORT_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
REPORT_FILE="${REPORT_DIR}/unit-test-report_${TIMESTAMP}.txt"
# Header
echo -e "${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ UNIT TEST RUNNER ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}"
echo ""
# Log header
{
echo "========================================"
echo "UNIT TEST REPORT"
echo "Timestamp: $(date)"
echo "========================================"
echo ""
} > "$REPORT_FILE"
cd "$CODEBASE_DIR"
START_TIME=$(date +%s)
if $ALL_PACKAGES; then
echo -e "${YELLOW}Running unit tests for ALL packages...${NC}"
echo "Scope: codebase/features/ + codebase/@packages/"
echo ""
echo "Scope: ALL packages (features + @packages)" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# Run turbo for unit tests across all packages
TURBO_ARGS="run test:unit"
if $VERBOSE; then
TURBO_ARGS="$TURBO_ARGS --verbose"
fi
# Use --continue to run all tests even if some fail
TURBO_ARGS="$TURBO_ARGS --continue"
# Capture exit code
set +e
pnpm turbo $TURBO_ARGS 2>&1 | tee -a "$REPORT_FILE"
EXIT_CODE=${PIPESTATUS[0]}
set -e
else
echo -e "${YELLOW}Running unit tests for current package...${NC}"
echo ""
echo "Scope: Current package" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
set +e
pnpm test:unit 2>&1 | tee -a "$REPORT_FILE"
EXIT_CODE=${PIPESTATUS[0]}
set -e
fi
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
# Summary
echo "" >> "$REPORT_FILE"
echo "========================================" >> "$REPORT_FILE"
echo "SUMMARY" >> "$REPORT_FILE"
echo "========================================" >> "$REPORT_FILE"
echo "Duration: ${DURATION}s" >> "$REPORT_FILE"
echo "Exit Code: $EXIT_CODE" >> "$REPORT_FILE"
echo "Report: $REPORT_FILE" >> "$REPORT_FILE"
echo ""
echo -e "${BLUE}════════════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}SUMMARY${NC}"
echo -e "${BLUE}════════════════════════════════════════════════════════════════${NC}"
echo -e "Duration: ${DURATION}s"
if [[ $EXIT_CODE -eq 0 ]]; then
echo -e "Status: ${GREEN}PASSED${NC}"
echo "Status: PASSED" >> "$REPORT_FILE"
else
echo -e "Status: ${RED}FAILED${NC}"
echo "Status: FAILED" >> "$REPORT_FILE"
fi
echo -e "Report: ${YELLOW}${REPORT_FILE}${NC}"
echo ""
exit $EXIT_CODE