Update .gitignore and refactor metrics.py, activities.py, and gates.py for improved clarity and consistency. Added coverage.xml and cache directories to .gitignore. Standardized string formatting and parameter handling in metrics and activities classes, enhancing code readability. Removed the deprecated faker.py file and adjusted related tests accordingly.
99 lines
4.0 KiB
Bash
Executable File
99 lines
4.0 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
|
|
|
|
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)
|
|
if ! run_step "1. Code Formatting (Ruff)" "ruff format scouter/ tests/ && ruff format --check scouter/ tests/"; then
|
|
FAILED_STEPS+=("Code Formatting")
|
|
fi
|
|
|
|
# Step 2: Linting (Ruff)
|
|
if ! run_step "2. Code Linting (Ruff)" "ruff check --fix scouter/ tests/"; then
|
|
FAILED_STEPS+=("Linting")
|
|
fi
|
|
|
|
# Step 3: Type Checking (mypy)
|
|
if ! run_step "3. Type Checking (mypy)" "mypy scouter/"; then
|
|
FAILED_STEPS+=("Type Checking")
|
|
fi
|
|
|
|
# Step 4: Security Analysis (Bandit)
|
|
if ! run_step "4. Security Analysis (Bandit)" "bandit -r scouter/ -ll -q"; then
|
|
FAILED_STEPS+=("Security Analysis")
|
|
fi
|
|
|
|
# Step 5: Unit Tests (pytest)
|
|
if ! run_step "5. Unit Tests (pytest)" "pytest tests/ --cov=scouter --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 scouter/ tests/' to auto-fix formatting${NC}"
|
|
echo -e "${YELLOW} • Run 'ruff check --fix scouter/ 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 |