diff --git a/appview/pipelines/pipelines.go b/appview/pipelines/pipelines.go new file mode 100644 index 00000000..4eeff88b --- /dev/null +++ b/appview/pipelines/pipelines.go @@ -0,0 +1,58 @@ +package pipelines + +import ( + "log/slog" + "net/http" + + "tangled.sh/tangled.sh/core/appview/config" + "tangled.sh/tangled.sh/core/appview/db" + "tangled.sh/tangled.sh/core/appview/idresolver" + "tangled.sh/tangled.sh/core/appview/oauth" + "tangled.sh/tangled.sh/core/appview/pages" + "tangled.sh/tangled.sh/core/appview/reporesolver" + "tangled.sh/tangled.sh/core/eventconsumer" + "tangled.sh/tangled.sh/core/log" + "tangled.sh/tangled.sh/core/rbac" + + "github.com/go-chi/chi/v5" + "github.com/posthog/posthog-go" +) + +type Pipelines struct { + repoResolver *reporesolver.RepoResolver + idResolver *idresolver.Resolver + config *config.Config + oauth *oauth.OAuth + pages *pages.Pages + spindlestream *eventconsumer.Consumer + db *db.DB + enforcer *rbac.Enforcer + posthog posthog.Client + Logger *slog.Logger +} + +func New( + oauth *oauth.OAuth, + repoResolver *reporesolver.RepoResolver, + pages *pages.Pages, + spindlestream *eventconsumer.Consumer, + idResolver *idresolver.Resolver, + db *db.DB, + config *config.Config, + posthog posthog.Client, + enforcer *rbac.Enforcer, +) *Pipelines { + logger := log.New("pipelines") + + return &Pipelines{oauth: oauth, + repoResolver: repoResolver, + pages: pages, + idResolver: idResolver, + config: config, + spindlestream: spindlestream, + db: db, + posthog: posthog, + enforcer: enforcer, + Logger: logger, + } +} diff --git a/appview/pipelines/router.go b/appview/pipelines/router.go new file mode 100644 index 00000000..e0a0947f --- /dev/null +++ b/appview/pipelines/router.go @@ -0,0 +1,16 @@ +package pipelines + +import ( + "net/http" + + "github.com/go-chi/chi/v5" + "tangled.sh/tangled.sh/core/appview/middleware" +) + +func (p *Pipelines) Router(mw *middleware.Middleware) http.Handler { + r := chi.NewRouter() + r.Get("/", p.Index) + r.Get("/{pipeline}/workflow/{workflow}", p.Workflow) + + return r +} diff --git a/appview/state/router.go b/appview/state/router.go index 9825105e..6849130d 100644 --- a/appview/state/router.go +++ b/appview/state/router.go @@ -9,6 +9,7 @@ import ( "tangled.sh/tangled.sh/core/appview/issues" "tangled.sh/tangled.sh/core/appview/middleware" oauthhandler "tangled.sh/tangled.sh/core/appview/oauth/handler" + "tangled.sh/tangled.sh/core/appview/pipelines" "tangled.sh/tangled.sh/core/appview/pulls" "tangled.sh/tangled.sh/core/appview/repo" "tangled.sh/tangled.sh/core/appview/settings" @@ -76,6 +77,7 @@ func (s *State) UserRouter(mw *middleware.Middleware) http.Handler { r.Mount("/", s.RepoRouter(mw)) r.Mount("/issues", s.IssuesRouter(mw)) r.Mount("/pulls", s.PullsRouter(mw)) + r.Mount("/pipelines", s.PipelinesRouter(mw)) // These routes get proxied to the knot r.Get("/info/refs", s.InfoRefs) @@ -202,3 +204,8 @@ func (s *State) RepoRouter(mw *middleware.Middleware) http.Handler { repo := repo.New(s.oauth, s.repoResolver, s.pages, s.spindlestream, s.idResolver, s.db, s.config, s.posthog, s.enforcer) return repo.Router(mw) } + +func (s *State) PipelinesRouter(mw *middleware.Middleware) http.Handler { + pipes := pipelines.New(s.oauth, s.repoResolver, s.pages, s.spindlestream, s.idResolver, s.db, s.config, s.posthog, s.enforcer) + return pipes.Router(mw) +}