fix: make NOTIFY_API_KEY optional — fall back to log-only email mode
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

NOTIFY_URL is a global platform credential; NOTIFY_API_KEY is project-
scoped and may not be provisioned if notify setup failed or the
notifyProvisioner wasn't configured. Previously the service would crash
on startup with "invalid configuration: API key is required" when
NOTIFY_URL was set but NOTIFY_API_KEY was missing.

Now the condition checks both: only initialize the notify client when
both NOTIFY_URL and NOTIFY_API_KEY are set. When either is absent, fall
back to log-only mode with a warning (instead of os.Exit(1)).

This is the correct behavior: email not delivered is survivable, but a
service crash on startup breaks the entire application.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jordan 2026-02-23 05:52:58 -07:00
parent d91bfc50fa
commit a843fd7ff4

View File

@ -173,9 +173,11 @@ func main() {
}
logger.Info("email renderer loaded", "templates", len(emailRenderer.Purposes()))
// Create email sender — notify service in production (NOTIFY_URL set), log-only for dev.
// Create email sender — notify service in production (NOTIFY_URL + NOTIFY_API_KEY set), log-only for dev.
// NOTIFY_URL is a global platform credential; NOTIFY_API_KEY is project-scoped and may not be
// provisioned yet. If either is missing, fall back to log-only mode instead of crashing.
var emailSender port.EmailSender
if cfg.NotifyURL != "" {
if cfg.NotifyURL != "" && cfg.NotifyAPIKey != "" {
notifyClient, err := notify.NewClient(notify.Config{
URL: cfg.NotifyURL,
APIKey: cfg.NotifyAPIKey,
@ -189,7 +191,11 @@ func main() {
logger.Info("email sender initialized (notify)", "url", cfg.NotifyURL, "host", cfg.NotifyHost)
} else {
emailSender = emailadapter.NewLogSender(logger)
logger.Info("email sender initialized (log-only dev mode)")
if cfg.NotifyURL != "" {
logger.Warn("email sender in log-only mode (NOTIFY_API_KEY not set)")
} else {
logger.Info("email sender initialized (log-only dev mode)")
}
}
// Create services (business logic)