#!/bin/bash # Script de construcción para Classic Add-ons Archive v3.0 # Genera paquetes .xpi (Firefox) y .zip (Chrome) set -e # Salir si hay errores echo "==================================================" echo " Classic Add-ons Archive - Build Script v3.0" echo "==================================================" echo "" # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Configuración VERSION="3.0.0" DIST_DIR="dist" FIREFOX_PACKAGE="ca-archive-${VERSION}.xpi" CHROME_PACKAGE="ca-archive-${VERSION}-chrome.zip" # Archivos a incluir (relativos al directorio raíz) INCLUDE_FILES=( "manifest.json" "background.js" "content/" "skin/" ) # Archivos a excluir (patrones de exclusión) EXCLUDE_PATTERNS=( "*.git*" "*~" "*.swp" ".DS_Store" "Thumbs.db" "*.tmp" "*.log" "*.md" # Excluir documentación (opcional: comentar para incluir) "install.rdf" # Legacy "chrome.manifest" # Legacy "bootstrap.js" # Legacy "update.xml" # Legacy "content/db.js" # Legacy (usamos db-webext.js) "package.json" "package-lock.json" "node_modules/" "dist/" ) # Función para imprimir con color print_status() { echo -e "${GREEN}[✓]${NC} $1" } print_warning() { echo -e "${YELLOW}[!]${NC} $1" } print_error() { echo -e "${RED}[✗]${NC} $1" } # Verificar que estamos en el directorio correcto if [ ! -f "manifest.json" ]; then print_error "No se encuentra manifest.json" print_error "Ejecuta este script desde el directorio raíz del proyecto" exit 1 fi print_status "Directorio de proyecto detectado" # Crear directorio de distribución if [ -d "$DIST_DIR" ]; then print_warning "Limpiando directorio de distribución existente..." rm -rf "$DIST_DIR" fi mkdir -p "$DIST_DIR" print_status "Directorio de distribución creado: $DIST_DIR/" # Función para construir el comando de exclusión para zip build_exclude_args() { local args="" for pattern in "${EXCLUDE_PATTERNS[@]}"; do args="$args -x '$pattern'" done echo "$args" } # Construir paquete para Firefox (.xpi) echo "" echo "Construyendo paquete para Firefox..." print_status "Empaquetando archivos..." # Crear archivo zip temporal TMP_ZIP="$DIST_DIR/temp.zip" # Comando de zip con exclusiones zip -r "$TMP_ZIP" "${INCLUDE_FILES[@]}" \ -x "${EXCLUDE_PATTERNS[@]}" \ > /dev/null 2>&1 # Renombrar a .xpi mv "$TMP_ZIP" "$DIST_DIR/$FIREFOX_PACKAGE" if [ -f "$DIST_DIR/$FIREFOX_PACKAGE" ]; then FIREFOX_SIZE=$(du -h "$DIST_DIR/$FIREFOX_PACKAGE" | cut -f1) print_status "Paquete Firefox creado: $FIREFOX_PACKAGE ($FIREFOX_SIZE)" else print_error "Error al crear paquete Firefox" exit 1 fi # Construir paquete para Chrome (.zip) echo "" echo "Construyendo paquete para Chrome..." print_status "Empaquetando archivos..." zip -r "$DIST_DIR/$CHROME_PACKAGE" "${INCLUDE_FILES[@]}" \ -x "${EXCLUDE_PATTERNS[@]}" \ > /dev/null 2>&1 if [ -f "$DIST_DIR/$CHROME_PACKAGE" ]; then CHROME_SIZE=$(du -h "$DIST_DIR/$CHROME_PACKAGE" | cut -f1) print_status "Paquete Chrome creado: $CHROME_PACKAGE ($CHROME_SIZE)" else print_error "Error al crear paquete Chrome" exit 1 fi # Verificar integridad de los paquetes echo "" echo "Verificando paquetes..." # Verificar Firefox if unzip -t "$DIST_DIR/$FIREFOX_PACKAGE" > /dev/null 2>&1; then print_status "Paquete Firefox verificado (integridad OK)" else print_error "Paquete Firefox corrupto" exit 1 fi # Verificar Chrome if unzip -t "$DIST_DIR/$CHROME_PACKAGE" > /dev/null 2>&1; then print_status "Paquete Chrome verificado (integridad OK)" else print_error "Paquete Chrome corrupto" exit 1 fi # Listar contenido (opcional) if [ "$1" = "--list" ] || [ "$1" = "-l" ]; then echo "" echo "Contenido del paquete Firefox:" unzip -l "$DIST_DIR/$FIREFOX_PACKAGE" fi # Resumen final echo "" echo "==================================================" echo " ✨ Build completado exitosamente" echo "==================================================" echo "" echo "Paquetes generados en: $DIST_DIR/" echo "" echo " Firefox: $FIREFOX_PACKAGE ($FIREFOX_SIZE)" echo " Chrome: $CHROME_PACKAGE ($CHROME_SIZE)" echo "" echo "Próximos pasos:" echo "" echo " Firefox:" echo " 1. Ir a about:debugging#/runtime/this-firefox" echo " 2. Click en 'Cargar complemento temporal'" echo " 3. Seleccionar: $DIST_DIR/$FIREFOX_PACKAGE" echo "" echo " Chrome:" echo " 1. Ir a chrome://extensions/" echo " 2. Activar 'Modo de desarrollador'" echo " 3. Click en 'Cargar extensión sin empaquetar'" echo " 4. Extraer y seleccionar la carpeta de $CHROME_PACKAGE" echo "" echo " Para publicar:" echo " - Firefox AMO: https://addons.mozilla.org/developers/" echo " - Chrome Web Store: https://chrome.google.com/webstore/devconsole" echo "" echo "==================================================" exit 0