bruno
a3e10a68d3
chore-sync-version-0.7.0
CI / build (push) Successful in 6m8s
2026-08-12 08:23:30 -04:00
bruno
3474b8207a
docs: section installation complète depuis Nexus — Linux, RPi, Windows (service + Docker)
CI / build (push) Successful in 4m31s
2026-08-07 09:57:32 -04:00
bruno
b27c0fd496
chore(ci): retire l'étape Publish Release redondante (Nexus suffit)
CI / build (push) Successful in 4m42s
2026-08-07 09:48:29 -04:00
hermes-claw
de5c425f18
fix(ci): utilise le secret RELEASE_TOKEN pour l'API Gitea
CI / build (push) Failing after 4m39s
v0.7.0
2026-08-07 09:31:00 -04:00
bruno
7ee766a1fe
chore: bump version 0.7.0
CI / build (push) Canceled after 3m55s
2026-08-07 09:30:12 -04:00
hermes-claw
bcd3c3a9c7
fix(ci): fait échouer le CI si l'upload Nexus échoue
CI / build (push) Successful in 4m52s
2026-08-06 23:57:40 -04:00
hermes-claw
4050872698
feat(ci): ajoute l'upload Nexus des binaires
CI / build (push) Successful in 4m32s
2026-08-06 23:38:20 -04:00
bruno
46bbf743ca
docs: ajout section Raspberry Pi / ARM64 + install V sur Debian aarch64
CI / build (push) Successful in 4m45s
2026-08-06 17:30:21 -04:00
bruno
ee4a19cc8a
fix: CI — downgrade upload-artifact@v4 vers @v3 (compat Gitea Actions)
CI / build (push) Successful in 5m5s
2026-08-06 17:10:04 -04:00
bruno
32bae70004
fix: CI — installer cross-compilers MinGW (Windows) + ARM64 avant les builds
CI / build (push) Failing after 4m55s
2026-08-06 17:03:13 -04:00
bruno
38ccde3f0b
fix: CI — remplacer env:PATH par export inline (evite ecrasement PATH du runner)
CI / build (push) Failing after 1m49s
2026-08-06 16:56:49 -04:00
bruno
84c90e89ee
fix: CI — V binary symlink + PATH for Gitea Actions runner permissions
CI / build (push) Failing after 10s
2026-08-06 16:53:38 -04:00
bruno
c74ab7429a
chore: bump v0.6.0, update docs + add Docker install to README
CI / build (push) Failing after 12s
2026-08-06 16:50:06 -04:00
bruno
4964362ff4
ci: fallback install V — curl puis git sans submodules si GH offline
CI / build (push) Failing after 10s
2026-08-05 21:31:13 -04:00
bruno
b683aca227
ci: utiliser le binaire V pre-compile (evite le submodule tcc)
CI / build (push) Failing after 10s
2026-08-05 21:29:39 -04:00
bruno
b049b9ce2a
ci: job unique — artifacts sur chaque push, release via API sur tag
...
CI / build (push) Failing after 36s
Un seul job build qui:
1. Build 3 archs (linux amd64, linux arm64, windows amd64)
2. Lance les tests
3. Upload les binaires comme artifacts (dispo dans Actions > Summary)
4. Si tag v*: crée une release Gitea + attache les binaires (curl API)
Plus besoin de job release séparé — tout est dans build.
v0.6.0
2026-08-05 21:26:21 -04:00
bruno
3aec26b09d
ci: workflow unique — artifacts sur chaque push, release sur tag
...
Un seul workflow avec 2 jobs:
- build: compile 3 archs + test + upload artifacts (tous les push/PR)
→ binaires téléchargeables dans l'onglet Actions > Summary > Artifacts
- release: seulement sur tag v*, download les artifacts, crée une
release Gitea avec les 3 binaires attachés (curl API, idempotent)
2026-08-05 21:25:57 -04:00
bruno
e1b68a71f1
ci: split en deux workflows — CI (push main) + Release (tags v*)
...
CI / test (push) Successful in 2m50s
- ci.yml: build + test sur chaque push/PR (lightweight)
- release.yml: cross-compile linux/x86_64, linux/arm64, windows/x86_64
puis crée une release Gitea avec curl + API (idempotent, re-run safe)
2026-08-04 23:11:52 -04:00
bruno
e99591c201
ci: ajout job release — build multi-arch + release auto sur tag
...
CI / test (push) Successful in 3m10s
CI / release (push) Has been skipped
Build sur tags v*: linux x86_64, linux arm64, windows x86_64.
Release Gitea créée automatiquement avec les 3 binaires attachés.
2026-08-04 22:58:33 -04:00
bruno
85f139cd1b
ci: trigger rebuild
CI / test (push) Successful in 3m35s
2026-08-04 22:44:42 -04:00
bruno
1a4808f5f7
feat: v0.6.0 — ACLs multi-utilisateurs + Plugin system
...
CI / test (push) Has been cancelled
**ACLs (Access Control Lists):**
- Ajout du type AclConfig dans sources/event.v (allowed_ips CIDR + allowed_tokens)
- Chaque source webhook (Gitea, Uptime Kuma, Cron, Generic) supporte les ACLs
- Validation IP via X-Forwarded-For / X-Real-IP avant HMAC
- Validation Bearer token via Authorization header
- Tests: 7 tests ACL (IP exact, CIDR, parse IPv4, ACL vide, IP+token combiné)
**Plugin system:**
- sources/plugin.v: runner exécutable externe, stdout JSON → Event
- Exit 0 = publish, exit ≠ 0 = skip. Timeout configurable
- Plugin loop dans server.v (goroutine, toutes les 60s)
- Example: scripts/example-plugin-disk.sh (vérifie espace disque)
**Docs:**
- README.md: ajout source Plugin + section Features complète
- ARCHITECTURE.md: flux Plugin, flux ACL, endpoints /metrics /api/silence
- ROADMAP.md: Phase 5 → 8/8 complet, ajout v0.6.0
- ntfy-bridge.example.yaml: sections ACLs et Plugins commentées
- Version bump: 0.5.0 → 0.6.0
2026-08-04 22:25:48 -04:00
bruno
151dd4a1a8
fix: Docker requires pre-built Linux binary (cannot cross-compile on Windows)
CI / test (push) Failing after 16s
2026-08-03 20:51:53 -04:00
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