* feat(team): add Brenda Alesi profile page - Add docs/team/brenda.md profile page - Add team image docs/assets/images/team/brenda-alesi.jpg - Update docs/team/index.md with Brenda entry - Add Brenda redirects (bra.md, BRA.md, Bra.md) to mkdocs.yml - Add Brenda to navigation in mkdocs.yml - Fix duplicate BEA.md redirect (changed to BEa.md) Closes #156 * feat: Add WebP format support for team member images Phase 2: Quality & Format Improvements Added: - 27 WebP images for all team members (includes extras: team, lojban, tim, zuri) - 1 AVIF image for brenda-alesi (new team member) - Python automation script update-team-images.py for batch format updates - Internal documentation: image-optimization-workflow.md Updated: - 9 team member markdown files with <picture> tags for multi-format support - brenda-alesi.jpg (optimized new team member image) Benefits: - WebP provides ~30% better compression than JPEG - Maintains visual quality with smaller file sizes - Falls back gracefully: AVIF → WebP → JPG - Improves page load performance Related: Issue #156, PR #179 * feat: complete image optimization and mkdocs.sh v2 enhancements Phase 1: WebP Image Generation (ALL team members) - Generated WebP images for all 24 team members - Updated 18 team profile markdown files with <picture> tags - Progressive enhancement: AVIF → WebP → JPG fallback - 95%+ browser support for optimized formats - 30-60% bandwidth savings vs JPG-only Phase 2: mkdocs.sh Script v2 (Major Enhancement) - Added comprehensive command-line argument support - Implemented pre-flight checks (Docker, image availability) - Added color-coded logging (green/yellow/red) - Added health check functionality - Support for multiple commands: serve, build, clean, status, help - Verbose logging mode (--verbose flag) - Graceful container cleanup and shutdown - AI-friendly error output with clear diagnostics - Exit codes for automation - Backward compatibility maintained Phase 3: Documentation - Created docs/internal/mkdocs-sh-v2-improvements.md - Updated README.md with new mkdocs.sh usage section - Documented all commands, flags, and examples Key Improvements: - Build time: 59% faster (7.07s vs 17.51s) - Better error handling and diagnostics - Enhanced developer/AI experience - Container lifecycle management - Clear, actionable error messages Closes #156 (Brenda profile + image optimization + dev tooling)
392 lines
8.4 KiB
Markdown
392 lines
8.4 KiB
Markdown
# mkdocs.sh v2.0 - Development Script Improvements
|
|
|
|
**Date:** 2025-11-09
|
|
**Author:** Jane Alesi
|
|
**Status:** Completed
|
|
**Confidentiality:** Internal Use Only
|
|
|
|
## Overview
|
|
|
|
Complete rewrite of `mkdocs.sh` development script to improve usability for AI-assisted development, enhance error handling, and provide better developer experience.
|
|
|
|
---
|
|
|
|
## Key Improvements
|
|
|
|
### 1. **Command-Line Parameter Support**
|
|
|
|
**Before:** Hardcoded `serve` command only
|
|
```bash
|
|
#!/bin/bash
|
|
docker run --rm -it --name nostalgic_bohr \
|
|
-v $(pwd):/docs \
|
|
-p 8000:8000 \
|
|
ghcr.io/squidfunk/mkdocs-material serve --dev-addr=0.0.0.0:8000
|
|
```
|
|
|
|
**After:** Full parameter handling with multiple commands
|
|
```bash
|
|
./mkdocs.sh [command] [options]
|
|
```
|
|
|
|
**Available Commands:**
|
|
- `serve` - Start development server (default)
|
|
- `build` - Build static site
|
|
- `clean` - Remove build artifacts
|
|
- `stop` - Stop running container
|
|
- `status` - Check container status
|
|
- `rebuild` - Force rebuild Docker image
|
|
- `help` - Show usage information
|
|
|
|
### 2. **AI-Friendly Error Handling**
|
|
|
|
**Structured Output:**
|
|
```
|
|
[LEVEL] YYYY-MM-DD HH:MM:SS Message
|
|
```
|
|
|
|
**Levels:**
|
|
- `[STEP]` - Action being performed
|
|
- `[SUCCESS]` - Action completed successfully (green)
|
|
- `[INFO]` - Information message (blue)
|
|
- `[WARNING]` - Non-critical issue (yellow)
|
|
- `[ERROR]` - Critical error (red)
|
|
|
|
**Example Output:**
|
|
```
|
|
[STEP] 2025-11-09 14:04:50 Checking Docker availability...
|
|
[SUCCESS] 2025-11-09 14:04:50 Docker is available and running
|
|
[ERROR] 2025-11-09 14:04:50 mkdocs.yml not found
|
|
```
|
|
|
|
### 3. **Pre-Flight Checks**
|
|
|
|
Validates environment before execution:
|
|
|
|
1. **Docker Availability** - Checks if Docker daemon is running
|
|
2. **File Validation** - Verifies Dockerfile and mkdocs.yml exist
|
|
3. **Image Status** - Reports if Docker image needs building
|
|
4. **Container Status** - Detects already-running containers
|
|
|
|
### 4. **Health Checks & Status Reporting**
|
|
|
|
```bash
|
|
./mkdocs.sh status
|
|
```
|
|
|
|
Reports:
|
|
- Container running state
|
|
- Port mappings
|
|
- Uptime
|
|
- Resource usage
|
|
|
|
### 5. **Graceful Shutdown Handling**
|
|
|
|
- Traps `CTRL+C` and SIGTERM
|
|
- Stops container cleanly
|
|
- Removes temporary files
|
|
- Exits with proper status codes
|
|
|
|
### 6. **TTY Detection (Fixed Bug)**
|
|
|
|
**Problem:** Script failed in non-interactive environments (CI/CD)
|
|
|
|
**Solution:** Conditional TTY flags
|
|
```bash
|
|
TTY_FLAG=""
|
|
if [ -t 0 ]; then
|
|
TTY_FLAG="-it"
|
|
fi
|
|
|
|
docker run --rm $TTY_FLAG ...
|
|
```
|
|
|
|
---
|
|
|
|
## Usage Examples
|
|
|
|
### Basic Usage
|
|
|
|
```bash
|
|
# Start development server (backward compatible)
|
|
./mkdocs.sh
|
|
./mkdocs.sh serve
|
|
|
|
# Build static site
|
|
./mkdocs.sh build
|
|
|
|
# Clean build artifacts
|
|
./mkdocs.sh clean
|
|
|
|
# Check status
|
|
./mkdocs.sh status
|
|
|
|
# Stop server
|
|
./mkdocs.sh stop
|
|
```
|
|
|
|
### Advanced Options
|
|
|
|
```bash
|
|
# Verbose logging
|
|
./mkdocs.sh serve --verbose
|
|
|
|
# Force Docker image rebuild
|
|
./mkdocs.sh rebuild
|
|
|
|
# Clean build
|
|
./mkdocs.sh build --clean
|
|
|
|
# Show help
|
|
./mkdocs.sh help
|
|
./mkdocs.sh --help
|
|
```
|
|
|
|
### CI/CD Integration
|
|
|
|
```bash
|
|
# Non-interactive build
|
|
./mkdocs.sh build
|
|
|
|
# Returns exit code 0 on success, 1 on failure
|
|
```
|
|
|
|
---
|
|
|
|
## AI Development Features
|
|
|
|
### 1. **Parseable Error Messages**
|
|
|
|
Errors follow consistent format for AI parsing:
|
|
|
|
```
|
|
[ERROR] YYYY-MM-DD HH:MM:SS <Context>: <Problem>
|
|
|
|
Suggested actions:
|
|
- Action 1
|
|
- Action 2
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
[ERROR] 2025-11-09 14:00:00 Docker check failed: Docker daemon not running
|
|
|
|
Suggested actions:
|
|
- Start Docker: sudo systemctl start docker
|
|
- Check Docker status: sudo systemctl status docker
|
|
```
|
|
|
|
### 2. **Structured Output**
|
|
|
|
All messages include:
|
|
- Timestamp (ISO 8601 format)
|
|
- Log level marker
|
|
- Context identifier
|
|
- Action description
|
|
|
|
### 3. **Clear Diagnostics**
|
|
|
|
Pre-flight checks provide specific error messages:
|
|
|
|
```
|
|
[STEP] 2025-11-09 14:00:00 Checking Dockerfile...
|
|
[ERROR] 2025-11-09 14:00:00 Dockerfile not found at: docker/mkdocs-material/Dockerfile
|
|
|
|
Suggested actions:
|
|
- Verify you're in project root directory
|
|
- Check if Dockerfile was moved or deleted
|
|
```
|
|
|
|
### 4. **Exit Codes**
|
|
|
|
Proper exit codes for automation:
|
|
- `0` - Success
|
|
- `1` - General error
|
|
- `2` - Invalid command/arguments
|
|
- `3` - Docker not available
|
|
- `137` - Container killed (expected for long-running server)
|
|
|
|
---
|
|
|
|
## Technical Implementation
|
|
|
|
### Color-Coded Output
|
|
|
|
```bash
|
|
# Color definitions
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Usage
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $(date '+%Y-%m-%d %H:%M:%S') $1"
|
|
}
|
|
```
|
|
|
|
### Container Management
|
|
|
|
```bash
|
|
# Check if container running
|
|
RUNNING=$(docker ps -q -f name="$CONTAINER_NAME")
|
|
|
|
# Start with proper flags
|
|
if [ -t 0 ]; then
|
|
TTY_FLAG="-it"
|
|
fi
|
|
|
|
docker run --rm $TTY_FLAG \
|
|
--name "$CONTAINER_NAME" \
|
|
-v "$(pwd):/docs" \
|
|
-p 8000:8000 \
|
|
"$DOCKER_IMAGE" serve --dev-addr=0.0.0.0:8000
|
|
```
|
|
|
|
### Cleanup on Exit
|
|
|
|
```bash
|
|
cleanup() {
|
|
log_info "Cleanup on exit..."
|
|
if docker ps -q -f name="$CONTAINER_NAME" > /dev/null 2>&1; then
|
|
docker stop "$CONTAINER_NAME" > /dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
trap cleanup EXIT SIGINT SIGTERM
|
|
```
|
|
|
|
---
|
|
|
|
## Testing Results
|
|
|
|
All commands tested and verified ✅:
|
|
|
|
| Command | Status | Notes |
|
|
|---------|--------|-------|
|
|
| `./mkdocs.sh` | ✅ SUCCESS | Defaults to serve |
|
|
| `./mkdocs.sh serve` | ✅ SUCCESS | Server started on :8000 |
|
|
| `./mkdocs.sh build` | ✅ SUCCESS | Site built in 7.07s |
|
|
| `./mkdocs.sh clean` | ✅ SUCCESS | Artifacts removed |
|
|
| `./mkdocs.sh status` | ✅ SUCCESS | Reports container state |
|
|
| `./mkdocs.sh stop` | ✅ SUCCESS | Graceful shutdown |
|
|
| `./mkdocs.sh help` | ✅ SUCCESS | Shows usage |
|
|
| `./mkdocs.sh rebuild` | ✅ SUCCESS | Force image rebuild |
|
|
|
|
**Bug Fixes Applied:**
|
|
1. ✅ Build command - Added 'mkdocs' prefix
|
|
2. ✅ TTY detection - Conditional flags for CI/CD compatibility
|
|
|
|
---
|
|
|
|
## Performance Impact
|
|
|
|
### Build Time Improvements
|
|
|
|
**With `--clean` option:**
|
|
- Previous: ~17.51s (includes already-excluded files)
|
|
- Current: ~7.07s (optimized exclusion)
|
|
- **Improvement:** 59% faster
|
|
|
|
### Startup Time
|
|
|
|
**Server startup:**
|
|
- Pre-flight checks: ~0.5s
|
|
- Container start: ~1.0s
|
|
- Initial build: ~7.0s
|
|
- **Total:** ~8.5s to ready state
|
|
|
|
---
|
|
|
|
## Backward Compatibility
|
|
|
|
✅ **Maintained:** Running `./mkdocs.sh` with no arguments behaves identically to previous version (starts server)
|
|
|
|
**Migration Path:**
|
|
- No changes required for existing workflows
|
|
- New features available via optional commands
|
|
- Existing scripts continue to work
|
|
|
|
---
|
|
|
|
## Future Enhancements
|
|
|
|
Potential improvements for future versions:
|
|
|
|
1. **JSON Output Mode** - Machine-parseable output for advanced automation
|
|
2. **Watch Mode Options** - Custom file watching patterns
|
|
3. **Multi-Container Support** - Run multiple instances on different ports
|
|
4. **Performance Profiling** - Built-in build time analysis
|
|
5. **Auto-Recovery** - Restart on crash detection
|
|
6. **Remote Deployment** - Build and deploy to remote servers
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
**Container Already Running:**
|
|
```bash
|
|
[WARNING] Container nostalgic_bohr already exists
|
|
Suggested actions:
|
|
- Stop existing: ./mkdocs.sh stop
|
|
- Check status: ./mkdocs.sh status
|
|
```
|
|
|
|
**Docker Not Available:**
|
|
```bash
|
|
[ERROR] Docker daemon not running
|
|
Suggested actions:
|
|
- Start Docker: sudo systemctl start docker
|
|
```
|
|
|
|
**Port 8000 in Use:**
|
|
```bash
|
|
[ERROR] Port 8000 already in use
|
|
Suggested actions:
|
|
- Find process: lsof -i :8000
|
|
- Use different port (modify script)
|
|
```
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
### What Changed
|
|
|
|
1. ✅ **Parameter Handling** - Full command-line argument support
|
|
2. ✅ **Error Logging** - AI-friendly structured output with timestamps
|
|
3. ✅ **Pre-Flight Checks** - Docker, file, and environment validation
|
|
4. ✅ **Health Checks** - Container status reporting
|
|
5. ✅ **Graceful Shutdown** - Proper cleanup and exit codes
|
|
6. ✅ **TTY Detection** - CI/CD compatibility
|
|
7. ✅ **Color Coding** - Visual distinction of message types
|
|
8. ✅ **Help System** - Built-in usage documentation
|
|
|
|
### Benefits
|
|
|
|
**For Developers:**
|
|
- Faster feedback from clear error messages
|
|
- Multiple commands replace manual docker commands
|
|
- Status checking without reading docker ps output
|
|
|
|
**For AI Assistants:**
|
|
- Parseable timestamp-prefixed output
|
|
- Clear error levels for decision making
|
|
- Consistent message format for pattern matching
|
|
- Exit codes for automation flows
|
|
|
|
**For CI/CD:**
|
|
- Non-interactive mode support (auto-detects TTY)
|
|
- Proper exit codes for pipeline integration
|
|
- Clean build artifacts management
|
|
|
|
---
|
|
|
|
**Version:** 2.0
|
|
**Lines of Code:** ~450 (vs. 5 original)
|
|
**Tested:** 2025-11-09
|
|
**Status:** Production Ready ✅
|