Proyecto /
Cómo contribuir
Cómo proponer un cambio en Gresbase, de la rama al merge, y cómo escribir y previsualizar esta documentación.
En esta página
- Las pull requests son bienvenidas
- Antes de empezar
- Ramas y commits
- Crea una rama desde main
- Haz commits con Conventional Commits
- Pasa la CI local
- Haz el merge a main
- CI local
- Estilo de código
- Traducciones
- Escribir la documentación
- Previsualizarla
- Ficheros y front matter
- Elementos de Markdown
- Comprobarla
- Datos y diseño
Las pull requests son bienvenidas#
Al enviar una, aceptas que tu contribución quede bajo la licencia Apache 2.0, la del proyecto. No hay CLA que firmar.
- Un arreglo pequeño, como una errata, un fallo con causa clara o una traducción que falta, puede ir directo a una pull request.
- Un cambio grande, como una función nueva, una dependencia nueva o un cambio de comportamiento, empieza con un issue. Acuerda ahí el enfoque antes de escribir código.
- Las pull requests van al repositorio de GitHub, https://github.com/amtzespinosa/gresbase.
Antes de empezar#
Lee el AGENTS.md de la raíz del repositorio. Resume el stack, las reglas de seguridad y las convenciones, tanto para personas como para agentes de código. El alcance de cada versión está en docs/spec.md y el aspecto de la app en docs/design.md.
Trabaja solo en lo que planea la versión en curso. Las ideas para versiones futuras van a la hoja de ruta de docs/spec.md, no al código.
Ramas y commits#
-
Crea una rama desde main#
Una rama por cambio, creada desde
main. Las tareas del propio proyecto usan nombres comofeat/NN-nombre-corto. -
Haz commits con Conventional Commits#
Mensajes en inglés, por ejemplo
feat(rows): keyset pagination. Mejor varios commits pequeños que uno grande. -
Pasa la CI local#
Ejecuta
task ci:quickdentro del contenedor de desarrollo. Tiene que salir en verde antes del merge. -
Haz el merge a main#
Nadie hace push a
maincon la CI local en rojo. Nuncapush --forcey nunca se reescribe la historia demain.
CI local#
GitHub Actions ejecuta las mismas comprobaciones en cada push y pull request. Pásalas antes en local: ahí se arreglan más rápido.
| Comando | Cuándo |
|---|---|
task ci:quick |
Antes de cada merge a main |
task ci:full |
Antes de cerrar un bloque de trabajo o una versión |
Los dos ejecutan scripts/ci.sh, guardan sus logs en tmp/ci/ y terminan con una tabla de resumen. Para preparar el contenedor, mira Compilar desde el código.
Estilo de código#
- Código, identificadores, comentarios y commits en inglés. Los documentos del proyecto en
docs/están en español. - Go: paquetes pequeños, errores envueltos con
%w,context.Contexten todo lo que toque red o base de datos y tests en tabla. - TypeScript en modo
strict, sinany. Los hooks de datos viven enweb/src/lib/api, no en los componentes de interfaz. - Cada función nueva llega con sus tests. Los de integración corren contra un PostgreSQL real con testcontainers, y los de punta a punta están en
web/e2e. - Si cambia un struct de Go de la API, ejecuta
task genpara regenerar los tipos de TypeScript. - Si cambia una dependencia, ejecuta
task licenses. Solo valen licencias compatibles con Apache 2.0. - Las funciones nuevas funcionan en PostgreSQL 12 a 19 desde el primer día. Si cambias lo que funciona en cada versión, actualiza
docs/compatibility.md.
Traducciones#
La interfaz está en inglés y en español. Ningún texto visible se escribe dentro de un componente: todo pasa por i18n.
Los textos están en web/src/locales/en.json y web/src/locales/es.json. Añade cada clave nueva a los dos ficheros. Un test falla si no tienen exactamente las mismas claves.
Escribe el español como español, no como traducción palabra por palabra. Mantén el tono de docs/design.md: directo, breve y humano, con verbos en los botones.
Escribir la documentación#
Esta documentación vive en site/. La genera un pequeño script de Node, sin ningún framework en el navegador.
Previsualizarla#
Node corre en un contenedor. Desde la raíz del repositorio:
docker compose -f site/compose.yml up -dAbre http://localhost:4321. La página se recarga al guardar un fichero. Si cambias algo en site/build/, reinicia el contenedor con docker compose -f site/compose.yml restart.
Ficheros y front matter#
- Cada página es
site/content/<idioma>/<slug>.md, con el mismo nombre de fichero eneny enes. site/content/nav.ymlfija el orden, las secciones y el título de cada página en cada idioma. Ese título es el h1, así que no escribas uno en el Markdown.- El front matter solo lleva
description: una frase que dice qué resuelve la página. Se muestra como entradilla. - El cuerpo empieza con encabezados
##.## Título {#mi-id}fija un ancla propia. Las anclas no pueden repetirse en la página.
---
description: Una frase que dice qué resuelve esta página.
---Elementos de Markdown#
Además de encabezados, listas, tablas, negrita, código en línea y <kbd>, el build entiende estos bloques:
:::steps
### Primer paso
Qué hacer.
### Segundo paso
Qué viene después.
:::
:::note
También :::tip, :::warning y :::danger. Guárdalos para riesgos reales.
:::
:::tabs
@tab docker-compose.yml {#compose}
```yaml
services: {}
```
@tab docker run {#run}
```sh
docker run …
```
:::
```yaml title="docker-compose.yml"
services: {}
```- Cada
@tabnecesita exactamente un bloque de código. title="…"detrás del lenguaje pone un nombre de fichero encima del código.- Lenguajes con resaltado:
yaml,shysql. El resto se ve como texto plano. - Los enlaces internos apuntan al fichero Markdown, como
[Variables de entorno](./environment.md)o./pagina.md#ancla. - Las palabras entre dobles llaves se sustituyen al compilar:
image(la imagen Docker),port(el puerto del inicio rápido) yrepo(la URL del repositorio). Cualquier otro nombre rompe el build.
Comprobarla#
docker compose -f site/compose.yml exec -T site npm run checkFalla ante cualquier problema:
- Un enlace o un ancla rotos, o una página que falta en uno de los idiomas.
- Una página que no está en
nav.yml, o una página denav.ymlsin fichero. - Una variable que lee el código de Go y que Variables de entorno no documenta, en cualquier idioma.
- Una variable
GRESBASE_*en la documentación que el código no lee. - Un atajo de
web/src/lib/shortcuts.tscuya descripción falta en Atajos de teclado.
npm run build y npm run check tienen que salir en verde antes de cada commit que toque site/.
Datos y diseño#
- Saca cada dato técnico del código: variables, valores por defecto, puertos, rutas, errores y atajos. Si no puedes confirmarlo, márcalo con
TODO(verificar: …), en vez de suponer. - Copia los nombres de botones y menús tal cual de los ficheros de idioma, en cada idioma.
- La landing tiene que coincidir con
site/reference/landing-referencia.html, y la documentación consite/reference/docs-referencia.html. No se rediseñan. - Los colores y las sombras salen solo de
site/src/css/tokens.css. Las fuentes están autoalojadas y la web no pide nada a otros dominios.
Solo quien mantiene el proyecto publica versiones: un tag v* lanza el workflow de release, que publica los binarios y la imagen.