Compilación
Requisitos previos
Sección titulada «Requisitos previos»- Go 1.26.4 o posterior
- Docker (para compilar imágenes Docker)
- golangci-lint (para el linting)
Compilación
Sección titulada «Compilación»# Clona el repositoriogit clone https://github.com/jmrplens/cs-routeros-bouncer.gitcd cs-routeros-bouncer
# CompilaCGO_ENABLED=0 go build -o cs-routeros-bouncer ./cmd/cs-routeros-bouncerCon información de versión:
CGO_ENABLED=0 go build -ldflags "-X github.com/jmrplens/cs-routeros-bouncer/internal/config.Version=1.4.5 -X github.com/jmrplens/cs-routeros-bouncer/internal/config.Commit=$(git rev-parse --short HEAD) -X github.com/jmrplens/cs-routeros-bouncer/internal/config.BuildDate=$(date -u +%Y-%m-%dT%H:%M:%SZ) -X github.com/crowdsecurity/go-cs-lib/version.Version=1.4.5" \ -o cs-routeros-bouncer ./cmd/cs-routeros-bouncerdocker build -f docker/Dockerfile -t cs-routeros-bouncer:local .Compila para distintas arquitecturas:
# ARM64 (p. ej., Raspberry Pi 4, Apple Silicon)CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o cs-routeros-bouncer-arm64 ./cmd/cs-routeros-bouncer
# ARMv7 (p. ej., Raspberry Pi 3)CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -o cs-routeros-bouncer-armv7 ./cmd/cs-routeros-bouncer
# AMD64CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cs-routeros-bouncer-amd64 ./cmd/cs-routeros-bouncerPruebas
Sección titulada «Pruebas»# Ejecuta todas las pruebasgo test ./...
# Con salida detalladago test -v ./...
# Con coberturago test -coverprofile=coverage.out ./...go tool cover -html=coverage.outEjecuta un paquete concreto:
go test -v ./internal/config/...go test -v ./internal/routeros/...go test -v ./internal/metrics/...# Genera el informe de coberturago test -coverprofile=coverage.out -covermode=atomic ./...
# Consulta la cobertura en el navegadorgo tool cover -html=coverage.out -o coverage.html
# Comprueba el porcentaje de coberturago tool cover -func=coverage.out | tail -1Las pruebas de integración están protegidas por la etiqueta de compilación integration. La suite funcional en Bash ejecuta comprobaciones de caja negra contra un bouncer real instalado.
# Pruebas de integración en Gogo test -v -tags integration -count=1 -timeout 300s ./tests/integration/...
# Suite funcional de caja negracp tests/functional/.env.example tests/functional/.envtests/functional/run_tests.shGuía de pruebasSuites de pruebas unitarias, de integración y funcionales en detalle.
BenchmarkingComando de benchmark de la API de RouterOS y notas de seguridad.
Linting
Sección titulada «Linting»# Instala golangci-lintgo install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# Ejecuta el lintergolangci-lint run
# Ejecuta con corrección automáticagolangci-lint run --fix
# Go vetgo vet ./...El proyecto usa .golangci.yml para la configuración del linter.
| Workflow | Disparador | Propósito |
|---|---|---|
ci.yml | Push, PR | Ejecuta linting, pruebas, análisis de docs y comprobaciones de build |
docs.yml | Cambios en docs, ejecución manual | Compila y despliega el sitio de documentación de Astro |
release.yml | Push de etiqueta | Compila binarios e imágenes Docker, crea la release de GitHub |
Proceso de publicación
Sección titulada «Proceso de publicación»-
Actualiza la versión en el código
-
Crea y sube una etiqueta de git
Ventana de terminal git tag v1.4.5git push origin v1.4.5 -
GitHub Actions automáticamente:
- Compila binarios para linux/amd64, linux/arm64, linux/arm/v7
- Compila y publica imágenes Docker (multiarquitectura)
- Crea una release de GitHub con los binarios adjuntos
Flujo de trabajo de desarrollo
Sección titulada «Flujo de trabajo de desarrollo»-
Crea una rama de funcionalidad
Ventana de terminal git checkout -b feat/my-feature -
Haz los cambios y pruébalos
Ventana de terminal go test ./...golangci-lint run -
Haz commit con un mensaje convencional
Ventana de terminal git commit -m "feat: add new feature" -
Haz push y crea un PR