# updatev12.dkl ## Descripción General El programa `updatev12.dkl` tiene como objetivo mantener actualizados los paquetes V12 instalados en una base de datos, así como sincronizar el código fuente y estructura de cada paquete V12 con respecto al repositorio central de instalación. El sistema valida versiones de paquetes, versiones de esquema (`schema_ver`) y versión del manifiesto disponibles en un repositorio remoto para determinar si un paquete requiere: - Actualización de código fuente (Deploy) - Instalación o actualización estructural (Install) --- # Nombre del Programa ```text updatev12.dkl ``` --- # Argumentos | Argumento | Tipo | Descripción | |---|---|---| | `from` | string | URL desde donde se descargará el archivo `manifest.json`. | | `db` | string | Nombre de la conexión a la base de datos donde se encuentran los paquetes instalados. | --- # URL por Defecto Si no se especifica el argumento `from`, el sistema utilizará la siguiente URL por defecto: ```text https://install-v12.induxsoft.net/ ``` --- # Funcionalidad General El programa realiza las siguientes operaciones: 1. Obtiene los paquetes instalados en la base de datos. 2. Descarga el archivo `manifest.json` desde la URL configurada. 3. Busca el archivo `.manifest` correspondiente a cada paquete instalado. 4. Compara versiones locales y remotas. 5. Determina si un paquete requiere: - Deploy - Instalación 6. Ejecuta la actualización correspondiente. --- # Flujo General del Proceso ```text Inicio │ ├── Leer argumentos │ ├── Obtener paquetes instalados desde la BD │ ├── Descargar manifest.json remoto | ├── Obtener manifest remoto del paquete │ ├── Para cada paquete instalado: │ │ │ ├── Buscar archivo .manifest local │ │ │ ├── Si no existe: │ │ └── Buscar paquete en catalog.json | | └── Obtener .manifiesto de cada paquete v12 y comparar las versiones │ │ │ │ │ ├── Comparar versiones │ │ │ ├── Comparar schema_ver │ │ │ ├── Si versión remota > versión local: │ │ └── Ejecutar Deploy │ │ │ ├── Si schema_ver remoto > schema_ver BD: │ │ └── Ejecutar Install │ └── Fin ``` --- # Obtención de Paquetes Instalados El sistema consulta la base de datos configurada mediante el argumento `db` para obtener la lista de paquetes instalados. Información mínima requerida: | Campo | Descripción | |---|---| | `pack_id` | Identificador único del paquete | | `version` | Versión instalada | | `schema_ver` | Versión de esquema instalada | --- # Descarga de `manifest.json` El sistema descarga el archivo: ```text manifest.json ``` desde: ```text {from}/manifest.json ``` o desde: ```text https://install-v12.induxsoft.net/manifest.json ``` --- # Estructura Esperada de `manifest.json` Ejemplo: ```json { "dbext": { "id": "dbext", "version": "1.0.100", "schema_ver": "1.0.10", "installable":["dbext"] } } ``` --- # Búsqueda de Archivos `.manifest` Para cada paquete instalado: 1. Se busca el archivo `.manifest` asociado al paquete con base al ID de paquete `pack_id`. 2. Si no se encuentra: - Se consulta `catalog.json`. - Se obtiene la lista de paquetes relacionados. - Se localiza el manifiesto correspondiente del paquete. --- # Uso de `catalog.json` El archivo `catalog.json` funciona como respaldo para localizar paquetes cuyo archivo `.manifest` no exista localmente con nombre `{pack_id}.manifest`. Ejemplo: ```json pack_id = inventario catalog.json { "inventario": ["movinv.zip"] } El manifiesto del paquete se nombre `movinv.manifest` - Se toma el arreglo con el id de paquete y se recorre para buscar el archivo `.manifest` del paquete. ``` --- # Comparación de Versiones El sistema compara: | Comparación | Acción | |---|---| | `manifest.version > local.version` | Ejecutar Deploy | | `manifest.schema_ver > db.schema_ver` | Ejecutar Install | --- # Lógica de Validación ## Validación de Versiones Ejemplo: | Local | Remota | Acción | |---|---|---| | 1.0.10 | 1.0.11 | Deploy | | 1.0.10 | 1.0.10 | Ninguna | | 1.0.10 | 1.0.9 | Ninguna | --- ## Validación de `schema_ver` Ejemplo: | BD | Remota | Acción | |---|---|---| | 1.0.10 | 1.0.11 | Install | | 1.0.10 | 1.0.10 | Ninguna | --- ## Escenarios contemplados | Error | Acción | |---|---| | No existe `manifest.json` | Cancelar proceso | | No existe `.manifest` local | Buscar en `catalog.json` | | Error de conexión a BD | Finalizar ejecución | | Manifest inválido | Registrar error | | Error en deploy/install | Registrar y continuar | --- # Resultado Esperado Al finalizar la ejecución: - Todos los paquetes V12 instalados estarán sincronizados. - El código fuente estará actualizado. - La estructura de base de datos estará alineada con las versiones publicadas. - Los manifiestos locales estarán actualizados respecto al repositorio remoto. ``` Ejemplo de uso: ./dkl updatev12.dkl "qname=conexion@app" "from=URL (opcional)" ```