chore: Deployment version naming and cleanup policy
Quant Engine CI/CD Pipeline / validate-core (push) Failing after 14s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (push) Has been skipped
Build & Package / build (push) Failing after 1m28s
Deploy to Production (Local) / Build & Deploy to Production (push) Failing after 1m26s
Quant Engine CI/CD Pipeline / validate-core (push) Failing after 14s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (push) Has been skipped
Build & Package / build (push) Failing after 1m28s
Deploy to Production (Local) / Build & Deploy to Production (push) Failing after 1m26s
- **Version naming**: Include date, time, commit hash, and CI run number Format: quantengine_YYYYMMDD_HHMMSS_COMMIT_HASH_RUNNUM - **Cleanup script**: Auto-remove old versions to prevent disk exhaustion - Keep 5 most recent by default - Remove staging/test versions - Can be run weekly via cron or after deployments - Supports dry-run mode for validation Addresses: Disk usage management for long-running CI/CD pipeline Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -182,9 +182,11 @@ jobs:
|
||||
set -e
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
COMMIT=$(git rev-parse --short HEAD)
|
||||
RUN_NUM="${{ github.run_number }}"
|
||||
DEPLOY_BASE="/home/kjh2064/deployments"
|
||||
ACTIVE_LINK="/home/kjh2064/quantengine_active"
|
||||
TARGET_DIR="${DEPLOY_BASE}/quantengine_${TIMESTAMP}"
|
||||
# Version format: quantengine_YYYYMMDD_HHMMSS_COMMIT_HASH_RUNNUM
|
||||
TARGET_DIR="${DEPLOY_BASE}/quantengine_${TIMESTAMP}_${COMMIT}_${RUN_NUM}"
|
||||
|
||||
TELEGRAM_BOT_TOKEN="${{ secrets.TELEGRAM_BOT_TOKEN }}"
|
||||
[ -z "$TELEGRAM_BOT_TOKEN" ] && TELEGRAM_BOT_TOKEN="${{ env.TELEGRAM_BOT_TOKEN_DEFAULT }}"
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
# Cleanup old deployment versions to prevent disk exhaustion
|
||||
# Deployment version format: quantengine_YYYYMMDD_HHMMSS_COMMIT_HASH_[SEQ]
|
||||
# Usage: ./cleanup_old_deployments.sh [keep_count]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
DEPLOY_BASE="/home/kjh2064/deployments"
|
||||
KEEP_COUNT="${1:-5}" # Keep 5 most recent versions by default
|
||||
|
||||
echo "=========================================="
|
||||
echo "🧹 QuantEngine Deployment Cleanup"
|
||||
echo "=========================================="
|
||||
echo "Base: $DEPLOY_BASE"
|
||||
echo "Keeping: $KEEP_COUNT most recent versions"
|
||||
echo ""
|
||||
|
||||
# Get active deployment
|
||||
ACTIVE_LINK="/home/kjh2064/quantengine_active"
|
||||
if [ ! -L "$ACTIVE_LINK" ]; then
|
||||
echo "❌ Active link not found: $ACTIVE_LINK"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ACTIVE_VERSION=$(readlink -f "$ACTIVE_LINK")
|
||||
ACTIVE_NAME=$(basename "$ACTIVE_VERSION")
|
||||
|
||||
echo "🔒 Active version: $ACTIVE_NAME"
|
||||
echo ""
|
||||
|
||||
# List all quantengine deployments sorted by date (newest first)
|
||||
echo "📋 Available versions:"
|
||||
VERSIONS=$(ls -dt "$DEPLOY_BASE"/quantengine_* 2>/dev/null | head -$((KEEP_COUNT + 1)) | sed 's|.*/||' | sort -r)
|
||||
COUNT=0
|
||||
|
||||
TO_DELETE=""
|
||||
while IFS= read -r version; do
|
||||
VERSION_PATH="$DEPLOY_BASE/$version"
|
||||
SIZE=$(du -sh "$VERSION_PATH" 2>/dev/null | cut -f1)
|
||||
|
||||
COUNT=$((COUNT + 1))
|
||||
|
||||
# Check if this is active
|
||||
if [ "$VERSION_PATH" = "$ACTIVE_VERSION" ]; then
|
||||
echo " ✓ [$COUNT] $version ($SIZE) [ACTIVE]"
|
||||
elif [ $COUNT -le $KEEP_COUNT ]; then
|
||||
echo " · [$COUNT] $version ($SIZE)"
|
||||
else
|
||||
echo " ✗ [$COUNT] $version ($SIZE) [WILL DELETE]"
|
||||
TO_DELETE="$TO_DELETE $VERSION_PATH"
|
||||
fi
|
||||
done <<< "$VERSIONS"
|
||||
|
||||
# Also check for TEST versions (cleanup more aggressively)
|
||||
echo ""
|
||||
echo "🧪 Cleaning up TEST versions..."
|
||||
TEST_VERSIONS=$(ls -dt "$DEPLOY_BASE"/quantengine_*_TEST 2>/dev/null | head -1 || true)
|
||||
if [ -n "$TEST_VERSIONS" ]; then
|
||||
for tv in $TEST_VERSIONS; do
|
||||
if [ "$tv" != "$(readlink -f "$ACTIVE_LINK")" ]; then
|
||||
TEST_SIZE=$(du -sh "$tv" 2>/dev/null | cut -f1)
|
||||
echo " ✗ $(basename "$tv") ($TEST_SIZE) [STAGING]"
|
||||
TO_DELETE="$TO_DELETE $tv"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Execute deletion if not in dry-run mode
|
||||
if [ -n "$TO_DELETE" ] && [ "${2:-}" != "dry-run" ]; then
|
||||
echo ""
|
||||
echo "🔄 Removing old versions..."
|
||||
for dir in $TO_DELETE; do
|
||||
if [ -d "$dir" ]; then
|
||||
DIR_NAME=$(basename "$dir")
|
||||
DIR_SIZE=$(du -sh "$dir" | cut -f1)
|
||||
rm -rf "$dir"
|
||||
echo " ✓ Deleted $DIR_NAME ($DIR_SIZE)"
|
||||
fi
|
||||
done
|
||||
|
||||
FREED=$(du -sh "$DEPLOY_BASE" 2>/dev/null | cut -f1 || echo "unknown")
|
||||
echo ""
|
||||
echo "✅ Cleanup complete. Total size: $FREED"
|
||||
else
|
||||
echo ""
|
||||
echo "⏭️ Dry-run mode. Use 'cleanup_old_deployments.sh $KEEP_COUNT' (without dry-run) to delete."
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "💡 Recommendation:"
|
||||
echo " - Run weekly via cron: 0 2 * * 0 /home/kjh2064/scripts/cleanup_old_deployments.sh 3"
|
||||
echo " - Or after each successful deployment"
|
||||
Reference in New Issue
Block a user