138 lines
5.2 KiB
Bash
138 lines
5.2 KiB
Bash
#!/bin/bash
|
|
################################################################################
|
|
# IGNY8 Application Packaging Script
|
|
# Creates a portable package containing only source code (no dependencies)
|
|
################################################################################
|
|
|
|
set -e
|
|
|
|
# Configuration
|
|
SOURCE_DIR="/data/app/igny8"
|
|
BACKUP_DIR="/data/backups/igny8"
|
|
DATE_STAMP=$(date +%Y%m%d_%H%M%S)
|
|
PACKAGE_NAME="igny8-app-${DATE_STAMP}.tar.gz"
|
|
TEMP_DIR="/tmp/igny8-package-${DATE_STAMP}"
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${GREEN} IGNY8 Application Package Creator${NC}"
|
|
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
|
|
# Create backup directory if it doesn't exist
|
|
mkdir -p "${BACKUP_DIR}"
|
|
echo -e "${YELLOW}📁 Backup directory: ${BACKUP_DIR}${NC}"
|
|
|
|
# Create temporary packaging directory
|
|
echo -e "${YELLOW}📦 Creating temporary package directory...${NC}"
|
|
mkdir -p "${TEMP_DIR}"
|
|
|
|
# Copy application files (excluding generated artifacts)
|
|
echo -e "${YELLOW}📋 Copying application source files...${NC}"
|
|
rsync -av \
|
|
--exclude='.git' \
|
|
--exclude='__pycache__' \
|
|
--exclude='*.pyc' \
|
|
--exclude='*.pyo' \
|
|
--exclude='.pytest_cache' \
|
|
--exclude='backend/.venv' \
|
|
--exclude='backend/venv' \
|
|
--exclude='backend/*.sql' \
|
|
--exclude='backend/*.sqlite3' \
|
|
--exclude='backend/celerybeat-schedule' \
|
|
--exclude='backend/logs' \
|
|
--exclude='backend/staticfiles' \
|
|
--exclude='frontend/node_modules' \
|
|
--exclude='frontend/dist' \
|
|
--exclude='frontend/.vite' \
|
|
--exclude='sites/node_modules' \
|
|
--exclude='sites/dist' \
|
|
--exclude='*.log' \
|
|
--exclude='.DS_Store' \
|
|
--exclude='Thumbs.db' \
|
|
"${SOURCE_DIR}/" "${TEMP_DIR}/"
|
|
|
|
# Create package info file
|
|
echo -e "${YELLOW}📝 Creating package metadata...${NC}"
|
|
cat > "${TEMP_DIR}/PACKAGE_INFO.txt" << EOF
|
|
IGNY8 Application Package
|
|
=========================
|
|
|
|
Package Date: $(date '+%Y-%m-%d %H:%M:%S')
|
|
Package Name: ${PACKAGE_NAME}
|
|
Git Commit: $(cd ${SOURCE_DIR} && git rev-parse --short HEAD 2>/dev/null || echo "N/A")
|
|
Git Branch: $(cd ${SOURCE_DIR} && git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "N/A")
|
|
|
|
Contents:
|
|
- Backend Django application (igny8_core)
|
|
- Frontend React application (src)
|
|
- Docker configuration files
|
|
- Documentation
|
|
|
|
NOT Included (will be installed automatically):
|
|
- Python virtual environment (.venv)
|
|
- Node modules (node_modules)
|
|
- Build artifacts (dist)
|
|
- Database backups
|
|
- Log files
|
|
- Static files cache
|
|
|
|
Installation:
|
|
See INSTALLATION.md for complete setup instructions.
|
|
EOF
|
|
|
|
# Calculate package size
|
|
echo -e "${YELLOW}📊 Calculating package size...${NC}"
|
|
PACKAGE_SIZE=$(du -sh "${TEMP_DIR}" | cut -f1)
|
|
echo -e "${GREEN} Package size: ${PACKAGE_SIZE}${NC}"
|
|
|
|
# Create compressed archive
|
|
echo -e "${YELLOW}🗜️ Creating compressed archive...${NC}"
|
|
cd "${TEMP_DIR}/.."
|
|
tar -czf "${BACKUP_DIR}/${PACKAGE_NAME}" "$(basename ${TEMP_DIR})"
|
|
|
|
# Cleanup temporary directory
|
|
echo -e "${YELLOW}🧹 Cleaning up temporary files...${NC}"
|
|
rm -rf "${TEMP_DIR}"
|
|
|
|
# Get final archive size
|
|
ARCHIVE_SIZE=$(du -sh "${BACKUP_DIR}/${PACKAGE_NAME}" | cut -f1)
|
|
|
|
# Calculate checksum
|
|
echo -e "${YELLOW}🔐 Calculating checksum...${NC}"
|
|
CHECKSUM=$(sha256sum "${BACKUP_DIR}/${PACKAGE_NAME}" | cut -d' ' -f1)
|
|
|
|
# Create checksum file
|
|
echo "${CHECKSUM} ${PACKAGE_NAME}" > "${BACKUP_DIR}/${PACKAGE_NAME}.sha256"
|
|
|
|
# Summary
|
|
echo ""
|
|
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${GREEN}✅ Package created successfully!${NC}"
|
|
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${GREEN}Package: ${BACKUP_DIR}/${PACKAGE_NAME}${NC}"
|
|
echo -e "${GREEN}Size: ${ARCHIVE_SIZE}${NC}"
|
|
echo -e "${GREEN}SHA256: ${CHECKSUM}${NC}"
|
|
echo -e "${GREEN}Checksum file: ${BACKUP_DIR}/${PACKAGE_NAME}.sha256${NC}"
|
|
echo ""
|
|
|
|
# Cleanup old packages (keep last 7 days)
|
|
echo -e "${YELLOW}🗑️ Cleaning up packages older than 7 days...${NC}"
|
|
find "${BACKUP_DIR}" -name "igny8-app-*.tar.gz" -type f -mtime +7 -delete
|
|
find "${BACKUP_DIR}" -name "igny8-app-*.sha256" -type f -mtime +7 -delete
|
|
|
|
OLD_COUNT=$(find "${BACKUP_DIR}" -name "igny8-app-*.tar.gz" | wc -l)
|
|
echo -e "${GREEN} Packages retained: ${OLD_COUNT}${NC}"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${GREEN}✨ Backup complete!${NC}"
|
|
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
|
|
exit 0
|