Repository navigation
Development Workflow es
Esta página describe cómo se organiza el desarrollo de Rivulet y, en
particular, cómo el pre-push hook local protege develop de pushes
rotos. El mismo flujo está documentado en el repositorio en
CONTRIBUTING.md;
la copia del repositorio es la fuente normativa.
- Trabaja en una rama de feature desde
develop, haz commits con mensajes convencionales (feat:,fix:,docs:,ci:, ...). - Haz push y abre un PR contra
develop. - CI ejecuta las comprobaciones requeridas: lint (fmt + clippy), la suite completa de tests, pinning tests, smoke tests (RIST/SRT/OBS WebSocket) y más.
- Los commits
feat:/fix:(y build/chore publicables) construyen y publican automáticamente un alpha release.
Un hook de git versionado (.githooks/pre-push) replica en local el job de
CI Lints (Fmt & Clippy), de modo que un push nunca pueda romper las
comprobaciones requeridas.
Lo que ejecuta, en orden:
cargo fmt --all --checkcargo clippy --workspace --all-targets -- -D warnings-
Fase de fast-guards (activada por defecto):
cargo test -p rivulet-core --test ci_pinningmás los self-tests de los scripts del job Lints (comprobación de action-pins, parity-checklist/release-notes/ theme-contrast,generate-release-notes.sh --self-test).
Por qué importa -D warnings: un cargo clippy normal solo advirte sobre
lints como clippy::field_reassign_with_default. El commit 06792c6 envió
cuatro tests de GUI que estaban limpios en local pero rompieron el job Lints
de CI; el hook usa las flags exactas de CI para que esa clase de fallo
suceda antes del push.
Activa el hook una vez por clon:
git config core.hooksPath .githooksDespués, cada git push ejecuta las comprobaciones automáticamente.
| Objetivo | Comando |
|---|---|
| Saltar la fase de fast-guards para un push | RIVULET_PRE_PUSH_FAST_TESTS=0 git push |
| Saltar el hook completo para un push | RIVULET_SKIP_PRE_PUSH=1 git push |
| Saltar el hook completo (nativo de git) | git push --no-verify |
-
El hook no se ejecuta. El ajuste
core.hooksPathes por clon — ejecutagit config core.hooksPath .githooksen el checkout desde el que haces push y verifica congit config core.hooksPath(debe imprimir.githooks). -
bashno encontrado en Windows durante la comprobación de sintaxis. El hook se ejecuta desde git, que usa el bash de Git for Windows. El guard de ci_pinningpre_push_hook_is_valid_bashprefiere unC:\Program Files\Git\bin\bash.exeexplícito; cuando no hay Git Bash instalado, el guard se salta en local (CI en ubuntu lo sigue aplicando). -
Clippy va lento. La ejecución de clippy del workspace es incremental —
la primera invocación compila todo, los pushes posteriores son rápidos.
Usa
RIVULET_PRE_PUSH_FAST_TESTS=0si solo debe correr la fase de lint. -
El push es bloqueado por el hook. Lee la salida de la comprobación que
falla —
cargo fmt/cargo clippyinforman del archivo y del lint exactos. Arréglalo, no lo saltes; el mismo fallo rompería el job Lints de CI. -
Quitar el hook de nuevo.
git config --unset core.hooksPathrestaura el directorio por defecto.git/hooks(que no contiene hooks de Rivulet).
Last reviewed: 2026-09-08