Dev to Develop#139
Conversation
…es in documentation and navbar
|
Caution Review failedThe pull request is closed. WalkthroughSe añaden páginas y componentes de tutoriales, scripts para generarlos y configurar el CMS, múltiples entradas de changelog (en y es), ajustes en la configuración de Docusaurus, nuevos targets en Makefile y cambios de estilos/tema y traducciones para soportar Tutorials y Changelog. Changes
Sequence Diagram(s)sequenceDiagram
participant Dev as Desarrollador/CI
participant GT as generate_tutorials.py
participant GC as generate_cms_config.py
participant FS as Filesystem (src/, static/)
participant D as Docusaurus build
Dev->>GT: Ejecutar (prestart/prebuild)
GT->>FS: Escribe src/data/tutorials-generated.json
Dev->>GC: Ejecutar (collections target / manual)
GC->>FS: Escribe static/admin/config.yml
Dev->>D: npm run start / npm run build
D->>FS: Consume src/data & static/admin para generar sitio estático
Note right of D: Resultado: /tutorials, CMS config y changelog disponibles
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 1 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
📜 Recent review detailsConfiguration used: Organization UI Review profile: CHILL Plan: Pro Disabled knowledge base sources:
📒 Files selected for processing (4)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 14
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
i18n/es/docusaurus-plugin-content-docs/current/changelog.mdx (3)
208-208: Error tipográfico en el texto.Falta la letra inicial "C" en "orrección". Además, hay un error ortográfico: "Cluster" debería llevar tilde como "Clúster" para mantener consistencia con el resto del documento.
🔧 Corrección propuesta
-- **Cluster con apagado nocturno:** orrección en el estado mostrado de clusters con apagado automático. +- **Clúster con apagado nocturno:** Corrección en el estado mostrado de clústeres con apagado automático.
209-209: Errores ortográficos y de consistencia.Múltiples problemas en esta línea:
- "grupo de variables" debería ser "Variable Groups" o "Grupos de Variables" (consistencia con el resto del documento)
- "Arreglo" es muy informal, debería ser "Corrección"
✏️ Corrección propuesta
-- **Filtros en grupo de variables:** Arreglo de filtro por proyecto en listado de group de variables +- **Filtros en Variable Groups:** Corrección de filtro por proyecto en listado de Variable Groups.
275-275: Error tipográfico en término de Kubernetes."PodDisruptionBudge" está mal escrito - el término correcto de Kubernetes es "PodDisruptionBudget" (con "t" al final).
🔨 Corrección propuesta
-- **Workers en Clúster de Desarrollo:** Se eliminó el PodDisruptionBudge el desescalado en entorno con apagado nocturno, mejorando la fiabilidad de los workers en entornos de desarrollo. +- **Workers en Clúster de Desarrollo:** Se eliminó el PodDisruptionBudget, mejorando el desescalado en entornos con apagado nocturno y la fiabilidad de los workers en entornos de desarrollo.
🤖 Fix all issues with AI agents
In @changelog/2024-01-12-V1.2.1.md:
- Line 4: El frontmatter en el archivo changelog/2024-01-12-V1.2.1.md tiene la
fecha incorrecta; reemplaza el valor del campo `date` que actualmente es
`2024-12-01` por `2024-01-12` para que coincida con el nombre del archivo y el
contenido, asegurando consistencia en el ordenamiento de los changelogs.
In @changelog/2025-11-10-V2.1.0.md:
- Around line 1-6: The frontmatter `date` field and the human-readable date in
the body are inconsistent (`date: 2025-11-10` vs body `11/05/2025`); update the
body to match the frontmatter using an unambiguous ISO format (e.g.,
`2025-11-10`) or remove the duplicate date so the frontmatter is the single
source of truth, and apply the same change to the other occurrence on lines
12-13.
In @changelog/2025-11-13-V2.2.0.md:
- Around line 1-12: The frontmatter date value `date: 2025-11-13` and the
in-body date string `10/25/2025` disagree; pick the correct release date, verify
whether the year should be 2024 or 2025, then update both the frontmatter `date:
...` and the in-body date string to the same ISO or localized format you choose
(e.g., `2024-10-25` or `2024-11-13`) so they match and reflect the confirmed
release year.
In @i18n/es/docusaurus-plugin-content-blog-changelog/2024-08-12-V1.6.0.md:
- Around line 23-24: Remove the two misplaced bullet lines ("Corrección de un
error al regenerar certificados, así como problemas con builds que no se
ejecutaban correctamente." and "Errores de frontend relacionados con listados y
problemas de API que causaban errores de filtrado han sido corregidos.") from
the "Nuevas Funcionalidades" section and ensure they remain only once under
"Correcciones de Errores" to avoid duplication.
In @package.json:
- Around line 7-8: The project currently runs "python3 generate_tutorials.py"
via the package.json "generate-tutorials" script and triggers it in the
"prestart" hook, but the base image (FROM node:20.18.0) in the Dockerfile does
not include Python; either install Python in the image or move generation out of
npm hooks: Option A — update the Dockerfile derived from FROM node:20.18.0 to
install python3 (and pip if needed) and ensure the tutorial script is copied
into the image before running yarn so "prestart" can run successfully; Option B
— remove the "prestart" hook that runs "npm run generate-tutorials" (and any
"prebuild" equivalent), add a Makefile target (e.g., "generate-tutorials") that
runs "python3 generate_tutorials.py" and update README to require running that
make target before npm start/build, keeping the package.json
"generate-tutorials" script only for local convenience.
In @src/components/Homepage/HomepageHeader.module.css:
- Around line 108-167: Add a prefers-reduced-motion media query that disables
the keyframe animations and transforms for users who request reduced motion:
inside the query set animation: none for the animation helper classes
(.animate-fade-in-up, .animate-fade-in-right, .animate-fade-in) and for the
hero-specific classes (.heroTitle, .heroSubtitle, .buttons) override opacity to
1 and transform to none so they render statically; also ensure the @keyframes
can remain but are not applied when prefers-reduced-motion is active.
In @src/components/Homepage/RecentTutorials.module.css:
- Around line 1-11: The fadeInUp keyframes use opacity:0 and transform which can
leave content hidden for users with reduced motion; add a prefers-reduced-motion
media query that disables the animation and forces the end state (e.g., set
animation: none on elements using fadeInUp and ensure opacity: 1 and transform:
none) so elements using @keyframes fadeInUp are visible when
prefers-reduced-motion: reduce; apply the same change for the other animation
block referenced (lines 53-74) and any selectors that assign the animation.
In @src/css/custom.css:
- Around line 34-38: Falta definir la variable --custom-text-primary en el
bloque de tema oscuro; añade --custom-text-primary (por ejemplo un tono claro
compatible con --custom-bg-color, p. ej. #e6edf3 o el mismo valor usado en el
tema claro) junto a las otras variables (--custom-background-color,
--custom-shadow-color, --custom-text-secondary, --custom-bg-color,
--custom-bg-header) dentro el bloque de variables oscuras para que el footer
(que usa --custom-text-primary en las reglas del footer) muestre texto con
suficiente contraste en modo oscuro.
In @src/data/tutorials-generated.json:
- Around line 45-66: Remove the two placeholder tutorial objects from the
generated JSON: delete the entries with "id": "nuevo-tutorial" and "id":
"nuevo-tutorial-1" (or replace them with real, validated tutorial data),
ensuring no test data remains (remove the nonsensical "description": "dsadas..."
and duplicate "title": "Nuevo tutorial") and avoid leaving "sidebar_position":
null for any production entries; update the generated source so subsequent
builds do not reintroduce these test records.
In @static/admin/index.html:
- Around line 10-13: Reemplazá la carga remota actual del script de Sveltia por
la versión inmutable incluyendo versión exacta (por ejemplo @0.72.1) en la URL,
calculá el hash SHA-384 del fichero publicado (ej.: usando curl ... | openssl
dgst -sha384 -binary | openssl base64 -A), y añadí al elemento <script> los
atributos integrity="sha384-[HASH_AQUI]" y crossorigin="anonymous" junto con la
nueva URL; esto asegura que el recurso cargado por la etiqueta <script
src="https://unpkg.com/@sveltia/cms@0.72.1/dist/sveltia-cms.js" ...> tenga SRI y
crossorigin configurados correctamente.
In @tutorials/nuevo-tutorial-1.mdx:
- Around line 1-11: El archivo de tutorial ("title: Nuevo tutorial") está
incompleto y contiene solo "Test" además de una imagen
(/img/cluster/cluster-settings-main-section.png) que no coincide con los tags
(nextjs, php, node); arreglalo o retiralo del PR: o bien completar el documento
añadiendo contenido útil (resumen, objetivos, pasos, ejemplos de código,
secciones para Next.js/PHP/Node según los tags) y actualizar frontmatter (title,
description, tags, image) para que la imagen refleje el contenido, o eliminar el
archivo si es solo un test; si preferís mantenerlo como borrador, crea un
placeholder claro en el body indicando "WIP" y abre un issue para trackeo.
In @tutorials/nuevo-tutorial.mdx:
- Around line 1-8: El archivo "tutorials/nuevo-tutorial.mdx" contiene texto
placeholder en el frontmatter (description) y en el body ("dsadas..."); quita el
contenido de placeholder reemplazándolo por un título/descripción y cuerpo
reales o elimina completamente el archivo si fue creado por error; specifically,
update the frontmatter fields (title, description, tags) and the page content to
meaningful tutorial text (or remove the file) so no placeholder strings remain
in title/description/body before merging.
In @tutorials/php-laravel.mdx:
- Around line 23-38: El Dockerfile ejecuta RUN composer install pero no instala
Composer; antes de la línea que corre composer install (referencia: RUN composer
install in the Dockerfile built FROM php:8.2-fpm-alpine) añade pasos para
instalar Composer (por ejemplo apk add --no-cache curl unzip && php -r
"copy('https://getcomposer.org/installer','composer-setup.php');" && php
composer-setup.php --install-dir=/usr/local/bin --filename=composer && rm
composer-setup.php) o alternativamente use una imagen base que ya incluya
Composer; asegúrate de instalar curl/unzip y dar permisos ejecutables para
/usr/local/bin/composer antes de ejecutar RUN composer install.�
🟡 Minor comments (26)
i18n/es/docusaurus-plugin-content-blog-changelog/2024-08-22-V1.6.1.md-17-17 (1)
17-17: ¡Ojo! Palabra en inglés metida en el texto español.En la línea 17 aparece "Dependencies" (inglés) en medio del texto en español. Hay que cambiarlo a "Dependencias" para mantener la coherencia del idioma.
🔧 Corrección propuesta
-- **Actualizaciones de Versión de Dependencies:** Actualizadas versiones de dependencies MQ, Elasticsearch, Memcache y Redis. +- **Actualizaciones de Versión de Dependencias:** Actualizadas versiones de dependencias MQ, Elasticsearch, Memcache y Redis.changelog/2025-07-07-V1.7.15.md-25-25 (1)
25-25: Corregí el typo en "Fiter".Hay un error de ortografía: "Fiter" debería ser "Filter".
✍️ Corrección propuesta
-- **VariableGroups filters:** Fiter by projects on variablegroups list +- **VariableGroups filters:** Filter by projects on variablegroups listchangelog/2025-11-18-V2.3.0.md-13-13 (1)
13-13: Ojo con el formato de fecha - hay que alinearlo con los demás!La fecha está en formato estadounidense (MM/DD/YYYY: 11/18/2025), mientras que los changelogs en español usan formato DD/MM/YYYY. Para mantener consistencia en toda la documentación, sería mejor usar el mismo formato en todos los changelog entries o usar el formato ISO (YYYY-MM-DD) que ya está en el frontmatter.
🔧 Ajuste sugerido para consistencia
-11/18/2025 +18/11/2025O alternativamente, usar el formato ISO del frontmatter:
-11/18/2025 +2025-11-18i18n/es/docusaurus-plugin-content-blog-changelog/2025-07-21-V1.7.16.md-16-21 (1)
16-21: Uniformemos el idioma - hay términos en inglés que se pueden traducir.En el changelog en español se están usando términos técnicos en inglés como "Projects", "Builds" y "Deployments". Para mantener consistencia y mejorar la experiencia del usuario hispanohablante, sería mejor usar sus equivalentes en español.
🌐 Propuesta de traducción para mayor consistencia
## Nuevas Funcionalidades -- **Projects con Repositorios Públicos:** Ahora puedes crear y gestionar proyectos vinculados a repositorios públicos. -- **Excluir Builds de Métricas:** Los builds pueden excluirse del dashboard de métricas de Grafana para reportes más precisos. +- **Proyectos con Repositorios Públicos:** Ahora puedes crear y gestionar proyectos vinculados a repositorios públicos. +- **Excluir Compilaciones de Métricas:** Las compilaciones pueden excluirse del dashboard de métricas de Grafana para reportes más precisos. ## Correcciones de Errores -- **Deployments de Nuevos Projects:** Corrección de problemas que impedían el despliegue exitoso de proyectos recién creados. +- **Despliegues de Nuevos Proyectos:** Corrección de problemas que impedían el despliegue exitoso de proyectos recién creados.changelog/2023-12-05-V1.1.1.md-12-12 (1)
12-12: Estandarizar formato de fechas en los changelogsHay una inconsistencia con los formatos de fecha en los changelogs:
2023-12-05-V1.1.1.mdusa05/12/2023(ambiguo)2024-01-25-V1.2.2.mdusa25/01/2024(DD/MM)2024-04-25-V1.4.2.mdusa04/25/2024(MM/DD)En sleakops arreglamos los conflictos a las piñas, así que les recomiendo estandarizar:
- ISO (YYYY-MM-DD) para evitar ambigüedad
- Mes en texto (ej. "5 de diciembre de 2023")
- Elegir un formato numérico y aplicarlo consistentemente a TODOS los changelogs
i18n/es/docusaurus-plugin-content-blog-changelog/2024-11-14-V1.7.3.md-17-17 (1)
17-17: Corregí el término en inglés en el contenido en español.Estás usando "dependencies" cuando deberías usar "dependencias". No mezclemos idiomas así nomás.
🌐 Corrección de localización
-- **Soporte para Oracle RDS (Beta):** Ahora puedes gestionar instancias Oracle RDS como dependencies dentro de SleakOps. +- **Soporte para Oracle RDS (Beta):** Ahora puedes gestionar instancias Oracle RDS como dependencias dentro de SleakOps.changelog/2024-09-19-V1.6.2.md-19-19 (1)
19-19: Corrección de formato/tipeo.Hay un error tipográfico: "I**t adopts" debería ser "It adopts". El formato de markdown se metió donde no debía.
🔧 Corrección propuesta
-- **Loki with SimpleScalable: I**t adopts a **SimpleScalable** structure with **TSDB** storage for logs, enhancing performance. +- **Loki with SimpleScalable:** It adopts a **SimpleScalable** structure with **TSDB** storage for logs, enhancing performance.changelog/2025-04-24-V1.7.11.md-22-22 (1)
22-22: Typo en "PodDisruptionBudget" - le falta la 't' y una coma 🥊El análisis estático lo detectó bien: "PodDisruptionBudge" debería ser "PodDisruptionBudget", y falta una coma después para separar las cláusulas.
🐛 Fix propuesto
-- **Dev-Cluster Workers:** Removed the PodDisruptionBudge improving worker reliability in development clusters when the cluster had the scheduler shutdown enabled. +- **Dev-Cluster Workers:** Removed the PodDisruptionBudget, improving worker reliability in development clusters when the cluster had the scheduler shutdown enabled.changelog/2025-04-24-V1.7.11.md-18-18 (1)
18-18: Espacio extra antes del colon ✂️Hay un espacio de más antes de los dos puntos en el título.
🔧 Fix propuesto
-- **Stronger Secret Management :** All secrets are now also stored encrypted in AWS Systems Manager Parameter Store, adding an extra layer of durability beyond the in-cluster copy. +- **Stronger Secret Management:** All secrets are now also stored encrypted in AWS Systems Manager Parameter Store, adding an extra layer of durability beyond the in-cluster copy.Makefile-36-40 (1)
36-40: Inconsistencia en ejecución: Python directo vs docker composeLos targets
collectionsytutorialsejecutan scripts Python localmente conpython3, mientras que todos los demás comandos usandocker compose. Aunque los scripts solo usan la librería estándar de Python, esto genera una inconsistencia en el flujo de trabajo.Considera documentar o estandarizar:
- Si estos scripts deben ejecutarse localmente: agrega un comentario en el Makefile indicando que requieren
python3instalado, o documenta los requisitos en el README.- Si prefieres consistencia total con docker: ten en cuenta que la imagen
docestá basada en Node.js. Ejecutarlos dentro de docker requeriría agregar Python a esa imagen o crear un servicio Python separado, lo que podría ser overhead innecesario para scripts tan simples.La inconsistencia es menor pero conviene resolverla de forma deliberada para evitar sorpresas a otros desarrolladores.
changelog/2024-12-09-V1.7.5.md-16-16 (1)
16-16: Typo: doble dos puntos en el título.Hay un doble dos puntos (
::) después de "Error Handling". ¡Un pequeño golpe al teclado y listo!✏️ Corrección
-- **AWS Integration Error Handling:**: Implemented a mechanism to handle delays in AWS account activations created by SleakOps. +- **AWS Integration Error Handling:** Implemented a mechanism to handle delays in AWS account activations created by SleakOps.i18n/es/docusaurus-plugin-content-blog-changelog/2024-10-30-V1.7.1.md-19-19 (1)
19-19: ¡Ojo al piojo! "dependencies" debería ser "dependencias" 🥊Se coló una palabrita en inglés que tiene traducción directa. A diferencia de términos técnicos como "Environment" que refieren a conceptos específicos del producto, "dependencies" se traduce sin problemas.
🔧 Arreglo propuesto
-- **Documentación:** Actualizada documentación sobre gestión de dominios, proyectos, dependencies y variables de entorno. +- **Documentación:** Actualizada documentación sobre gestión de dominios, proyectos, dependencias y variables de entorno.changelog/2024-08-12-V1.6.0.md-22-23 (1)
22-23: Contenido duplicado: Bug fixes aparecen dos veces.Estas líneas son correcciones de errores que ya aparecen en la sección "Bug Fixes" (líneas 27-28). Están duplicadas y ubicadas incorrectamente bajo "New Features". ¡A las piñas con la duplicación! 🥊
🔧 Fix propuesto: Eliminar las líneas duplicadas
- **Healthcheck Parameterization:** Healthcheck properties can now be parameterized with JSONSchema. - **New Dashboard:** A new dashboard has been added to view consumption by namespace. -- Fixed an error when regenerating certificates, as well as issues with builds not running properly. -- Frontend errors related to listing and API problems that caused filtering errors have been corrected. ## Bug Fixesi18n/es/docusaurus-plugin-content-blog-changelog/2024-12-09-V1.7.5.md-16-16 (1)
16-16: Typo: Doble dos puntos en el título.Hay un error tipográfico con dos puntos duplicados en "AWS::**". ¡A las piñas con ese typo! 🥊
🔧 Fix propuesto
-- **Manejo de Errores de Integración AWS:**: Implementado un mecanismo para manejar retrasos en activaciones de cuentas AWS creadas por SleakOps. +- **Manejo de Errores de Integración AWS:** Implementado un mecanismo para manejar retrasos en activaciones de cuentas AWS creadas por SleakOps.i18n/es/docusaurus-plugin-content-docs/current/changelog.mdx-207-207 (1)
207-207: Corrección ortográfica necesaria.Falta la letra mayúscula inicial y hay un espacio faltante en "Dominios dependientes Genera registros...". Debería ser: "Configuración de dominios dependientes: Genera registros DNS automáticos cuando existe un dominio padre ya creado."
📝 Corrección propuesta
-- **Dominios dependientes** Genera registros DNS automaticos cuando existe un dominio ya creado. +- **Configuración de dominios dependientes:** Genera registros DNS automáticos cuando existe un dominio padre ya creado.i18n/es/docusaurus-plugin-content-docs/current/changelog.mdx-370-370 (1)
370-370: Error de concordancia verbal.El verbo "agrega" (singular) no concuerda con el complemento "los links" (plural). Además, falta tilde en "métricas".
⚙️ Corrección propuesta
-- **Links de addons en build:** Se agrega los links para poder ver logs y metricas en los builds. +- **Links de addons en build:** Se agregan los links para poder ver logs y métricas en los builds.i18n/es/docusaurus-plugin-content-docs/current/changelog.mdx-210-211 (1)
210-211: Falta de consistencia en terminología.Las líneas usan "Arreglo" en lugar de "Corrección", lo cual es inconsistente con el resto del documento que utiliza terminología más formal.
🔄 Correcciones propuestas
-- **Eliminacion de cluster:** Arreglo de flujo de eliminación de cluster -- **Estados de tickets de soporte:** Arreglo de transicion de estados en tickets de soporte. +- **Eliminación de Clúster:** Corrección del flujo de eliminación de Clúster. +- **Estados de tickets de soporte:** Corrección de transición de estados en tickets de soporte.tutorials/php-laravel.mdx-16-16 (1)
16-16: Error ortográfico: "Prerequisitos" 📝La palabra correcta en español es "Prerrequisitos" (con doble 'r').
✏️ Fix propuesto
-## Prerequisitos +## Prerrequisitostutorials/nextjs-deploy.mdx-16-16 (1)
16-16: Corregir error ortográfico."Prerequisitos" está mal escrito. La forma correcta es "Prerrequisitos".
✍️ Corrección sugerida
-## Prerequisitos +## Prerrequisitosi18n/es/docusaurus-plugin-content-blog-changelog/2024-03-01-V1.3.0.md-16-16 (1)
16-16: Corregir palabra en inglés en texto español.La palabra "Project" debe estar en español. Debería ser "Proyecto" para mantener la consistencia del idioma en todo el documento.
🔧 Corrección sugerida
-- **Vista de Detalles de Project:** Una vista detallada de proyecto ahora está disponible en la nueva interfaz. +- **Vista de Detalles de Proyecto:** Una vista detallada de proyecto ahora está disponible en la nueva interfaz.tutorials/nextjs-deploy.mdx-43-44 (1)
43-44: Corregir el enlace incorrecto al documento de dominio personalizado.El enlace en la línea 44 apunta a
/docs/environment, pero ese documento trata sobre la configuración de ambientes como espacios aislados, no sobre dominios personalizados. El enlace debería ser/docs/domain/setup, que es el documento específico sobre configuración y delegación de dominios.
- Línea 43:
/docs/project/vargroupes correcto ✓- Línea 44: Cambiar
/docs/environment→/docs/domain/setupdocs/index.mdx-115-115 (1)
115-115: Inconsistencia en el formato del href 🔗El link de Workloads usa path absoluto (
/project/workload) mientras que todos los demás cards usan paths relativos (ej:project/dependency,project/deployment).Esto podría causar comportamiento inesperado dependiendo de la configuración del base URL. Mantené la consistencia - ¡en SleakOps no dejamos cabos sueltos!
🔧 Fix sugerido
- <a href="/project/workload">Getting Started</a> + <a href="project/workload">Getting Started</a>docs/index.mdx-120-127 (1)
120-127: ¡Ey! Falta la descripción de Deployments⚠️ La descripción del card de Deployments es solo "..." (línea 125). Esto se ve incompleto y poco profesional para los usuarios. ¡Hay que rellenar eso antes de que alguien lo vea!
✏️ Propuesta de descripción
<div className="card"> <div className="card-header"> <VscRocket /> <h4>Deployments</h4> </div> - <p>...</p> + <p>Manage and track the deployment of your applications across environments.</p> <a href="project/deployment">Getting Started</a> </div>tutorials/node-api.mdx-15-19 (1)
15-19: “Prerequisitos” → “Prerrequisitos” (ortografía).
Coincide con el aviso de LanguageTool.Propuesta
-## Prerequisitos +## Prerrequisitossrc/data/tutorials.js-14-21 (1)
14-21: Actualizar el mensaje de advertencia con la ruta correcta del scriptEl mensaje en línea 18 es incorrecto. El script generador es
generate_tutorials.py(Python) ubicado en la raíz del proyecto, noscripts/generate-tutorials.js. Según elpackage.json, el comando correcto esnpm run generate-tutorials, que ejecutapython3 generate_tutorials.py.Cambiar:
"tutorials-generated.json not found. Run: node scripts/generate-tutorials.js"A una de estas opciones:
"tutorials-generated.json not found. Run: npm run generate-tutorials"O si prefieres ser explícito:
"tutorials-generated.json not found. Run: python3 generate_tutorials.py"docusaurus.config.js-13-13 (1)
13-13:onBrokenLinks: "warn"- links rotos no van a romper el build.Cambiar de
"throw"a"warn"significa que links rotos ya no fallan el build. Puede ser útil temporalmente durante desarrollo, pero en producción te pueden quedar 404s sin darte cuenta.¿Es temporal o permanente? Si es temporal, dejá un TODO para volver a
"throw".
🧹 Nitpick comments (31)
i18n/es/docusaurus-plugin-content-blog-changelog/2024-08-22-V1.6.1.md (1)
15-21: Considerá revisar las mayúsculas en los encabezados.LanguageTool sugiere correcciones de mayúsculas en los encabezados y títulos de las secciones. En español, generalmente se usa mayúscula solo en la primera palabra, a diferencia del inglés que capitaliza cada palabra (title case).
Ejemplos sugeridos:
- "Nuevas Funcionalidades" → "Nuevas funcionalidades"
- "Correcciones de Errores" → "Correcciones de errores"
Esto es más una cuestión de estilo que un error crítico, pero ayuda a mantener las convenciones del español. Si tienen un estándar de capitalización definido en el proyecto, ignorá este comentario.
i18n/es/docusaurus-plugin-content-blog-changelog/2025-01-06-V1.7.6.md (1)
1-25: Changelog bien completo, todo en orden.El contenido está bien estructurado y detallado. Las sugerencias de LanguageTool sobre capitalización son falsos positivos - los encabezados están correctos para documentación en español.
Pequeño detalle opcional en línea 17: podrías cambiar "ej:" por "p. ej.:" para ser más formal, pero es un nitpick.
✨ Refinamiento opcional de puntuación
-- **Job con Imágenes Específicas**: Al crear un job, puedes especificar la imagen exacta y el tag que deseas ejecutar (ej: `postgres:16.4`). +- **Job con Imágenes Específicas**: Al crear un job, puedes especificar la imagen exacta y el tag que deseas ejecutar (p. ej.: `postgres:16.4`).changelog/2024-06-24-V1.5.1.md (1)
12-12: Inconsistencia en el formato de fecha - a unificar antes de que haya piñas.El formato de fecha aquí es
06/24/2024(MM/DD/YYYY), mientras que enchangelog/2024-10-14-V1.7.0.mdse usa14/10/2024(DD/MM/YYYY). Esta inconsistencia puede confundir a los usuarios. Unificar el formato en todos los changelogs para mantener coherencia.changelog/2025-12-19-V2.3.2.md (2)
10-12: Falta la fecha formateada - aquí nos falta uniformidad y la arreglamos a las piñas.Este changelog no tiene una línea de fecha formateada después del
<!--truncate-->, mientras que los otros archivos (V1.5.1 y V1.7.0) sí la incluyen. Agregar la fecha formateada para mantener consistencia con el resto de los changelogs.Ejemplo:
<!--truncate--> +12/19/2025 + ## New Features
29-29: Inconsistencia en el formato de la sección - los dos puntos sobran.Esta sección usa
## Bug Fixes:con dos puntos, mientras que los otros changelogs usan## Bug Fixessin los dos puntos. Unificar el formato para mantener coherencia.🔧 Propuesta de corrección
-## Bug Fixes: +## Bug Fixeschangelog/2025-10-01-V2.0.0.md (2)
21-27: Consolidá estas líneas repetitivas para mejorar la legibilidad.Tenés seis elementos consecutivos con la misma estructura "Promoted to stable". Considerá agruparlos en una sola entrada de lista para evitar la redundancia.
♻️ Refactorización sugerida
-- **Project Chart:** Promoted to stable. -- **Project Access:** Promoted to stable. -- **Dependency Aurora MySQL:** Promoted to stable. -- **Dependency Oracle:** Promoted to stable. -- **Dependency MariaDB:** Promoted to stable. -- **Dependency Aurora PostgreSQL:** Promoted to stable. +- **Promoted to stable:** Project Chart, Project Access, Aurora MySQL, Oracle, MariaDB, and Aurora PostgreSQL dependencies.
31-31: Verificá la terminología de "Webservices".El término estándar en la industria es "Web Services" (dos palabras). Asegurate de que la capitalización sea consistente con la documentación oficial de la plataforma.
changelog/2025-10-15-V2.0.1.md (1)
13-13: Inconsistencia en formato de fechas entre changelogs en inglés.Acá usás formato estadounidense
10/15/2025(MM/DD/YYYY), pero enchangelog/2024-02-15-V1.2.4.mdusaron formato internacional15/02/2024(DD/MM/YYYY). Unifiquen el formato para evitar confusiones - recomiendo el formato internacional DD/MM/YYYY que es más común fuera de Estados Unidos.📅 Formato recomendado
-10/15/2025 +15/10/2025changelog/2024-05-23-V1.5.0.md (1)
24-27: Considera separar los bug fixes para mayor claridad.En la línea 26 estás metiendo dos fixes diferentes en un solo bullet:
- Error al crear dependencias S3
- Problema crítico con vargroups durante actualizaciones de cluster shutdown
Mejor sepáralos en bullets individuales para que sea más fácil de leer y trackear. Así cada fix tiene su propio protagonismo.
♻️ Refactor sugerido
## Bug Fixes -- Fixed an error when creating S3 dependencies and solved a critical problem with vargroups during cluster shutdown updates. +- Fixed an error when creating S3 dependencies. +- Solved a critical problem with vargroups during cluster shutdown updates. - Fixed a critical error when inviting collaborators.i18n/es/docusaurus-plugin-content-blog-changelog/2024-03-06-V1.4.0.md (1)
8-11: Línea en blanco extra.Hay una línea en blanco de más (línea 10) entre el título y el
<!--truncate-->. Los otros changelogs no la tienen. No es grave, pero si querés mantener consistencia, sacala.🔧 Fix sugerido
# 🚀 Versión 1.4.0 - <!--truncate-->i18n/es/docusaurus-plugin-content-blog-changelog/2025-10-01-V2.0.0.md (1)
37-37: "Cluster" vs "clúster".Si querés ser más purista con el español, la RAE acepta "clúster". Pero honestamente, en documentación técnica "Cluster" está bien y es más reconocible. Dejalo como quieras, esto es un nit.
i18n/es/docusaurus-plugin-content-blog-changelog/2024-09-19-V1.6.2.md (1)
8-11: Línea en blanco extra (opcional).Hay una línea en blanco adicional (línea 10) entre el título y el marcador
<!--truncate-->. Los otros archivos de changelog (V2.1.0 y V1.7.4) no tienen esta línea extra. Por consistencia visual, podrías eliminarla, aunque no afecta la funcionalidad.♻️ Ajuste sugerido para consistencia
# 🚀 Versión 1.6.2 - <!--truncate-->src/components/TutorialCard/TutorialCard.module.css (1)
13-25: Ojo con la accesibilidad: las cards podrían quedar invisibles 👻La card arranca con
opacity: 0y depende de la animaciónfadeInUppara hacerse visible. Si un usuario tieneprefers-reduced-motionhabilitado, la animación podría no ejecutarse correctamente y las cards quedarían invisibles.♻️ Propuesta para manejar prefers-reduced-motion
.tutorialCard { display: flex; flex-direction: column; border-radius: 8px; overflow: hidden; text-decoration: none; transition: transform 0.2s, box-shadow 0.3s, background-color 0.5s ease; box-shadow: 0 2px 8px var(--custom-shadow-color); border: 1px solid rgba(0, 0, 0, 0.1); background-color: var(--ifm-navbar-background-color); opacity: 0; animation: fadeInUp 0.6s ease-out both; } + +@media (prefers-reduced-motion: reduce) { + .tutorialCard { + opacity: 1; + animation: none; + } +}changelog/2025-04-24-V1.7.11.md (1)
26-26: Falta el punto final 📝Para mantener la consistencia con las otras entradas, agregaría un punto al final.
✏️ Fix propuesto
-- **Kubecost Add-on:** Stability improvements +- **Kubecost Add-on:** Stability improvements.src/css/custom.css (1)
108-110: Considerar usar variable CSS en lugar de color hardcodeado.El bloque
detailstiene un color de fondo hardcodeado (#1a202c) que no se adapta al tema claro. Para mantener consistencia entre temas, considera usar una variable CSS.♻️ Sugerencia de refactor
details { - background: #1a202c !important; + background: var(--ifm-navbar-background-color) !important; }i18n/es/docusaurus-plugin-content-blog-changelog/2023-10-27-V1.0.5.md (1)
14-14: Revisar capitalización del encabezado.El analizador estático sugiere que "Errores" debería ser "errores" (minúscula), ya que en español normalmente solo se capitaliza la primera palabra de los títulos. Sin embargo, si el estilo del proyecto prefiere capitalización tipo título (Title Case), ignora este comentario. ¡No vale la pena ir a las piñas por esto!
✏️ Opción de corrección
-## Correcciones de Errores +## Correcciones de erroreschangelog/2025-05-14-V1.7.12.md (1)
8-11: Línea en blanco extra, un detalle menor 👀Hay una línea en blanco adicional (línea 10) entre el título y el marcador
<!--truncate-->. Para mantener consistencia con los otros changelogs, sería bueno quitarla.✨ Fix propuesto
# 🚀 Version 1.7.12 - <!--truncate-->src/pages/index.js (1)
7-12: El refactor está bien, pero considera agregar meta tags por página para SEO más específicoLa refactorización está prolija y modular. El componente
Layoutno recibetitleydescriptionprops, pero el SEO ya está cubierto por:
- Configuración global en
docusaurus.config.js(title, tagline, sitemap, googleAnalytics)- Patrón consistente con otras páginas del proyecto (como
tutorials/index.js)Sin embargo, si querés SEO más específico por página, podés opcionalmente agregar:
🔧 Mejora opcional: agregar meta tags específicos
- <Layout> + <Layout + title="Home" + description="Empowering your business with scalable, secure, and efficient infrastructure solutions.">No es crítico, pero es una buena práctica si querés que la homepage tenga meta tags propios.
src/components/TutorialCard/index.jsx (1)
17-21: Valor por defecto debuttonLabelen inglés - potencial problema de i18n 🌍El valor por defecto
"View Tutorial"está hardcodeado en inglés. Si el componente se usa sin pasarbuttonLabel, usuarios de otros idiomas verán texto en inglés.Considerá usar
translatede Docusaurus para el valor por defecto, o asegurate de que siempre se pase el prop desde el componente padre con la traducción correspondiente.♻️ Propuesta de mejora con translate
+import { translate } from "@docusaurus/Translate"; + +const defaultButtonLabel = translate({ + id: "tutorialCard.viewTutorial", + message: "View Tutorial", +}); + export default function TutorialCard({ tutorial, animationDelay = 0, - buttonLabel = "View Tutorial", + buttonLabel = defaultButtonLabel, }) {tutorials/node-api.mdx (3)
1-9: Unificar idioma en el frontmatter (ahora está mixto ES/EN).
sidebar_labelestá en ES, perotitle/descriptionestán en EN; en una guía en español esto suele acabar en UX inconsistente (SEO, tarjetas, sidebar). En SleakOps arreglamos los conflictos a las piñas, pero aquí mejor sin mezclar idiomas.Propuesta (ejemplo)
title: "Node.js API with Express" -description: "Build and deploy a RESTful API using Node.js and Express framework." +description: "Crea y despliega una API RESTful usando Node.js y Express."
22-31: Snippet Express: definePORTy añade callback/log (mejor DX).
Ahora se “come” silenciosamente el arranque; para tutoriales suele ayudar a validar que está escuchando.Propuesta
const express = require("express"); const app = express(); +const PORT = process.env.PORT || 3000; app.get("/api/health", (req, res) => { res.json({ status: "ok" }); }); -app.listen(process.env.PORT || 3000); +app.listen(PORT, () => console.log(`Listening on :${PORT}`));
35-43: Dockerfile:npm ci --only=productionmejor cambiarlo a--omit=dev(npm moderno).
En npm recientes--only=productiones más legacy/menos claro;--omit=deves el flag recomendado hoy.Propuesta
-RUN npm ci --only=production +RUN npm ci --omit=devsrc/components/Homepage/HomepageHeader.module.css (1)
22-28: Consolidar selectores duplicados (.heroTitle,.heroSubtitle,.buttons) para evitar mantenimiento frágil.
Ahora están definidos en dos bloques; funciona, pero se vuelve fácil romper estilos al tocar uno de ellos.Propuesta (merge)
.heroTitle { font-size: 3rem; font-weight: 700; margin-bottom: 1rem; text-align: left; line-height: 1.2; + opacity: 0; + animation: fadeInUp 0.8s ease-out 0.2s forwards; } @@ .heroSubtitle { font-size: 1.25rem; text-align: left; margin-bottom: 2rem; max-width: 600px; + opacity: 0; + animation: fadeIn 0.8s ease-out 0.6s forwards; } @@ .buttons { display: flex; align-items: center; justify-content: flex-start; gap: 1rem; flex-wrap: wrap; flex-shrink: 0; + opacity: 0; + animation: fadeInRight 0.8s ease-out 0.8s forwards; } @@ -/* Hero animations */ -.heroTitle { - opacity: 0; - animation: fadeInUp 0.8s ease-out 0.2s forwards; -} - -.heroSubtitle { - opacity: 0; - animation: fadeIn 0.8s ease-out 0.6s forwards; -} - -.buttons { - opacity: 0; - animation: fadeInRight 0.8s ease-out 0.8s forwards; -} +/* Hero animations (merged into base selectors above) */Also applies to: 152-166
src/components/Homepage/RecentTutorials.jsx (2)
8-20: El componente se llama “RecentTutorials” pero ordena porfeatured(no por recencia).
Si la intención es “Destacados”, renombraría el copy/ids; si es “Recientes”, necesitáis un campo tipodate/publishedAty ordenar por eso.
10-14: Micro: podrías memoizar el sort/map para evitar trabajo en cada render.
No parece crítico (son pocos items), pero conuseMemoqueda limpio.Also applies to: 46-53
src/data/tutorials.js (1)
59-62: Considerar validación deidengetTutorialLink. 🥊La función asume que siempre recibirá un
idválido. Aunque es simple, podría beneficiarse de una validación mínima para evitar URLs malformadas como/tutorial/undefinedo/tutorial/null.♻️ Sugerencia opcional de validación
// Helper function to get the tutorial link export function getTutorialLink(id) { + if (!id) { + console.warn('getTutorialLink called with invalid id:', id); + return '/tutorials'; + } return `/tutorial/${id}`; }src/pages/tutorials/styles.module.css (2)
64-72: Considerar usar variables CSS en lugar de colores hardcodeados. 🥊El color
#000en línea 71 está hardcodeado. Para mantener consistencia con el sistema de theming y facilitar cambios futuros, sería mejor usar una variable CSS.♻️ Sugerencia de variable CSS
[data-theme="light"] .filterTagSelected { - color: #000; + color: var(--ifm-font-color-base); }
135-152: Colores hardcodeados en.cardpodrían usar variables. 🥊Las líneas 141 (
#00000060) y 151 (#ffffff10) usan valores hardcodeados con transparencia. Para mejor mantenibilidad y consistencia con el theming, considera extraer estos a variables CSS o usar las existentes.♻️ Sugerencia de mejora
.card { display: flex; flex-direction: column; width: 100%; border-radius: 8px; overflow: hidden; - border: 1px solid #00000060; + border: 1px solid var(--ifm-color-emphasis-300); background: var(--ifm-navbar-background-color); transition: all 0.3s ease, background-color 0.5s ease; box-shadow: 0 2px 8px var(--custom-shadow-color); } .card:hover { transform: translateY(-4px); box-shadow: 0 12px 24px var(--custom-shadow-color); border-color: var(--ifm-color-primary); - background-color: #ffffff10; + background-color: var(--ifm-color-emphasis-100); }src/pages/tutorials/index.js (1)
5-10: ImportaciónTagssin usar - a limpiar.La importación de
Tagsen la línea 7 no se utiliza en ninguna parte del archivo. Esto genera ruido innecesario en el código.🧹 Eliminación del import no utilizado
import { TagList, - Tags, tutorialsList, getTutorialLink, } from "@site/src/data/tutorials";generate_tutorials.py (1)
18-78: Parser YAML casero - funciona, pero PyYAML es más robusto.El parser de frontmatter funciona para casos simples, pero es frágil ante:
- Strings multilínea con
|o>- Estructuras YAML anidadas
- Caracteres especiales sin escapar
Si el frontmatter siempre será simple, está bien. Pero si querés más tranquilidad a futuro, PyYAML te evita dolores de cabeza.
♻️ Alternativa con PyYAML
import os import re import json +import yaml from pathlib import Path def parse_frontmatter(content: str) -> dict: """Parse YAML frontmatter from MDX content.""" frontmatter_match = re.match(r'^---\s*\n([\s\S]*?)\n---', content) if not frontmatter_match: return {} - frontmatter = {} - lines = frontmatter_match.group(1).split('\n') - # ... todo el parser manual ... - return frontmatter + try: + return yaml.safe_load(frontmatter_match.group(1)) or {} + except yaml.YAMLError: + return {}Requiere agregar
pyyamla las dependencias del proyecto.generate_cms_config.py (1)
111-111: Variablefilessin usar en el loop.El linter lo detectó bien. Renombrá a
_filespara indicar que es intencional.🧹 Fix rápido
- for root, dirs, files in os.walk(DOCS_ROOT): + for root, dirs, _files in os.walk(DOCS_ROOT):
| --- | ||
| title: "Version 1.2.1" | ||
| slug: v1-2-1 | ||
| date: 2024-12-01 |
There was a problem hiding this comment.
Fecha incorrecta en el frontmatter - hay que agarrarlo a las piñas.
La fecha en el frontmatter dice 2024-12-01 (1 de diciembre 2024), pero el nombre del archivo y el contenido indican 2024-01-12 (12 de enero 2024). Esta inconsistencia va a causar problemas con el ordenamiento de los changelogs.
🔧 Arreglo propuesto
-date: 2024-12-01
+date: 2024-01-12📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| date: 2024-12-01 | |
| date: 2024-01-12 |
🤖 Prompt for AI Agents
In @changelog/2024-01-12-V1.2.1.md at line 4, El frontmatter en el archivo
changelog/2024-01-12-V1.2.1.md tiene la fecha incorrecta; reemplaza el valor del
campo `date` que actualmente es `2024-12-01` por `2024-01-12` para que coincida
con el nombre del archivo y el contenido, asegurando consistencia en el
ordenamiento de los changelogs.
| --- | ||
| title: "Version 2.1.0" | ||
| slug: v2-1-0 | ||
| date: 2025-11-10 | ||
| tags: [release] | ||
| --- |
There was a problem hiding this comment.
Fecha inconsistente: frontmatter date: 2025-11-10 pero el cuerpo muestra 11/05/2025.
Esto es ambiguo (¿11 mayo o 5 noviembre?) y además contradice el nombre del fichero. Yo dejaría una sola fuente de verdad (frontmatter) o pondría ISO también en el cuerpo.
Propuesta (mínima)
-11/05/2025
+2025-11-10Also applies to: 12-13
🤖 Prompt for AI Agents
In @changelog/2025-11-10-V2.1.0.md around lines 1 - 6, The frontmatter `date`
field and the human-readable date in the body are inconsistent (`date:
2025-11-10` vs body `11/05/2025`); update the body to match the frontmatter
using an unambiguous ISO format (e.g., `2025-11-10`) or remove the duplicate
date so the frontmatter is the single source of truth, and apply the same change
to the other occurrence on lines 12-13.
| --- | ||
| title: "Version 2.2.0" | ||
| slug: v2-2-0 | ||
| date: 2025-11-13 | ||
| tags: [release] | ||
| --- | ||
|
|
||
| # 🚀 Version 2.2.0 | ||
|
|
||
| <!--truncate--> | ||
|
|
||
| 10/25/2025 |
There was a problem hiding this comment.
¡Fechas que no coinciden! Esto hay que arreglarlo a las piñas.
Tenés un desastre de fechas acá:
- Frontmatter (línea 4):
date: 2025-11-13(13 de noviembre) - Contenido (línea 12):
10/25/2025(25 de octubre)
Son meses diferentes. Decidí cuál es la fecha correcta del release y unificala en ambos lugares. Y de paso verificá si no debería ser 2024 en lugar de 2025.
🔧 Propuesta de corrección
Si la fecha correcta es 25 de octubre de 2024:
---
title: "Version 2.2.0"
slug: v2-2-0
-date: 2025-11-13
+date: 2024-10-25
tags: [release]
---
# 🚀 Version 2.2.0
<!--truncate-->
-10/25/2025
+10/25/2024O si es 13 de noviembre de 2024:
---
title: "Version 2.2.0"
slug: v2-2-0
-date: 2025-11-13
+date: 2024-11-13
tags: [release]
---
# 🚀 Version 2.2.0
<!--truncate-->
-10/25/2025
+11/13/2024📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| --- | |
| title: "Version 2.2.0" | |
| slug: v2-2-0 | |
| date: 2025-11-13 | |
| tags: [release] | |
| --- | |
| # 🚀 Version 2.2.0 | |
| <!--truncate--> | |
| 10/25/2025 | |
| --- | |
| title: "Version 2.2.0" | |
| slug: v2-2-0 | |
| date: 2024-10-25 | |
| tags: [release] | |
| --- | |
| # 🚀 Version 2.2.0 | |
| <!--truncate--> | |
| 10/25/2024 |
| --- | |
| title: "Version 2.2.0" | |
| slug: v2-2-0 | |
| date: 2025-11-13 | |
| tags: [release] | |
| --- | |
| # 🚀 Version 2.2.0 | |
| <!--truncate--> | |
| 10/25/2025 | |
| --- | |
| title: "Version 2.2.0" | |
| slug: v2-2-0 | |
| date: 2024-11-13 | |
| tags: [release] | |
| --- | |
| # 🚀 Version 2.2.0 | |
| <!--truncate--> | |
| 11/13/2024 |
🤖 Prompt for AI Agents
In @changelog/2025-11-13-V2.2.0.md around lines 1 - 12, The frontmatter date
value `date: 2025-11-13` and the in-body date string `10/25/2025` disagree; pick
the correct release date, verify whether the year should be 2024 or 2025, then
update both the frontmatter `date: ...` and the in-body date string to the same
ISO or localized format you choose (e.g., `2024-10-25` or `2024-11-13`) so they
match and reflect the confirmed release year.
| - Corrección de un error al regenerar certificados, así como problemas con builds que no se ejecutaban correctamente. | ||
| - Errores de frontend relacionados con listados y problemas de API que causaban errores de filtrado han sido corregidos. |
There was a problem hiding this comment.
Sacá estas correcciones de la sección equivocada.
Estas líneas describen correcciones de errores y están mal ubicadas en "Nuevas Funcionalidades". Ya están duplicadas correctamente en la sección "Correcciones de Errores" (líneas 28-29).
🔧 Corrección propuesta
- **Parametrización de Healthcheck:** Las propiedades de healthcheck ahora pueden parametrizarse con JSONSchema.
- **Nuevo Dashboard:** Se ha agregado un nuevo dashboard para ver consumo por namespace.
-- Corrección de un error al regenerar certificados, así como problemas con builds que no se ejecutaban correctamente.
-- Errores de frontend relacionados con listados y problemas de API que causaban errores de filtrado han sido corregidos.
## Correcciones de Errores🤖 Prompt for AI Agents
In @i18n/es/docusaurus-plugin-content-blog-changelog/2024-08-12-V1.6.0.md around
lines 23 - 24, Remove the two misplaced bullet lines ("Corrección de un error al
regenerar certificados, así como problemas con builds que no se ejecutaban
correctamente." and "Errores de frontend relacionados con listados y problemas
de API que causaban errores de filtrado han sido corregidos.") from the "Nuevas
Funcionalidades" section and ensure they remain only once under "Correcciones de
Errores" to avoid duplication.
| "generate-tutorials": "python3 generate_tutorials.py", | ||
| "prestart": "npm run generate-tutorials", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Buscar el archivo generate_tutorials.py
fd -t f "generate_tutorials.py"Repository: sleakops/docs
Length of output: 78
🏁 Script executed:
# Buscar documentación relevante
fd -t f -e md | head -20Repository: sleakops/docs
Length of output: 655
🏁 Script executed:
# Revisar package.json completo para entender el contexto
fd -t f "package.json" --exec cat {}Repository: sleakops/docs
Length of output: 2164
🏁 Script executed:
# Buscar configuración de Python en el proyecto
fd -t f \( -name "setup.py" -o -name "pyproject.toml" -o -name "requirements.txt" -o -name ".python-version" \)Repository: sleakops/docs
Length of output: 287
🏁 Script executed:
# Buscar referencias a python en archivos de configuración
rg -i "python" --type-list | head -5Repository: sleakops/docs
Length of output: 446
🏁 Script executed:
# Leer README.md para instrucciones de setup
cat README.mdRepository: sleakops/docs
Length of output: 915
🏁 Script executed:
# Ver qué hace generate_tutorials.py (primeras líneas)
head -30 generate_tutorials.pyRepository: sleakops/docs
Length of output: 852
🏁 Script executed:
# Buscar configuración de CI/CD
fd -t f -path "*/.github/workflows/*.yml"Repository: sleakops/docs
Length of output: 225
🏁 Script executed:
# Buscar referencias a python en el repositorio
rg "python" --type-listRepository: sleakops/docs
Length of output: 446
🏁 Script executed:
# Buscar documentación sobre setup/instalación
rg -i "setup\|install\|requirements" --type md | head -20Repository: sleakops/docs
Length of output: 39
🏁 Script executed:
# Buscar archivo docker-compose.yml
fd -t f "docker-compose.yml" -o "docker-compose.yaml"Repository: sleakops/docs
Length of output: 214
🏁 Script executed:
# Buscar Dockerfile
fd -t f "Dockerfile"Repository: sleakops/docs
Length of output: 67
🏁 Script executed:
# Ver la estructura de directorios principales
ls -laRepository: sleakops/docs
Length of output: 2011
🏁 Script executed:
# Leer docker-compose.yml
cat docker-compose.ymlRepository: sleakops/docs
Length of output: 378
🏁 Script executed:
# Leer Dockerfile
cat DockerfileRepository: sleakops/docs
Length of output: 230
🏁 Script executed:
# Buscar workflows de CI/CD
fd -type f -path "*/.github/workflows/*"Repository: sleakops/docs
Length of output: 227
🏁 Script executed:
# Leer Makefile para ver comandos locales
cat MakefileRepository: sleakops/docs
Length of output: 2027
El Dockerfile debe incluir Python 3 o los scripts npm no funcionarán.
El contenedor Docker (basado en node:20.18.0) no instala Python, pero package.json define prestart y prebuild que ejecutan python3 generate_tutorials.py. Esto rompe el flujo descrito en README:
docker compose upfallará en el hookprestartnpm startlocal fallará sinpython3instalado
Agregar Python al Dockerfile o mover la generación de tutoriales a un comando Make que se ejecute antes de npm, según cómo esperes que desarrolladores usen el proyecto.
Contexto
Dockerfile actual:
FROM node:20.18.0
RUN corepack enable
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn --frozen-lockfile && yarn cache cleanpackage.json:
"prestart": "npm run generate-tutorials",
"generate-tutorials": "python3 generate_tutorials.py"🤖 Prompt for AI Agents
In @package.json around lines 7 - 8, The project currently runs "python3
generate_tutorials.py" via the package.json "generate-tutorials" script and
triggers it in the "prestart" hook, but the base image (FROM node:20.18.0) in
the Dockerfile does not include Python; either install Python in the image or
move generation out of npm hooks: Option A — update the Dockerfile derived from
FROM node:20.18.0 to install python3 (and pip if needed) and ensure the tutorial
script is copied into the image before running yarn so "prestart" can run
successfully; Option B — remove the "prestart" hook that runs "npm run
generate-tutorials" (and any "prebuild" equivalent), add a Makefile target
(e.g., "generate-tutorials") that runs "python3 generate_tutorials.py" and
update README to require running that make target before npm start/build,
keeping the package.json "generate-tutorials" script only for local convenience.
| { | ||
| "id": "nuevo-tutorial", | ||
| "title": "Nuevo tutorial", | ||
| "description": "dsadasdasdasdasdasdasdasdasd", | ||
| "tags": [ | ||
| "node" | ||
| ], | ||
| "image": null, | ||
| "sidebar_position": null | ||
| }, | ||
| { | ||
| "id": "nuevo-tutorial-1", | ||
| "title": "Nuevo tutorial", | ||
| "description": "Nueva Descripcion", | ||
| "tags": [ | ||
| "nextjs", | ||
| "php", | ||
| "node" | ||
| ], | ||
| "image": "/img/cluster/cluster-settings-main-section.png", | ||
| "sidebar_position": null | ||
| } |
There was a problem hiding this comment.
¡Ojo! Datos de prueba en el archivo generado.
Estos dos tutoriales parecen ser datos de prueba/placeholder que no deberían estar en producción:
"nuevo-tutorial"tiene una descripción sin sentido:"dsadasdasdasdasdasdasdasd""nuevo-tutorial-1"tiene el mismo título duplicado"Nuevo tutorial"- Ambos tienen
sidebar_position: null
¡A las piñas con estos datos de prueba! 🥊 Deberían eliminarse o reemplazarse con contenido real antes de mergear.
🗑️ Fix propuesto: Eliminar datos de prueba
"sidebar_position": 4
- },
- {
- "id": "nuevo-tutorial",
- "title": "Nuevo tutorial",
- "description": "dsadasdasdasdasdasdasdasdasd",
- "tags": [
- "node"
- ],
- "image": null,
- "sidebar_position": null
- },
- {
- "id": "nuevo-tutorial-1",
- "title": "Nuevo tutorial",
- "description": "Nueva Descripcion",
- "tags": [
- "nextjs",
- "php",
- "node"
- ],
- "image": "/img/cluster/cluster-settings-main-section.png",
- "sidebar_position": null
}
]🤖 Prompt for AI Agents
In @src/data/tutorials-generated.json around lines 45 - 66, Remove the two
placeholder tutorial objects from the generated JSON: delete the entries with
"id": "nuevo-tutorial" and "id": "nuevo-tutorial-1" (or replace them with real,
validated tutorial data), ensuring no test data remains (remove the nonsensical
"description": "dsadas..." and duplicate "title": "Nuevo tutorial") and avoid
leaving "sidebar_position": null for any production entries; update the
generated source so subsequent builds do not reintroduce these test records.
| <script | ||
| src="https://unpkg.com/@sveltia/cms/dist/sveltia-cms.js" | ||
| type="module" | ||
| ></script> |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
latest version @sveltia/cms npm package
💡 Result:
The latest npm version of @sveltia/cms is 0.72.1. [1][2]
Sources:
- npm package page for @sveltia/cms (v0.72.1). [1]
- npm package README/main page. [2]
🌐 Web query:
SRI subresource integrity unpkg.com CDN best practices
💡 Result:
Quick best-practice checklist for using SRI with unpkg.com (concise):
-
Use immutable, full-file URLs (include exact package@version and file path). Do NOT use version aliases, default file shortcuts, or dynamic/combined URLs — those can change and will break SRI. [1][2]
-
Generate and include a proper integrity attribute (prefer sha384 or sha512). If you include multiple hashes, the browser picks the strongest; minimum recommended is sha384. [3][4]
-
Add crossorigin="anonymous" for cross-origin CDN resources (browsers require CORS when checking SRI). [3]
-
Only apply SRI to truly static files (files guaranteed not to be re-minified or rebuilt on the CDN). If the CDN might dynamically alter/minify a file, do not use SRI; instead use an immutable build or self-host. (jsDelivr guidance applies equally to any CDN behavior like on-demand minification). [2][5]
-
Update hashes whenever you change the dependency version or file contents. Automate hash generation in your build/release pipeline (use tools like ssri / sri-toolbox). Store exact integrity values alongside the exact version. [4][6]
-
Prefer serving critical libs locally or from immutable artifact storage when feasible; use SRI + a restrictive Content Security Policy (CSP) as defense-in-depth for third-party resources. [1][3]
-
Verify examples/docs: when switching CDNs (e.g., unpkg → jsDelivr) check that file variants (minified vs. not) match the integrity value — different CDNs may serve different byte-for-byte files. [5]
Sources:
- MDN: Subresource Integrity / implementation notes. [1]
- jsDelivr SRI guidance (static vs dynamic files). [2]
- webhint / SRI best-practices (crossorigin, minimum hash). [3]
- sri-toolbox / ssri libraries (tools to generate/manage hashes). [4]
- Community/issue examples re: CDN differences and incorrect SRIs when switching providers. [5]
If you want, I can:
- generate the correct integrity value for a specific unpkg URL you plan to use, or
- produce a small npm/build script to auto-generate and insert SRI attributes into your HTML.
🌐 Web query:
how to generate SRI hash for CDN scripts integrity attribute
💡 Result:
Steps to generate an SRI (Subresource Integrity) hash and use it for a CDN script:
-
Choose algorithm: sha256, sha384 or sha512 (sha384 is recommended). [1][2]
-
Fetch the resource (or use a local file) and compute the binary hash, then Base64‑encode it. Example commands:
-
Using curl + openssl (Linux/macOS, Windows with OpenSSL):
curl -s https://cdn.example.com/lib.min.js | openssl dgst -sha384 -binary | openssl base64 -A
Result: (base64 string) -
Using local file + openssl:
openssl dgst -sha384 -binary path/to/lib.min.js | openssl base64 -A -
Using shasum + xxd + base64 (macOS/Linux):
shasum -b -a 384 path/to/lib.min.js | awk '{print $1}' | xxd -r -p | base64 -
Using Node:
node -e "const fs=require('fs');const crypto=require('crypto');const b=fs.readFileSync(process.argv[1]);console.log(crypto.createHash('sha384').update(b).digest('base64'))" path/to/lib.min.js
(Any of the above outputs the base64 digest.) [1][2]
-
Build the integrity attribute: prefix the base64 digest with the algorithm and a dash:
integrity="sha384-" -
Add crossorigin for cross-origin CDN resources so browsers can verify the hash:
<script src="https://cdn.example.com/lib.min.js" integrity="sha384-" crossorigin="anonymous"></script>Note: the CDN must send Access-Control-Allow-Origin for cross-origin verification to work. [1][2]
References:
- MDN: Subresource Integrity (includes commands and examples). [1]
- SubresourceIntegrity / FAQ (generator and examples). [2]
Arreglemos este conflicto de seguridad a las piñas.
Cargas el script de Sveltia CMS desde unpkg.com sin Subresource Integrity (SRI), lo que es un problema real en una interfaz de administración. Además, la URL no especifica versión exacta, lo cual es fundamental para que SRI funcione en unpkg.
Necesitás:
- Cambiar la URL a formato inmutable con versión:
https://unpkg.com/@sveltia/cms@0.72.1/dist/sveltia-cms.js - Generar el hash SHA-384 de ese recurso
- Agregar los atributos:
integrity="sha384-[tu-hash-aqui]"crossorigin="anonymous"
Si generás el script localmente, podés obtener el hash con: curl -s https://unpkg.com/@sveltia/cms@0.72.1/dist/sveltia-cms.js | openssl dgst -sha384 -binary | openssl base64 -A
🤖 Prompt for AI Agents
In @static/admin/index.html around lines 10 - 13, Reemplazá la carga remota
actual del script de Sveltia por la versión inmutable incluyendo versión exacta
(por ejemplo @0.72.1) en la URL, calculá el hash SHA-384 del fichero publicado
(ej.: usando curl ... | openssl dgst -sha384 -binary | openssl base64 -A), y
añadí al elemento <script> los atributos integrity="sha384-[HASH_AQUI]" y
crossorigin="anonymous" junto con la nueva URL; esto asegura que el recurso
cargado por la etiqueta <script
src="https://unpkg.com/@sveltia/cms@0.72.1/dist/sveltia-cms.js" ...> tenga SRI y
crossorigin configurados correctamente.
| --- | ||
| title: Nuevo tutorial | ||
| description: Nueva Descripcion | ||
| tags: | ||
| - nextjs | ||
| - php | ||
| - node | ||
| image: /img/cluster/cluster-settings-main-section.png | ||
| --- | ||
|
|
||
| Test |
There was a problem hiding this comment.
Este tutorial está incompleto y no debería mergearse así.
El archivo solo contiene "Test" como contenido. Además, la imagen referenciada (/img/cluster/cluster-settings-main-section.png) no tiene relación con los tags del tutorial (nextjs, php, node).
¿Es este archivo solo para pruebas o pensás completarlo? Si es para testing, mejor sacarlo del PR antes de mergear. Si va en serio, hay que desarrollar el contenido completo del tutorial.
¿Querés que te ayude a generar una estructura base para el tutorial o preferís que abra un issue para trackear esto?
🤖 Prompt for AI Agents
In @tutorials/nuevo-tutorial-1.mdx around lines 1 - 11, El archivo de tutorial
("title: Nuevo tutorial") está incompleto y contiene solo "Test" además de una
imagen (/img/cluster/cluster-settings-main-section.png) que no coincide con los
tags (nextjs, php, node); arreglalo o retiralo del PR: o bien completar el
documento añadiendo contenido útil (resumen, objetivos, pasos, ejemplos de
código, secciones para Next.js/PHP/Node según los tags) y actualizar frontmatter
(title, description, tags, image) para que la imagen refleje el contenido, o
eliminar el archivo si es solo un test; si preferís mantenerlo como borrador,
crea un placeholder claro en el body indicando "WIP" y abre un issue para
trackeo.
| --- | ||
| title: Nuevo tutorial | ||
| description: dsadasdasdasdasdasdasdasdasd | ||
| tags: | ||
| - node | ||
| --- | ||
|
|
||
| dsadasdasdasdasdasd |
There was a problem hiding this comment.
¡Este tutorial tiene contenido de placeholder que hay que sacar a las piñas!
El archivo contiene texto placeholder sin sentido ("dsadasdasdasdasdasdasdasdasd") tanto en la descripción como en el contenido. Este tipo de contenido no debería llegar a la rama develop ni mucho menos a producción.
Necesitás reemplazar este contenido con un tutorial real o eliminar el archivo completamente si fue creado por error.
🥊 Solución propuesta: Eliminar el archivo o completar con contenido real
Si es un archivo de prueba, eliminalo:
----
-title: Nuevo tutorial
-description: dsadasdasdasdasdasdasdasdasd
-tags:
- - node
----
-
-dsadasdasdasdasdasdSi es un tutorial en progreso, completalo con contenido significativo antes de hacer merge.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| --- | |
| title: Nuevo tutorial | |
| description: dsadasdasdasdasdasdasdasdasd | |
| tags: | |
| - node | |
| --- | |
| dsadasdasdasdasdasd |
🤖 Prompt for AI Agents
In @tutorials/nuevo-tutorial.mdx around lines 1 - 8, El archivo
"tutorials/nuevo-tutorial.mdx" contiene texto placeholder en el frontmatter
(description) y en el body ("dsadas..."); quita el contenido de placeholder
reemplazándolo por un título/descripción y cuerpo reales o elimina completamente
el archivo si fue creado por error; specifically, update the frontmatter fields
(title, description, tags) and the page content to meaningful tutorial text (or
remove the file) so no placeholder strings remain in title/description/body
before merging.
| ```dockerfile | ||
| FROM php:8.2-fpm-alpine | ||
|
|
||
| RUN apk add --no-cache \ | ||
| nginx \ | ||
| supervisor \ | ||
| && docker-php-ext-install pdo pdo_mysql | ||
|
|
||
| COPY . /var/www/html | ||
| WORKDIR /var/www/html | ||
|
|
||
| RUN composer install --no-dev --optimize-autoloader | ||
|
|
||
| EXPOSE 80 | ||
| CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"] | ||
| ``` |
There was a problem hiding this comment.
¡Ojo que este Dockerfile te va a pegar una piña! 🥊
El Dockerfile usa composer install en la línea 34, pero Composer no está instalado en la imagen. Esto va a fallar durante el build.
🐛 Fix propuesto para instalar Composer
FROM php:8.2-fpm-alpine
RUN apk add --no-cache \
nginx \
supervisor \
+ curl \
&& docker-php-ext-install pdo pdo_mysql
+# Install Composer
+RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
+
COPY . /var/www/html
WORKDIR /var/www/html
RUN composer install --no-dev --optimize-autoloader🤖 Prompt for AI Agents
In @tutorials/php-laravel.mdx around lines 23 - 38, El Dockerfile ejecuta RUN
composer install pero no instala Composer; antes de la línea que corre composer
install (referencia: RUN composer install in the Dockerfile built FROM
php:8.2-fpm-alpine) añade pasos para instalar Composer (por ejemplo apk add
--no-cache curl unzip && php -r
"copy('https://getcomposer.org/installer','composer-setup.php');" && php
composer-setup.php --install-dir=/usr/local/bin --filename=composer && rm
composer-setup.php) o alternativamente use una imagen base que ya incluya
Composer; asegúrate de instalar curl/unzip y dar permisos ejecutables para
/usr/local/bin/composer antes de ejecutar RUN composer install.�
Summary by CodeRabbit
New Features
Documentation
Chores
✏️ Tip: You can customize this high-level summary in your review settings.