🛠 Scripts y comandos del proyecto CORDIA
Este documento recoge los principales scripts disponibles para desarrollar, documentar, probar e implementar CORDIA.
- Scripts en raíz:
./run.sh,./run-service.sh,./deploy.sh,./deploy-prod.sh, etc. - Scripts utilitarios en
scripts/:./scripts/migrate.sh,./scripts/data-imports-run.sh,./scripts/docs-scribe-generate.sh,./scripts/tests-run-and-report.sh,./scripts/generate-reports-index.sh, etc.
📁 Estructura de scripts (principal)
./run.sh → Levanta todos los servicios (Docker Compose)
./run-service.sh → Levanta/gestiona un servicio concreto
./deploy.sh [entorno] → Clona/actualiza repo y levanta entorno (dev/test/pre/prod)
./deploy-prod.sh → Despliegue en producción (Alladixital)
./scripts/migrate.sh → Migraciones por módulos (opcional fresh/seed)
./scripts/data-imports-run.sh → Migraciones/seed + importadores de ficheros
./scripts/docs-scribe-generate.sh → Genera la documentación de API (Scribe)
./scripts/tests-run-and-report.sh → Ejecuta tests y genera informe HTML
./scripts/generate-reports-index.sh → Genera índice HTML para reportes JSON
Nota: Algunos utilitarios antiguos (
generate-docs.sh,test-report.sh,run-data-imports.sh) han sido reemplazados por los scripts enscripts/.
📚 Tabla rápida de scripts
| Script | Descripción | Uso corto |
|---|---|---|
./run.sh [entorno] [--rebuild] |
Orquesta servicios 'all' con run-service.sh | ./run.sh pre --rebuild |
./run-service.sh [entorno] [servicio|all] [--rebuild] |
Levanta servicios con docker compose | ./run-service.sh dev apilaravel |
./deploy.sh [entorno] |
Clona/actualiza repo y levanta entorno (dev/test/pre/prod) | ./deploy.sh pre |
./deploy-prod.sh |
Despliegue de rama prod en servidor destino |
./deploy-prod.sh |
./scripts/migrate.sh |
Migraciones por módulos (fresh/seed opcional) | ./scripts/migrate.sh --env=dev --fresh --seed |
./scripts/data-imports-run.sh |
Migraciones/seed + importadores desde storage/app/imports/ |
./scripts/data-imports-run.sh --env=test --import=dalla.csv |
./scripts/docs-scribe-generate.sh [entorno] |
Genera documentación de API (Scribe) | ./scripts/docs-scribe-generate.sh pre |
./scripts/tests-run-and-report.sh [entorno] |
Ejecuta tests y genera reporte HTML | ./scripts/tests-run-and-report.sh |
./scripts/generate-reports-index.sh [ruta] |
Índice HTML desde JSON de reportes | ./scripts/generate-reports-index.sh ../public/reports.cordia |
🧭 Convenciones de entorno y contenedores
- Contenedor Laravel:
cordia-apilaravel(servicio Compose:apilaravel). - Red Docker:
cordia_docker_net(externa). - Entornos:
dev,test,pre,prod. - Salidas:
- MkDocs devdocs:
public/devdocs.cordia/ - MkDocs docs:
public/docs.cordia/ - Swagger:
public/swagger.cordia/ - Reportes:
public/reports.cordia/
🆘 Formato de ayuda estándar
Todos los scripts soportan las banderas de ayuda: -h, --help o ?.
Salida típica:
./<script> -h
Uso: ./<script> [opciones]
Opciones:
...
Ejemplos:
...
🚀 Documentación técnica (MkDocs)
# Eliminar documentación generada previamente
sudo rm -R public/devdocs.cordia/
# Compilar y levantar MkDocs
./run-service.sh local mkdocs
# Forzar reconstrucción de imagen mkdocs
./run-service.sh local mkdocs --rebuild
# Compilar en entorno de test
./run-service.sh test mkdocs
Salida:
public/devdocs.cordia/(devdocs)public/docs.cordia/(docs)
📄 Documentación API (Scribe)
Ayuda (-h):
Uso: ./scripts/docs-scribe-generate.sh [entorno]
Genera la documentación de API (Scribe) dentro del contenedor 'cordia-apilaravel'.
Parámetros:
entorno dev | test | pre | prod (por defecto: dev)
-h, --help, ? Mostrar esta ayuda y salir
Ejemplos:
./scripts/docs-scribe-generate.sh # usa dev
./scripts/docs-scribe-generate.sh pre # usa pre
Comandos útiles:
# Encender contenedor Laravel si no está levantado
./run-service.sh local apilaravel
# Generar documentación (usa dev por defecto)
./scripts/docs-scribe-generate.sh
# Generar en pre
./scripts/docs-scribe-generate.sh pre
# Alternativa directa dentro del contenedor
docker compose exec apilaravel php artisan scribe:generate
🧩 Documentación base de datos (SchemaSpy)
./run-service.sh local schemaspy
Salida:
public/schema.cordia/
🧪 Tests (PHPUnit)
Ayuda (-h):
Uso: ./scripts/tests-run-and-report.sh [entorno]
Ejecuta los tests de Laravel dentro del contenedor y genera un informe HTML.
Parámetros:
entorno dev | test | pre | prod (por defecto: dev)
-h, --help, ? Mostrar esta ayuda y salir
Ejemplos:
./scripts/tests-run-and-report.sh # usa dev
./scripts/tests-run-and-report.sh test # usa test
Salida:
- HTML: public/tests.cordia/index.html
- XML JUnit dentro del contenedor: /public-tests/results.xml
Comandos útiles:
# Ejecutar todos los tests y generar HTML en dev
./scripts/tests-run-and-report.sh
# Ejecutar en test
./scripts/tests-run-and-report.sh test
# Salida HTML: public/tests.cordia/index.html
🌐 Frontend Vue
Modo desarrollo (recomendado)
cd app/admin-vue
npm install
npm run dev
Nota sobre Docker
- El servicio de frontend está actualmente comentado en
docker-compose.yml. - Si necesitas build de producción, utiliza:
cd app/admin-vue
npm install
npm run build
🧰 Servicios auxiliares (locales)
./run-service.sh local npm # Nginx Proxy Manager
./run-service.sh local uptime # Uptime Kuma
./run-service.sh local mysql # Base de datos
./run-service.sh local grafana # Grafana
./run-service.sh local proxy # Servidor NGINX para documentación
./run-service.sh local proxy --rebuild # Forzar reconstrucción del proxy
▶️ Orquestación de servicios
run.sh — Uso:
Uso: ./run.sh [dev|test|pre|prod] [--rebuild]
Descripción:
Orquesta servicios llamando a run-service.sh con 'all'.
Comportamiento:
- APP_ENV: dev por defecto.
- --rebuild: propaga a run-service.sh para forzar build y recreación.
Ejemplos:
./run.sh # dev, servicios 'all'
./run.sh pre # pre, servicios 'all'
./run.sh test --rebuild # test, build + recreate
run-service.sh — Uso:
Uso: ./run-service.sh [entorno] [servicio|all] [--rebuild]
Descripción:
Levanta un servicio concreto o todos, copiando .env y usando docker compose.
Detalles:
- Copia .env.<entorno> a app/api-laravel/.env si existe.
- Crea la red cordia_docker_net si no existe.
- Usa docker-compose.yml y, si existe, docker-compose.<entorno>.yml como override.
- Lanza 'docker compose up -d' con --build --force-recreate si se pasa --rebuild.
Ejemplos:
./run-service.sh local all
./run-service.sh dev apilaravel
./run-service.sh pre proxy --rebuild
⚙️ Despliegue
deploy.sh — Ayuda (-h):
Uso: ./deploy.sh [entorno]
Despliega el backend de CORDIA en el servidor local.
Parámetros:
entorno Entorno a usar: dev | test | pre | prod (por defecto: prod)
Ejemplos:
./deploy.sh # despliega en prod (por defecto)
./deploy.sh dev # despliega en dev
./deploy.sh pre # despliega en pre
./deploy.sh test # despliega en test
Notas:
- Espera a que Swagger (public/swagger.cordia/index.html) esté disponible.
- Reinicia el servicio 'proxy' al final con --rebuild.
deploy-prod.sh — Ayuda (-h):
Uso: ./deploy-prod.sh
Despliega la rama 'prod' del repositorio en el directorio configurado.
Parámetros:
(sin parámetros)
Ejemplos:
./deploy-prod.sh # actualiza y deja desplegada la rama prod
Notas:
- Usa una clave SSH específica (pull_ed25519) vía GIT_SSH_COMMAND.
- Ejecuta 'git fetch', 'git checkout prod' y 'git pull origin prod'.
Comandos rápidos:
# Clonar/actualizar y levantar entorno (prod por defecto)
./deploy.sh # prod
./deploy.sh dev # dev
./deploy.sh pre # pre
./deploy.sh test # test
# Despliegue en producción (Alladixital)
cd ~/cordia.alladixital.org
./deploy-prod.sh
🧱 Migraciones y seeders
Ayuda (-h):
Uso: ./scripts/migrate.sh [--fresh] [--seed] [--env=dev|test|pre|prod]
Ejecuta las migraciones por subcarpetas dentro del contenedor 'cordia-apilaravel'.
Opciones:
--fresh Ejecuta migrate:fresh antes de migrar
--seed Ejecuta los seeders después de migrar
--env=<entorno> dev | test | pre | prod
-h, --help, ? Mostrar esta ayuda y salir
Ejemplos:
./scripts/migrate.sh --env=dev --fresh --seed
./scripts/migrate.sh --env=test --seed
Comandos útiles:
# Fresh + seed en dev
./scripts/migrate.sh --env=dev --fresh --seed
# Solo migraciones + seed en test
./scripts/migrate.sh --env=test --seed
📥 Importación de datos y ejecución de importadores
Ayuda (-h):
Uso: ./scripts/data-imports-run.sh [--env=dev|test|pre|prod] [--import=f1.csv,f2.json,...] [--nofresh]
Ejecuta migraciones y seeders, y opcionalmente importaciones específicas dentro del contenedor 'cordia-apilaravel'.
Opciones:
--env=<entorno> dev | test | pre | prod (por defecto: dev)
--import=<lista> Lista separada por comas de archivos dentro de storage/app/imports/
--nofresh No ejecutar migrate:fresh; solo migraciones incrementales + seed
-h, --help, ? Mostrar esta ayuda y salir
Ejemplos:
./scripts/data-imports-run.sh --env=dev # fresh + seed en dev
./scripts/data-imports-run.sh --env=dev --nofresh # sin fresh
./scripts/data-imports-run.sh --env=test --import=dalla.csv # ejecuta cordia:parse-dalla-csv
./scripts/data-imports-run.sh --import=dalla.csv,otros.json # múltiples imports
Notas:
- Los archivos se buscan en storage/app/imports/ dentro del contenedor.
- El nombre del comando se construye como cordia:parse-<nombre>-<ext>.
- Requiere contenedor en ejecución: 'cordia-apilaravel'.
Comandos útiles:
# Migrar en dev (fresh) + seed
./scripts/data-imports-run.sh --env=dev
# Sin fresh (solo migraciones incrementales + seed)
./scripts/data-imports-run.sh --env=dev --nofresh
# Ejecutar importadores para ficheros concretos (dentro de storage/app/imports)
./scripts/data-imports-run.sh --env=test --import=dalla.csv
./scripts/data-imports-run.sh --import=dalla.csv,otros.json
Notas:
- Los archivos se buscan dentro del contenedor en
/var/www/html/storage/app/imports/. - Los comandos de importación se construyen como
cordia:parse-<nombre>-<ext>(ver integración más abajo).
🗂 Índice de reportes HTML desde JSON
Ayuda (-h):
Uso: ./scripts/generate-reports-index.sh [ruta_relativa_al_script]
Genera un índice HTML (y actualiza resumen.json) a partir de los JSON de reportes.
Parámetros:
ruta_relativa_al_script Carpeta con reportes; por defecto usa /reports
-h, --help, ? Mostrar esta ayuda y salir
Ejemplos:
./scripts/generate-reports-index.sh # usa /reports
./scripts/generate-reports-index.sh ../public/reports.cordia
Notas:
- Si defines WWWUSER, ajusta propietario y permisos de los .html generados.
Comandos útiles:
# Genera índice usando /reports (por defecto)
./scripts/generate-reports-index.sh
# Especificando carpeta relativa al script
./scripts/generate-reports-index.sh ../public/reports.cordia
🔄 Comandos Laravel útiles (dentro del contenedor)
# Asegurar contenedor levantado
./run-service.sh local apilaravel
# Artisan (recomendado)
docker compose exec apilaravel php artisan migrate
# Alternativa equivalente
docker exec cordia-apilaravel php artisan migrate
Los scripts que aceptan entorno usan
dev,test,preyprod.
📄 Detalle: cordia:parse-etymos_della-txt (revisión 1)
Este comando importa etimologías desde un fichero de texto plano etymos.txt, haciendo matching con entradas existentes y generando un reporte JSON.
Ruta del comando: app/api-laravel/app/Console/Commands/ParseEtymosDellaTxt.php
Uso
Dentro del contenedor Laravel (apilaravel):
# Usando la ruta por defecto
docker compose exec apilaravel php artisan cordia:parse-etymos_della-txt
# Indicando una ruta distinta
docker compose exec apilaravel php artisan cordia:parse-etymos_della-txt --path=storage/app/imports/etymos.txt
- Opción:
--path(por defectostorage/app/imports/etymos.txt). - Formato esperado por línea:
ETYMON: textodondetextocontiene el lemma y posibles alternativas/comentarios.
Dónde colocar el archivo en el host
El contenedor monta ./app/api-laravel en /var/www/html. Por tanto, coloca el fichero en:
- Host:
app/api-laravel/storage/app/imports/etymos.txt - Contenedor:
/var/www/html/storage/app/imports/etymos.txt
Ejemplo para crearlo en el host:
mkdir -p app/api-laravel/storage/app/imports
cat > app/api-laravel/storage/app/imports/etymos.txt << 'EOF'
*LATINUS: abruñar, comentario
GOTICUS: andar || andarín
PROTO: l' á 2
EOF
Qué hace
- Lee
etymos.txtlínea a línea. - Normaliza y extrae
lemma(primera alternativa antes de||, ignora comentarios tras,, recorta símbolos y normaliza espacios y numeraciones finales). - Busca matches en
entriesporlemma_formolemma_form_display(case-insensitive). - Inserta nuevas filas en
entry_etymologiessi no existe la misma PK (entry_etymology_id). - Genera un reporte JSON:
app/api-laravel/reports/etymos_import.jsoncon estadísticas, ambiguos, sin match y errores de parseo.
Estadísticas y reporte
El reporte incluye:
- lines_total, lines_parsed, matched_entries, unmatched, ambiguous, parse_errors, inserted.
- Tablas con lemmas ambiguos, sin match, líneas con errores y conteo de símbolos recortados.
Ver archivo: app/api-laravel/reports/etymos_import.json.
Notas y convenciones
- El comando usa
SOURCE_ID = 'DALLA'. Si procede, puede cambiarse a'DELLA'para mayor consistencia. - Idempotencia: se evita duplicados comprobando la clave primaria generada (
ETYM_<hash>). - Si no hay entradas en BD, la mayoría de líneas quedarán como "sin match". Ejecuta
migrate:fresh --seedsi quieres poblar datos de referencia en entorno de desarrollo.
docker compose exec -e SEED_ENV=dev apilaravel php artisan migrate:fresh --seed
Integración con scripts/data-imports-run.sh
El script construye nombres de comando tipo cordia:parse-<name>-<ext>. Para un archivo etymos.txt buscaría cordia:parse-etymos-txt. Nuestro comando se llama cordia:parse-etymos_della-txt; por tanto, al usar el script, especifica el archivo exacto y valida que el comando exista o ajusta el script si deseas un mapeo específico.