Compilar binarios
Estructura del proyecto
Sección titulada «Estructura del proyecto»src/ módulos del programa├── main.sh punto de entrada y orquestación├── cloudflare.sh interacción con la API de Cloudflare├── config.sh parseo de la configuración YAML├── ip.sh detección de IP (interfaz local + servicios externos)├── network.sh wrapper HTTP sobre curl/wget/PowerShell├── logger.sh logging a consola y fichero, redacción de secretos└── notifications.sh Telegram / Discord
tools/ herramientas de build y calidadtests/ tests unitarios con bashunitcloudflare-dns-updater.sh lanzador de desarrollo (ejecuta desde el código fuente)Monolito
Sección titulada «Monolito»Todos los módulos de src/ fusionados en un único script autocontenido:
./tools/bundle.sh# → dist/cloudflare-dns-updater-monolith.shBinarios autónomos
Sección titulada «Binarios autónomos»tools/build-all.sh genera binarios sin dependencias: descarga builds estáticos de bash, curl, jq y busybox para la arquitectura objetivo, los empaqueta con el monolito y compila tools/launcher.c como ejecutor autoextraíble.
# --all compila los objetivos Linux (x86_64 + aarch64)./tools/build-all.sh --all
# El resto de plataformas se compilan nombrándolas explícitamente./tools/build-all.sh macos aarch64./tools/build-all.sh windows x86_64Requiere GCC (o MinGW para Windows). Los artefactos se generan en dist/.
Publicar una release
Sección titulada «Publicar una release»Las releases se controlan con el fichero VERSION de la raíz del repositorio:
- Sube la versión en ambos sitios: el fichero
VERSIONy la constanteVERSIONdesrc/main.sh(un test unitario falla si difieren). - Mergea a
main.
El workflow Build & Release Binaries (que solo se dispara con cambios en VERSION) compila los cinco binarios, crea el tag vX.Y.Z y publica la release de GitHub con notas autogeneradas. Ejecutar el workflow manualmente (workflow_dispatch) compila los binarios sin publicar nada.