src/webhooks/dispatch.rs:48 Abierto
La revisión sobre el diff
Un comentario queda ligado a su línea. Quien revisa puede escribir una sugerencia que el autor aplica con un clic, como commit. Las aprobaciones se cuentan, los conflictos se detectan.
Repositorios, merge requests con revisión en línea, incidencias, wikis, releases, webhooks firmados y un motor de CI/CD. Un proceso, un PostgreSQL, en tu propio servidor.
$docker compose up -d --buildUn solo binario y una base de datos. Ninguna cuenta en un servicio de terceros, ninguna telemetría enviada a ninguna parte. Ver cómo está hecho.
Ilustración de una merge request en FerrisGit, del push a la fusión: un push por HTTPS crea la solicitud, una revisora sugiere un cambio en una línea, el autor lo aplica con un clic, la revisora aprueba, la solicitud se fusiona. La fusión arranca la pipeline del repositorio: format y clippy se ejecutan, luego test, y los tres terminan bien.
/api, cada una documentadaCada bloque es un trozo del producto real. La interfaz está en francés por ahora; cinco idiomas están previstos para la 0.2.
src/webhooks/dispatch.rs:48 Abierto
Un comentario queda ligado a su línea. Quien revisa puede escribir una sugerencia que el autor aplica con un clic, como commit. Las aprobaciones se cuentan, los conflictos se detectan.
Tras cada push, FerrisGit lee el archivo en la rama predeterminada y crea una pipeline. Las etapas son barreras, needs son dependencias; los trabajos corren en contenedores Docker mediante un pequeño runner, o como Pods de Kubernetes.
Etiquetas, hitos, asignados y cuatro estados. Arrastra una tarjeta para cambiar su estado, o usa el menú de la tarjeta desde el teclado.
| Acción | Lect. | Colab. | Mant. |
|---|---|---|---|
| Navegar, clonar, leer | |||
| Push, abrir incidencias y solicitudes, revisar | |||
| Fusionar, publicar releases, ajustes, colaboradores |
Un rol concedido en un grupo se aplica a todo lo que contiene. Gana el rol más alto.
Doce eventos sobre merge requests, incidencias, pipelines y colaboradores. Cada envío lleva una firma HMAC-SHA256 de su cuerpo en bruto; el secreto se cifra en reposo.
Los visitantes recorren el catálogo, el README, los archivos, los commits y las releases de los repositorios públicos, y los clonan. Un interruptor de administración apaga las páginas públicas.
Ninguna cuenta puede saltársela. Aplicaciones de autenticación (TOTP), passkeys (WebAuthn) y diez códigos de respaldo de un solo uso.
Repositorios, incidencias, merge requests y usuarios, mientras escribes. Las notificaciones en la aplicación te dicen lo que te concierne.
Describe los trabajos en .ferrisgit-ci.yml en la raíz del repositorio. Tras cada push correcto, FerrisGit lee el archivo en la rama predeterminada y crea una pipeline. Activa el interruptor para ver qué hace el planificador cuando un trabajo falla.
stages: [lint, test]
jobs:
format:
stage: lint
image: rust:1
script:
- rustup component add rustfmt
- cargo fmt --all -- --check
clippy:
stage: lint
image: rust:1
script:
- rustup component add clippy
- cargo clippy --all-targets -- -D warnings
test:
stage: test
image: rust:1
needs: [format, clippy]
script:
- cargo test --all-targets
Pipeline superada
lint
test
format y clippy arrancan juntos; test declara needs: [format, clippy] y arranca cuando ambos han terminado bien.
ferrisgit-runner consulta al servidor y ejecuta cada trabajo en un contenedor. O Kubernetes: el servidor crea un Pod por trabajo en tu clúster.FerrisGit es una imagen de contenedor con PostgreSQL al lado. Pruébalo con Docker Compose, instala el chart de Helm en Kubernetes, o ejecútalo desde el código.
git clone https://github.com/Masmarino/FerrisGit.git
cd FerrisGit
cp .env.example .env
# set POSTGRES_PASSWORD, JWT_SECRET, SETTINGS_ENCRYPTION_KEY and the admin password in .env
docker compose up -d --build
Compose construye la imagen desde el código. Para usar la imagen publicada, sustituye build: . por image: masmarino/ferrisgit:0.1.1 en docker-compose.yml.
git clone https://github.com/Masmarino/FerrisGit.git
cd FerrisGit
helm upgrade --install ferrisgit ./helm/ferrisgit \
--namespace ferrisgit --create-namespace \
--set image.tag=0.1.1 \
--set ingress.host=git.example.com \
--set-string ferrisgit.trustedProxyCidrs=10.42.0.0/16
kubectl -n ferrisgit rollout status deployment/ferrisgit
Si se dejan vacíos, el chart genera la contraseña de la base de datos, JWT_SECRET, SETTINGS_ENCRYPTION_KEY y la contraseña del primer administrador en el Secret ferrisgit-secrets. La release debe llamarse ferrisgit.
git clone https://github.com/Masmarino/FerrisGit.git
cd FerrisGit
cp .env.example .env # then set real secrets
./scripts/dev.sh # PostgreSQL via Compose, cargo run on :8080, ng serve on :4201
Hacen falta rustup, Node.js 26, Docker con Compose y git en el PATH. El script arranca PostgreSQL, aplica las migraciones y ejecuta el backend en el puerto 8080 y el servidor de desarrollo de Angular en el puerto 4201.
Un proceso, cinco crates, una arquitectura hexagonal: el dominio no sabe nada de la base de datos, los adaptadores no saben nada de los casos de uso.
Fig. 1 Una instancia. La línea naranja sigue un push desde el cliente hasta los trabajos que arranca.
Lo que protege una instancia, nombrado con precisión. Los datos nunca salen de tu servidor.
SETTINGS_ENCRYPTION_KEY.X-Frame-Options: DENY, y las rutas de acceso tienen límite de peticiones por IP.Cinco versiones, ninguna publicada. Un punto solo se marca cuando se publica.
La instancia pública muestra el producto. Tu instancia guarda tu código.
camille · 2 min
Espera exponencial, para dejar de martillear un endpoint inestable.