From c5ec9630a6dc1ec248d455b8ec7c258f28d041ef Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Wed, 26 Aug 2026 17:18:49 +0900 Subject: [PATCH] wip: spindle: support `org.tangled.*` endpoints Signed-off-by: Seongmin Lee --- spindle/db/pipelines.go | 5 +++ spindle/xrpc/org_tangled_ci_get_pipeline.go | 32 +++++++++++++++++++ .../org_tangled_ci_get_workflow_definition.go | 7 ++++ .../xrpc/org_tangled_ci_query_pipelines.go | 7 ++++ .../org_tangled_ci_subscribe_pipeline_logs.go | 7 ++++ spindle/xrpc/org_tangled_secret_add_secret.go | 7 ++++ .../xrpc/org_tangled_secret_list_secrets.go | 7 ++++ .../xrpc/org_tangled_secret_remove_secret.go | 7 ++++ spindle/xrpc/xrpc.go | 14 ++++++++ 9 files changed, 93 insertions(+) create mode 100644 spindle/xrpc/org_tangled_ci_get_pipeline.go create mode 100644 spindle/xrpc/org_tangled_ci_get_workflow_definition.go create mode 100644 spindle/xrpc/org_tangled_ci_query_pipelines.go create mode 100644 spindle/xrpc/org_tangled_ci_subscribe_pipeline_logs.go create mode 100644 spindle/xrpc/org_tangled_secret_add_secret.go create mode 100644 spindle/xrpc/org_tangled_secret_list_secrets.go create mode 100644 spindle/xrpc/org_tangled_secret_remove_secret.go diff --git a/spindle/db/pipelines.go b/spindle/db/pipelines.go index 29c0669f..100fac56 100644 --- a/spindle/db/pipelines.go +++ b/spindle/db/pipelines.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "tangled.org/core/api/org_tangled" "tangled.org/core/api/tangled" "tangled.org/core/orm" "tangled.org/core/spindle/models" @@ -91,6 +92,10 @@ func (d *DB) QueryPipelines(ctx context.Context, repoDid string, commits []strin return pipelines, nextCursor, total, nil } +func (d *DB) GetOrgPipeline(ctx context.Context, rkey string) (*org_tangled.CiPipeline, error) { + panic("unimplemented") +} + func (d *DB) GetPipeline(ctx context.Context, rkey models.PipelineId) (*tangled.CiPipeline, error) { var payload string if err := d.QueryRowContext(ctx, diff --git a/spindle/xrpc/org_tangled_ci_get_pipeline.go b/spindle/xrpc/org_tangled_ci_get_pipeline.go new file mode 100644 index 00000000..521c78fd --- /dev/null +++ b/spindle/xrpc/org_tangled_ci_get_pipeline.go @@ -0,0 +1,32 @@ +package xrpc + +import ( + "fmt" + "net/http" + + xrpcerr "tangled.org/core/xrpc/errors" +) + +func (x *Xrpc) handleOrgTangledCiGetPipeline(w http.ResponseWriter, r *http.Request) { + l := x.Logger + fail := func(e xrpcerr.XrpcError, status int) { + l.Error("failed", "kind", e.Tag, "error", e.Message) + writeError(w, e, status) + } + + pipeline := r.URL.Query().Get("pipeline") + if pipeline == "" { + fail(xrpcerr.GenericError(fmt.Errorf("missing pipeline parameter")), http.StatusBadRequest) + return + } + + p, err := x.Db.GetOrgPipeline(r.Context(), pipeline) + if err != nil { + fail(xrpcerr.GenericError(err), http.StatusInternalServerError) + return + } + + if err := writeJson(w, http.StatusOK, p); err != nil { + fail(xrpcerr.GenericError(err), http.StatusInternalServerError) + } +} diff --git a/spindle/xrpc/org_tangled_ci_get_workflow_definition.go b/spindle/xrpc/org_tangled_ci_get_workflow_definition.go new file mode 100644 index 00000000..c9eeb769 --- /dev/null +++ b/spindle/xrpc/org_tangled_ci_get_workflow_definition.go @@ -0,0 +1,7 @@ +package xrpc + +import "net/http" + +func (x *Xrpc) handleOrgTangledCiGetWorkflowDefinition(w http.ResponseWriter, r *http.Request) { + panic("unimplemented") +} diff --git a/spindle/xrpc/org_tangled_ci_query_pipelines.go b/spindle/xrpc/org_tangled_ci_query_pipelines.go new file mode 100644 index 00000000..58f4efc4 --- /dev/null +++ b/spindle/xrpc/org_tangled_ci_query_pipelines.go @@ -0,0 +1,7 @@ +package xrpc + +import "net/http" + +func (x *Xrpc) handleOrgTangledCiQueryPipelines(w http.ResponseWriter, r *http.Request) { + panic("unimplemented") +} diff --git a/spindle/xrpc/org_tangled_ci_subscribe_pipeline_logs.go b/spindle/xrpc/org_tangled_ci_subscribe_pipeline_logs.go new file mode 100644 index 00000000..357ab997 --- /dev/null +++ b/spindle/xrpc/org_tangled_ci_subscribe_pipeline_logs.go @@ -0,0 +1,7 @@ +package xrpc + +import "net/http" + +func (x *Xrpc) handleOrgTangledCiSubscribePipelineLogs(w http.ResponseWriter, r *http.Request) { + panic("unimplemented") +} diff --git a/spindle/xrpc/org_tangled_secret_add_secret.go b/spindle/xrpc/org_tangled_secret_add_secret.go new file mode 100644 index 00000000..e8310c13 --- /dev/null +++ b/spindle/xrpc/org_tangled_secret_add_secret.go @@ -0,0 +1,7 @@ +package xrpc + +import "net/http" + +func (x *Xrpc) handleOrgTangledSecretAddSecret(w http.ResponseWriter, r *http.Request) { + panic("unimplemented") +} diff --git a/spindle/xrpc/org_tangled_secret_list_secrets.go b/spindle/xrpc/org_tangled_secret_list_secrets.go new file mode 100644 index 00000000..8a03918b --- /dev/null +++ b/spindle/xrpc/org_tangled_secret_list_secrets.go @@ -0,0 +1,7 @@ +package xrpc + +import "net/http" + +func (x *Xrpc) handleOrgTangledSecretListSecrets(w http.ResponseWriter, r *http.Request) { + panic("unimplemented") +} diff --git a/spindle/xrpc/org_tangled_secret_remove_secret.go b/spindle/xrpc/org_tangled_secret_remove_secret.go new file mode 100644 index 00000000..0fdbb6ee --- /dev/null +++ b/spindle/xrpc/org_tangled_secret_remove_secret.go @@ -0,0 +1,7 @@ +package xrpc + +import "net/http" + +func (x *Xrpc) handleOrgTangledSecretRemoveSecret(w http.ResponseWriter, r *http.Request) { + panic("unimplemented") +} diff --git a/spindle/xrpc/xrpc.go b/spindle/xrpc/xrpc.go index 1e97126d..340546b1 100644 --- a/spindle/xrpc/xrpc.go +++ b/spindle/xrpc/xrpc.go @@ -12,6 +12,7 @@ import ( "github.com/bluesky-social/indigo/atproto/syntax" "github.com/go-chi/chi/v5" + "tangled.org/core/api/org_tangled" "tangled.org/core/api/tangled" "tangled.org/core/idresolver" "tangled.org/core/notifier" @@ -67,6 +68,19 @@ type Xrpc struct { func (x *Xrpc) Router() http.Handler { r := chi.NewRouter() + r.Group(func(r chi.Router) { + r.Post("/"+org_tangled.SecretAddSecretNSID, x.handleOrgTangledSecretAddSecret) + r.Post("/"+org_tangled.SecretRemoveSecretNSID, x.handleOrgTangledSecretRemoveSecret) + r.Get("/"+org_tangled.SecretListSecretsNSID, x.handleOrgTangledSecretListSecrets) + // r.Post("/"+org_tangled.CiCancelPipeline, x.handleOrgTangledCiCancelPipeline) + // r.Post("/"+org_tangled.CiTriggerPipeline, x.handleOrgTangledCiTriggerPipeline) + }) + r.Get("/"+org_tangled.CiGetWorkflowDefinitionNSID, x.handleOrgTangledCiGetWorkflowDefinition) + r.Get("/"+org_tangled.CiSubscribePipelineLogsNSID, x.handleOrgTangledCiSubscribePipelineLogs) + r.Get("/"+org_tangled.CiQueryPipelinesNSID, x.handleOrgTangledCiQueryPipelines) + r.Get("/"+org_tangled.CiGetPipelineNSID, x.handleOrgTangledCiGetPipeline) + + // legacy endpoints r.Group(func(r chi.Router) { r.Use(x.ServiceAuth.VerifyServiceAuth) -- 2.51.2