🛡️ EnvGuard (Integration Lock Manager)
Stop asking "Who is touching the Payment Service?" in Slack.
EnvGuard es una herramienta TUI (Terminal User Interface) escrita en Go para gestionar la concurrencia y evitar race conditions en nuestro entorno de integración. Permite visualizar, reservar y liberar microservicios en tiempo real sin salir de la terminal.
📸 Preview
Así es como se ve envguard cuando lo ejecutas:
┌────────────────────────────────────────────────────────────────┐
│ 🛡️ ENV-GUARD v1.0 | Conectado como: @dev_actual │
├────────────────────────────────────────────────────────────────┤
│ │
│ SERVICIO ESTADO USUARIO TIEMPO │
│ ──────────────── ────────── ─────────── ────────────── │
│ auth-service 🟢 LIBRE -- -- │
│> payments-api 🔴 LOCKED @carlos Hace 12m │
│ user-db 🔴 LOCKED @sofia Hace 03m │
│ notifications 🟢 LIBRE -- -- │
│ front-web 🔴 LOCKED @tu (YO) Hace 10s │
│ │
├────────────────────────────────────────────────────────────────┤
│ [↑/↓] Navegar [Enter] Reservar/Liberar [Q] Salir │
└────────────────────────────────────────────────────────────────┘
🚀 Cómo funciona
El sistema consta de dos partes:
- Server (
cmd/server): Una API ligera que mantiene el estado de los bloqueos en memoria (Source of Truth). - CLI (
cmd/cli): El cliente TUI desarrollado con Bubble Tea que consumen los desarrolladores.
Flujo de Trabajo
- Abres la terminal y ejecutas
envguard. - Ves que payments-api está libre.
- Pulsas
Entersobre él. - El servidor registra el bloqueo a tu nombre.
- Tus compañeros ven instantáneamente (polling) que tú lo estás usando.
🛠️ Desarrollo y Setup Local
Sigue estos pasos para arrancar el entorno de desarrollo:
Prerrequisitos
- Go 1.21+
1. Clonar el repositorio
git clone https://github.com/tu-org/envguard.git
cd envguard
2. Arrancar el Servidor
En una terminal separada:
go run cmd/server/main.go
# Output: 🚦 Lock Server corriendo en :8080
3. Arrancar el Cliente (TUI)
En otra terminal:
# Simula ser un usuario específico mediante variable de entorno
USER=mi_usuario go run cmd/cli/main.go
📂 Estructura del Proyecto
.
├── cmd/
│ ├── server/ # Entry point del servidor
│ │ └── main.go
│ └── cli/ # Entry point del cliente TUI
│ └── main.go
├── internal/
│ ├── models/ # Estructuras compartidas (Lock, Service)
│ └── api/ # Cliente HTTP para llamar al servidor
├── go.mod
└── README.md
🎮 Controles
| Tecla | Acción |
|---|---|
↑ / k |
Subir cursor |
↓ / j |
Bajar cursor |
Enter |
Bloquear (si está libre) o Liberar (si es tuyo) |
r |
Forzar refresco de datos |
q / Esc |
Salir |
🔮 Roadmap
- v1: Visualización de estado y bloqueo manual simple.
- v1.1: Auto-refresco (Polling) cada 2 segundos.
- v1.2: Notificaciones de escritorio cuando un servicio se libera.
- v2: Wrapper de ejecución (
envguard run services -- go test ./...). - v3: Integración con CI/CD (Bloqueo automático desde Jenkins/GitHub Actions).
¿Cómo contribuir?
- Haz fork del repo.
- Instala las dependencias de Charm:
go get github.com/charmbracelet/bubbletea - Crea una rama
feature/nueva-cosa. - Haz PR. ¡Evitemos race conditions también en el código! 😉
Description
Languages
Go
93.3%
Makefile
6.7%