mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2026-05-08 20:58:16 -05:00
[PR #238] [MERGED] feat: add notification system with Ntfy.sh and Apprise support #1603
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/RayLabsHQ/gitea-mirror/pull/238
Author: @arunavo4
Created: 3/18/2026
Status: ✅ Merged
Merged: 3/18/2026
Merged by: @arunavo4
Base:
main← Head:feat/231-notifications📝 Commits (4)
2141f62feat: add notification system with Ntfy.sh and Apprise providers (#231)09d837cfix: address review findings for notification system2c26017fix notification gating and config validation109bb00trim sync notification details📊 Changes
20 files changed (+3497 additions, -20 deletions)
View changed files
➕
docs/NOTIFICATIONS.md(+88 -0)➕
drizzle/0011_notification_config.sql(+1 -0)➕
drizzle/meta/0011_snapshot.json(+2030 -0)📝
drizzle/meta/_journal.json(+8 -1)📝
scripts/validate-migrations.ts(+28 -2)📝
src/components/config/ConfigTabs.tsx(+79 -1)➕
src/components/config/NotificationSettings.tsx(+394 -0)📝
src/lib/db/schema.ts(+30 -0)📝
src/lib/gitea-enhanced.ts(+1 -1)📝
src/lib/helpers.ts(+13 -1)➕
src/lib/notification-service.test.ts(+221 -0)➕
src/lib/notification-service.ts(+165 -0)➕
src/lib/providers/apprise.test.ts(+98 -0)➕
src/lib/providers/apprise.ts(+15 -0)➕
src/lib/providers/ntfy.test.ts(+95 -0)➕
src/lib/providers/ntfy.ts(+21 -0)➕
src/pages/api/config/index.test.ts(+51 -0)📝
src/pages/api/config/index.ts(+92 -14)➕
src/pages/api/notifications/test.ts(+42 -0)📝
src/types/config.ts(+25 -0)📄 Description
Summary
Closes #231 — adds push notification support for mirror events with two providers:
New files (10)
src/lib/providers/ntfy.ts/apprise.ts— Provider implementations (simple fetch calls)src/lib/notification-service.ts— Main service withsendNotification,testNotification,triggerJobNotificationsrc/pages/api/notifications/test.ts— Test notification endpoint with Zod validationsrc/components/config/NotificationSettings.tsx— Settings UI with provider selector, config forms, event toggles, test buttonsrc/lib/providers/ntfy.test.ts/apprise.test.ts/src/lib/notification-service.test.ts— 23 unit testsdrizzle/0011_notification_config.sql— Migration addingnotification_configcolumndocs/NOTIFICATIONS.md— Setup guides for both providers, event types, troubleshootingModified files (7)
src/lib/db/schema.ts— Zod schemas for ntfy, apprise, and notification configsrc/types/config.ts— TypeScript interfaces + addednotificationConfigto API request/response typessrc/lib/helpers.ts— Fire-and-forget notification trigger on terminal job statusessrc/pages/api/config/index.ts— Token encryption/decryption for notification providerssrc/components/config/ConfigTabs.tsx— 4th "Notifications" tab with auto-savedrizzle/meta/_journal.json— Migration journal entryscripts/validate-migrations.ts— Migration validation fixtureDesign decisions
notifyOnNewRepotoggle is disabled with "coming soon" label (schema ready, backend hook not yet wired)Test plan
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.