Skip to content

feat(notifications): migrate to maintained shoutrrr fork - #258

Merged
s0up4200 merged 3 commits into
developfrom
feat/shoutrrr-fork-migration
Aug 6, 2026
Merged

feat(notifications): migrate to maintained shoutrrr fork#258
s0up4200 merged 3 commits into
developfrom
feat/shoutrrr-fork-migration

Conversation

@s0up4200

@s0up4200 s0up4200 commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

Replaces unmaintained containrrr/shoutrrr v0.8.0 (last release: August 2023) with the maintained fork nicholas-fedor/shoutrrr v0.16.3. Closes #126. URL validation now initializes the service directly, so the API returns the real cause and does not echo credentials. This change also removes two v0.8.0 panics on malformed opsgenie and teams URLs. The ntfy shim stays, because its lenient query-key parsing keeps stored URLs alive. The UI gains 9 services and corrected examples (teams, slack, rocketchat, email → smtp). One user-facing break: Microsoft retired the old Teams connectors, so teams:// channels stop delivering. Users must create them again with a Power Automate webhook URL (see the README warning). The release notes need a callout for this.

Tests: go build ./..., go test ./..., and pnpm -C web build pass. pnpm -C web lint fails on develop already (23 errors, none in changed files). No screenshot: the only UI change is new entries and corrected examples in the service dropdown.

Summary by CodeRabbit

  • New Features

    • Expanded notification integrations and updated connection examples, including SMTP, MQTT, PagerDuty, Signal, Twilio, and Zulip.
    • Added support for secure and non-secure ntfy connections with improved message formatting.
  • Bug Fixes

    • Improved notification URL validation for unsupported or malformed services.
    • Prevented sensitive credentials from appearing in notification errors or URLs.
    • Updated Microsoft Teams webhook migration guidance.
  • Documentation

    • Updated notification documentation to cover more than 25 supported services and link to current guidance.

Replace unmaintained containrrr/shoutrrr v0.8.0 (last release August
2023) with nicholas-fedor/shoutrrr v0.16.3. Closes #126.

- Validate URLs with a direct call to service Initialize. The router in
  the fork hides the real error and echoes credentials from the raw URL.
  The direct call keeps the error and omits the URL. This also removes
  the v0.8.0 panics on malformed opsgenie and teams URLs.
- Use CreateSenderWithOptions with a shared HTTP client. The fork
  deprecates CreateSender.
- Keep the ntfy shim for its lenient query-key parsing. Remove the stale
  Content-Type and credential rationale (fixed upstream in v0.11.1).
  Honor the disabletls key from the fork.
- Fix broken UI examples (teams, slack, rocketchat, email -> smtp). Add
  the new services. Document the Teams Power Automate migration.
- Remove dead MigrateDiscordWebhook.
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f1474336-8b52-445a-9363-cd5f56d6cc37

📥 Commits

Reviewing files that changed from the base of the PR and between 52df12d and 692c6d4.

📒 Files selected for processing (1)
  • .gitignore

📝 Walkthrough

Walkthrough

The notification system now uses a maintained Shoutrrr fork, shared HTTP clients, explicit URL validation, expanded ntfy handling, and a larger web service catalog. Documentation and repository ignore rules were also updated.

Changes

Notification integration migration

Layer / File(s) Summary
Shoutrrr fork and sender integration
go.mod, internal/notifications/notifications.go
The Shoutrrr dependency and imports use the forked module. Sender creation uses a shared HTTP client and explicit service validation.
Ntfy delivery and validation coverage
internal/notifications/ntfy.go, internal/notifications/ntfy_test.go, internal/notifications/validate_test.go
Ntfy requests select HTTP or HTTPS, use Basic authentication and UTF-8 plain text, and share the notification HTTP client. Tests cover malformed Opsgenie and unknown service URLs.
Service catalog and migration documentation
web/src/api/notifications.ts, README.md, .gitignore
The service catalog adds integrations and updates examples. Documentation covers current Shoutrrr, ntfy, and Teams webhook behavior. The full ai_docs/ directory is ignored.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Sequence Diagram(s)

sequenceDiagram
  participant NewNotifierFromURLs
  participant createSender
  participant ShoutrrrRouter
  participant notificationHTTPClient
  participant NtfyServer
  NewNotifierFromURLs->>createSender: create and validate sender
  createSender->>ShoutrrrRouter: initialize service URL
  createSender->>notificationHTTPClient: configure shared client
  NtfyServer-->>notificationHTTPClient: receive notification request
Loading

Poem

A rabbit hops through services bright,
With Shoutrrr paths made neat and right.
Ntfy sends plain text through the air,
New catalog friends appear everywhere.
Webhooks guide the teams in flight—
Hop, hop, notifications delight!

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The .gitignore change for the entire ai_docs/ directory is unrelated to the Shoutrrr migration requested by issue #126. Remove the unrelated .gitignore change or provide a linked requirement that justifies it.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary change: migrating notifications to the maintained Shoutrrr fork.
Description check ✅ Passed The description covers the change, rationale, testing, UI impact, breaking Teams change, and migration guidance, but omits the required template headings and checklist.
Linked Issues check ✅ Passed The PR replaces the unmaintained Shoutrrr dependency with the specified maintained fork, satisfying issue #126.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/shoutrrr-fork-migration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ai_docs/shoutrrr-fork-migration.md`:
- Around line 1-33: Move the migration guide content from the current ai_docs
location into the docs directory, preserving its follow-ups and open questions.
Update any references to the guide as needed, and keep the README limited to a
concise summary if it currently links or describes this migration.

In `@web/src/api/notifications.ts`:
- Line 242: Update the Opsgenie example in the notification URL definitions to
include a valid host authority and API key path, replacing the current
`opsgenie://APIKEY` format with the established `api.opsgenie.com` host pattern.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 49b21056-3f9e-4f9e-b234-11016cd3fcf4

📥 Commits

Reviewing files that changed from the base of the PR and between a0c8176 and 4d87e9d.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (8)
  • README.md
  • ai_docs/shoutrrr-fork-migration.md
  • go.mod
  • internal/notifications/notifications.go
  • internal/notifications/ntfy.go
  • internal/notifications/ntfy_test.go
  • internal/notifications/validate_test.go
  • web/src/api/notifications.ts

Comment thread ai_docs/shoutrrr-fork-migration.md Outdated
Comment thread web/src/api/notifications.ts Outdated
s0up4200 added 2 commits July 31, 2026 23:53
opsgenie://APIKEY parses the key as the host and fails validation. The
correct form puts the API key in the path after the host.
The directory holds local working notes. Ignore the whole directory
instead of single files.
@s0up4200
s0up4200 merged commit 83ae4eb into develop Aug 6, 2026
15 checks passed
@s0up4200
s0up4200 deleted the feat/shoutrrr-fork-migration branch August 6, 2026 13:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Shoutrrr maybe should be replaced or updated

1 participant