All checks were successful
CI/CD / detect-changes (pull_request) Successful in 24s
CI/CD / test-frontend (pull_request) Has been skipped
CI/CD / test-go-pg (pull_request) Successful in 2m30s
CI/CD / test-sqlite (pull_request) Successful in 2m37s
CI/CD / build-and-deploy (pull_request) Successful in 1m30s
Three trigger primitives replacing the old monolithic scheduler: - Event triggers: extensions subscribe to bus patterns via manifest, async handler invocation through sandbox.CallEntryPoint - Webhook triggers: inbound HTTP at /api/v1/hooks/:pkg/:slug with HMAC-SHA256 verification and synchronous Starlark response - Scheduled tasks: user-created cron scripts with restricted sandbox (no raw HTTP, no DB table creation), runs as creator identity New tables: triggers, scheduled_tasks, trigger_logs (postgres + sqlite). New permission: triggers.register. Full admin + user CRUD APIs. SyncManifestTriggers hooked into seed and install flows. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
26 lines
580 B
Go
26 lines
580 B
Go
package triggers
|
|
|
|
import "sync"
|
|
|
|
// globalEngine holds a reference to the active trigger engine.
|
|
// Set by SetGlobalEngine at startup, used by handlers that need
|
|
// to wire triggers immediately on package install.
|
|
var (
|
|
globalMu sync.RWMutex
|
|
globalEngine *Engine
|
|
)
|
|
|
|
// SetGlobalEngine stores the engine reference for use by handlers.
|
|
func SetGlobalEngine(e *Engine) {
|
|
globalMu.Lock()
|
|
globalEngine = e
|
|
globalMu.Unlock()
|
|
}
|
|
|
|
// GlobalEngine returns the current engine, or nil.
|
|
func GlobalEngine() *Engine {
|
|
globalMu.RLock()
|
|
defer globalMu.RUnlock()
|
|
return globalEngine
|
|
}
|