CI/CD Improvements

This commit is contained in:
Eric Gullickson
2025-12-18 12:03:04 -06:00
parent 192f2edc04
commit c6e187e29e
6 changed files with 858 additions and 18 deletions

105
scripts/rollback.sh Executable file
View File

@@ -0,0 +1,105 @@
#!/bin/bash
# rollback.sh
# Emergency rollback script for MotoVaultPro
#
# Usage:
# ./scripts/rollback.sh # Rollback to previous commit (HEAD~1)
# ./scripts/rollback.sh HEAD~2 # Rollback 2 commits back
# ./scripts/rollback.sh v1.0.0 # Rollback to specific tag
# ./scripts/rollback.sh abc123 # Rollback to specific commit
#
# This script:
# 1. Stops all running services
# 2. Checks out the specified version
# 3. Rebuilds Docker images
# 4. Starts all services
# 5. Runs basic health checks
set -euo pipefail
# Configuration
DEPLOY_PATH="${DEPLOY_PATH:-/opt/motovaultpro}"
ROLLBACK_TARGET="${1:-HEAD~1}"
DOCKER_COMPOSE_FILE="docker-compose.yml"
DOCKER_COMPOSE_PROD_FILE="docker-compose.prod.yml"
echo "=========================================="
echo "MotoVaultPro Rollback"
echo "=========================================="
echo "Deploy path: $DEPLOY_PATH"
echo "Target: $ROLLBACK_TARGET"
echo ""
cd "$DEPLOY_PATH"
# Confirm rollback
echo "WARNING: This will stop all services and rollback to: $ROLLBACK_TARGET"
echo ""
read -p "Continue? (y/N): " confirm
if [ "${confirm,,}" != "y" ]; then
echo "Rollback cancelled"
exit 0
fi
echo ""
echo "Step 1/5: Stopping current services..."
docker compose -f $DOCKER_COMPOSE_FILE -f $DOCKER_COMPOSE_PROD_FILE down --timeout 30 || true
echo ""
echo "Step 2/5: Recording current version for reference..."
CURRENT_COMMIT=$(git rev-parse HEAD)
echo "Current commit: $CURRENT_COMMIT"
echo "$CURRENT_COMMIT" > .rollback-from
echo ""
echo "Step 3/5: Checking out $ROLLBACK_TARGET..."
git fetch origin
git checkout "$ROLLBACK_TARGET"
NEW_COMMIT=$(git rev-parse HEAD)
echo "Now at commit: $NEW_COMMIT"
echo ""
echo "Step 4/5: Rebuilding Docker images..."
docker compose -f $DOCKER_COMPOSE_FILE build
echo ""
echo "Step 5/5: Starting services..."
if [ -f "$DOCKER_COMPOSE_PROD_FILE" ]; then
docker compose -f $DOCKER_COMPOSE_FILE -f $DOCKER_COMPOSE_PROD_FILE up -d
else
docker compose -f $DOCKER_COMPOSE_FILE up -d
fi
echo ""
echo "Waiting for services to start..."
sleep 30
echo ""
echo "Checking service status..."
FAILED=0
for service in mvp-traefik mvp-frontend mvp-backend mvp-postgres mvp-redis; do
status=$(docker inspect --format='{{.State.Status}}' $service 2>/dev/null || echo "not found")
if [ "$status" = "running" ]; then
echo " OK: $service"
else
echo " ERROR: $service ($status)"
FAILED=1
fi
done
echo ""
echo "=========================================="
if [ $FAILED -eq 0 ]; then
echo "Rollback completed successfully!"
echo ""
echo "Rolled back from: $CURRENT_COMMIT"
echo "Now running: $NEW_COMMIT"
echo ""
echo "To undo this rollback, run:"
echo " ./scripts/rollback.sh $CURRENT_COMMIT"
else
echo "Rollback completed with errors!"
echo "Some services may not be running correctly."
echo "Check logs: docker compose logs"
fi
echo "=========================================="