Enhance validation script and CI workflow for code quality checks - Added support for a --fix option in validate.sh to apply Ruff auto-fixes for formatting and linting. - Updated GitHub Actions workflow to include separate steps for installing development and runtime dependencies. - Introduced dedicated steps for code formatting and linting checks using Ruff, along with type checking and security analysis using mypy and Bandit.
124 lines
4.6 KiB
Bash
Executable File
124 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Model Manager Code Validation Script
|
|
# This script runs all code quality checks before committing or deploying
|
|
|
|
set -e # Exit on any error
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Args
|
|
FIX_MODE=false
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--fix)
|
|
FIX_MODE=true
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
echo "Usage: $0 [--fix]"
|
|
echo " --fix Apply Ruff auto-fixes (format and lint fixes)."
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo -e "${RED}Unknown option: $1${NC}"
|
|
echo "Usage: $0 [--fix]"
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo -e "${BLUE}╔════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${BLUE}║ Model Manager - Code Validation Suite ║${NC}"
|
|
echo -e "${BLUE}╚════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
|
|
# Check if virtual environment is activated
|
|
if [[ -z "${VIRTUAL_ENV}" ]] && [[ -z "${CONDA_DEFAULT_ENV}" ]]; then
|
|
echo -e "${YELLOW}⚠️ Warning: No virtual environment detected${NC}"
|
|
echo -e "${YELLOW} Consider activating your venv/conda environment${NC}"
|
|
echo ""
|
|
fi
|
|
|
|
# Function to run a validation step
|
|
run_step() {
|
|
local step_name=$1
|
|
local step_command=$2
|
|
|
|
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${BLUE}▶ ${step_name}${NC}"
|
|
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
|
|
if eval "$step_command"; then
|
|
echo -e "${GREEN}✅ ${step_name} - PASSED${NC}"
|
|
echo ""
|
|
return 0
|
|
else
|
|
echo -e "${RED}❌ ${step_name} - FAILED${NC}"
|
|
echo ""
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Track failures
|
|
FAILED_STEPS=()
|
|
|
|
# Step 1: Code Formatting Check (Ruff)
|
|
# - default: check only
|
|
# - --fix: write changes
|
|
if ! run_step "1. Code Formatting (Ruff)" "if \$FIX_MODE; then ruff format orchestrator/ tests/; else ruff format --check orchestrator/ tests/; fi"; then
|
|
FAILED_STEPS+=("Code Formatting")
|
|
fi
|
|
|
|
# Step 2: Linting (Ruff)
|
|
# - default: check only
|
|
# - --fix: apply autofixes
|
|
if ! run_step "2. Code Linting (Ruff)" "if \$FIX_MODE; then ruff check --fix orchestrator/ tests/; else ruff check orchestrator/ tests/; fi"; then
|
|
FAILED_STEPS+=("Linting")
|
|
fi
|
|
|
|
# Step 3: Type Checking (mypy)
|
|
if ! run_step "3. Type Checking (mypy)" "mypy orchestrator/"; then
|
|
FAILED_STEPS+=("Type Checking")
|
|
fi
|
|
|
|
# Step 4: Security Analysis (Bandit)
|
|
if ! run_step "4. Security Analysis (Bandit)" "bandit -r orchestrator/ -ll -q"; then
|
|
FAILED_STEPS+=("Security Analysis")
|
|
fi
|
|
|
|
# Step 5: Unit Tests (pytest)
|
|
if ! run_step "5. Unit Tests (pytest)" "pytest tests/ --cov=orchestrator --cov-report=term-missing --cov-report=xml --cov-report=html --cov-fail-under=80 -q"; then
|
|
FAILED_STEPS+=("Unit Tests")
|
|
fi
|
|
|
|
# Summary
|
|
echo -e "${BLUE}╔════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${BLUE}║ Validation Summary ║${NC}"
|
|
echo -e "${BLUE}╚════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
|
|
if [ ${#FAILED_STEPS[@]} -eq 0 ]; then
|
|
echo -e "${GREEN}✅ All validation checks passed!${NC}"
|
|
echo -e "${GREEN} Your code is ready for commit/deployment.${NC}"
|
|
echo ""
|
|
exit 0
|
|
else
|
|
echo -e "${RED}❌ Validation failed for the following steps:${NC}"
|
|
for step in "${FAILED_STEPS[@]}"; do
|
|
echo -e "${RED} • ${step}${NC}"
|
|
done
|
|
echo ""
|
|
echo -e "${YELLOW}💡 Tips:${NC}"
|
|
echo -e "${YELLOW} • Run 'ruff format orchestrator/ tests/' to auto-fix formatting${NC}"
|
|
echo -e "${YELLOW} • Run 'ruff check --fix orchestrator/ tests/' to auto-fix linting issues${NC}"
|
|
echo -e "${YELLOW} • Review mypy errors and add type hints where needed${NC}"
|
|
echo -e "${YELLOW} • Check bandit warnings for security issues${NC}"
|
|
echo -e "${YELLOW} • Fix failing tests or improve test coverage${NC}"
|
|
echo ""
|
|
exit 1
|
|
fi |