bruno
1c847a824d
fix: Dockerfile → COPY pre-built binary (no network needed)
...
CI / test (push) Successful in 2m45s
Docker Desktop Windows blocks build network access. Instead of
building V from source inside Docker, cross-compile Linux binary
on host and COPY into minimal alpine image.
2026-08-03 20:26:02 -04:00
bruno
35a79f1d5b
fix: clone yaml module directly (v install fails in Docker)
...
CI / test (push) Successful in 2m43s
v install yaml échoue dans le conteneur thevlang/vlang:alpine
car le metadata fetch ne fonctionne pas. Clone direct du repo git.
2026-08-03 20:18:08 -04:00
bruno
5b0b580792
fix: add yaml dependency to v.mod + Dockerfile v install yaml
...
CI / test (push) Successful in 2m31s
The thevlang/vlang:alpine container doesn't include the yaml
module. Added it as a declared dependency and install step.
2026-08-03 20:13:26 -04:00
bruno
50a77c96c0
fix: Dockerfile uses thevlang/vlang:alpine container (pre-built V)
...
CI / test (push) Successful in 2m35s
Building V from source on Alpine fails due to C function
redefinition (musl libc). Use the official V Alpine container
which has a pre-built, compatible V compiler.
2026-08-03 20:08:09 -04:00
bruno
e5eb4125af
fix: Dockerfile pin V to 0.5.2 commit (not latest)
...
CI / test (push) Successful in 3m50s
V latest (git clone --depth 1) has incompatible APIs with
the source code written for V 0.5.2. Pin to exact commit
45ae01d to match local dev environment.
2026-08-03 20:03:56 -04:00
bruno
4fbac2121a
fix: docker install copies Dockerfile + sources for build
CI / test (push) Successful in 3m11s
2026-08-03 19:54:41 -04:00
bruno
5191e88b73
fix: docker-compose uses build from git repo instead of non-existent ghcr image
CI / test (push) Successful in 2m28s
2026-08-03 18:28:14 -04:00
bruno
e2a6d8d00c
feat: --install-docker + --install-docker-prometheus
...
CI / test (push) Successful in 2m29s
- docker_install.v: génère docker-compose.yml, ntfy-bridge.yaml,
dashboard.html, et prometheus.yml si --install-docker-prometheus
- main.v: nouveaux flags --install-docker <dir> et
--install-docker-prometheus <dir>
- Stack Prometheus scrape /metrics sur ntfy-bridge:9090
2026-08-03 18:13:09 -04:00
bruno
83778cfb0d
feat: Prometheus /metrics endpoint — Phase 5 -> 6/8
...
CI / test (push) Successful in 2m30s
- metrics.v: GET /metrics au format OpenMetrics (gauges + counters)
- server.v: route /metrics, Stats.http_polls counter, increment in poll loop
- metrics_test.v: test du endpoint metrics
- ROADMAP: Phase 5 6/8 (Prometheus done)
2026-08-03 18:03:26 -04:00
bruno
4150c56054
feat: Phase 5 — filtres, actions Ntfy, outgoing webhooks, state file
...
CI / test (push) Successful in 2m34s
- Filtres avancés: drop, set_priority, add_tag avec wildcard * (filter_outgoing.v)
- Notifications structurées: click_url + actions (ntfy.v + sources/event.v)
- Webhook sortant: Slack, Discord, JSON (filter_outgoing.v)
- Fichier d'état: persistance poll_state + silence_until (filter_outgoing.v)
- Config: sections filters, outgoing, state (config.v)
- Tests: 9 nouveaux tests unitaires (filter_outgoing_test.v)
- Docs: ROADMAP Phase 5 4/8, version 0.5.0
2026-08-03 17:41:53 -04:00
bruno
5d0db9478c
fix: dashboard affiche la version dynamique ({{VERSION}})
...
CI / test (push) Successful in 2m33s
dashboard.html utilise {{VERSION}}, remplacé par server.v au chargement
via const version de main.v. Plus besoin de maj manuelle du HTML.
2026-08-03 17:24:14 -04:00
bruno
adcb1945b8
fix: ne plus utiliser sc delete (cause marked for deletion)
...
CI / test (push) Successful in 2m14s
sc.exe delete met le service en état 'marked for deletion'
que nssm ne peut pas résoudre. Nettoyage uniquement via nssm.
2026-08-03 17:18:18 -04:00
bruno
51dcefc98d
fix: retry logic for 'marked for deletion' Windows SCM race
...
CI / test (push) Successful in 2m15s
- Clean up both sc.exe and nssm services before install
- Wait 1s after remove for SCM to release
- Retry up to 3x with 3s delay if 'marked for deletion'
- Added import time for sleep calls
2026-08-03 17:08:54 -04:00
bruno
4129379ca5
fix: Windows service via NSSM (sc.exe incompatible)
...
CI / test (push) Successful in 2m22s
Error 1053 — sc.exe alone cannot run non-service-aware .exe.
ntfy-bridge needs NSSM (Non-Sucking Service Manager) wrapper.
- service.v: --install-service uses nssm.exe (auto-detect PATH or dir)
- scripts/install.ps1: auto-downloads NSSM 2.24 before installing
- Falls back to sc.exe for uninstall/status if nssm not found
2026-08-03 17:04:12 -04:00
bruno
45e349e79d
feat: Phase 4.5 — Déploiement multi-plateforme v0.4.5
...
CI / test (push) Successful in 2m26s
- service.v: --install-service / --uninstall-service / --service-status
Windows (sc.exe SCM), Linux systemd, Linux openrc — auto-détection OS
- main.v: nouveaux flags service, help mis à jour
- Dockerfile: multi-stage (V from source → alpine:3.20 minimal)
- docker-compose.yml: prêt à l'emploi avec healthcheck
- scripts/install.sh: one-liner Linux (detect OS/arch, build, install)
- scripts/install.ps1: one-liner Windows PowerShell
Docs: ROADMAP Phase 4.5 marqué DONE, version 0.4.5
2026-08-03 16:51:24 -04:00
bruno
26341578fa
fix: os.signal_opt API callback-based (V latest)
...
CI / test (push) Successful in 2m46s
La nouvelle API est fn(os.Signal, fn(os.Signal)) au lieu de
chan+variadic. Enregistrement séparé pour .hup, .int, .term.
2026-08-03 15:00:39 -04:00
bruno
75e438f7d3
fix: _.DockerSource → sources.DockerSource dans docker_watcher.v
CI / test (push) Failing after 11s
2026-08-03 14:57:20 -04:00
bruno
fa4fbc23a5
fix: compatibilité V latest — import sources et signal_opt
...
CI / test (push) Failing after 9s
- docker_watcher.v: 'import sources as _' → 'import sources'
(le _ supprimait les symboles dans V récent)
- server.v: os.new_signal_channel → os.signal_opt
(API retirée dans V latest)
- server.v: 'import json' déprécié → 'import x.json2 as json'
2026-08-03 14:55:27 -04:00
bruno
65e2a0d487
fix: CI workflow — remove container, install V on runner
...
CI / test (push) Failing after 1m29s
The vlang:alpine container lacks Node.js which Gitea Actions needs
for action steps (checkout@v4). Now installs V from source on the
default ubuntu-latest runner image instead.
2026-08-03 14:49:45 -04:00
bruno
72b797704f
feat: phase 3 + phase 4 complete — v0.4.0
...
CI / test (push) Failing after 24s
Phase 3:
- Config reload via SIGHUP (handle_signals loop: .hup reloads config, .int/.term shutdown)
- Hot reload: cfg, webhook_routes, ntfy client, dedup updated without restart
Phase 4:
- Silence rules: POST /api/silence?duration=30m, GET /api/silence, DELETE /api/silence
- Grouping: buffer 10s, events grouped with (×N in 10s) suffix
- CI/CD: .gitea/workflows/ci.yml (build + test on push/PR)
Docs:
- ROADMAP.md: phases 3 & 4 marked DONE, version table updated
- ARCHITECTURE.md: synced with actual code
Version: 0.1.0 → 0.4.0 (main.v, v.mod)
2026-08-03 14:35:59 -04:00
bruno
4e1d7cd94a
Add config validation and dashboard
...
Add YAML config loading with validation, env overrides for secrets, and
a web dashboard exposing health, stats, and recent events.
2026-08-03 12:12:12 -04:00
bruno
3f48912ad7
docs: initial architecture, roadmap, readme for ntfy-bridge
...
- README.md: project overview, quickstart, sources summary
- ARCHITECTURE.md: complete architecture, data flow, project structure
- ROADMAP.md: 5-phase development plan (v0.1.0 → v0.5.0+)
- CONTRIBUTING.md: dev setup, conventions, how to add a source
- ntfy-bridge.example.yaml: fully documented configuration template
- scripts/example-cron-disk.sh: example cron script → ntfy-bridge
2026-08-01 10:56:32 -04:00