From 7cd8b456576f8968d722dbd2a6928b726e762483 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Thu, 27 Aug 2026 12:26:10 +0000 Subject: [PATCH] lexicons,api,web,appview,docs: use rkey for pipelineId Signed-off-by: Seongmin Lee --- docs/DOCS.md | 2 +- api/tangled/citriggerPipeline.go | 2 +- appview/models/pipeline.go | 9 --------- appview/pipelines/pipelines.go | 44 +++++++++++++++++++++++--------------------- lexicons/ci/triggerPipeline.json | 3 +-- web/src/lib/api/lexicons/types/sh/tangled/ci/triggerPipeline.ts | 4 ++-- 6 file(s) changed, 28 insertion(s)(+), 36 deletion(s)(-) diff --git a/docs/DOCS.md b/docs/DOCS.md --- a/docs/DOCS.md +++ b/docs/DOCS.md @@ -933,7 +933,7 @@ By default, the following environment variables are set: - `CI` - Always set to `true` to indicate a CI environment -- `TANGLED_PIPELINE_ID` - The AT URI of the current pipeline +- `TANGLED_PIPELINE_ID` - The id of the current pipeline - `TANGLED_PIPELINE_KIND` - One of `push`, `pull_request` or `manual` - `TANGLED_REPO_KNOT` - The repository's knot hostname diff --git a/api/tangled/citriggerPipeline.go b/api/tangled/citriggerPipeline.go --- a/api/tangled/citriggerPipeline.go +++ b/api/tangled/citriggerPipeline.go @@ -64,7 +64,7 @@ // CiTriggerPipeline_Output is the output of a sh.tangled.ci.triggerPipeline call. type CiTriggerPipeline_Output struct { - // pipeline: AT-URI of the created pipeline + // pipeline: Spindle-local id of the created pipeline Pipeline string `json:"pipeline" cborgen:"pipeline"` } diff --git a/appview/models/pipeline.go b/appview/models/pipeline.go --- a/appview/models/pipeline.go +++ b/appview/models/pipeline.go @@ -8,7 +8,6 @@ "github.com/bluesky-social/indigo/atproto/syntax" "github.com/go-git/go-git/v5/plumbing" - "tangled.org/core/api/tangled" spindle "tangled.org/core/spindle/models" "tangled.org/core/workflow" ) @@ -27,10 +26,6 @@ // populate when querying for reverse mappings Trigger *Trigger Statuses map[string]WorkflowStatus -} - -func (p *Pipeline) AtUri() syntax.ATURI { - return syntax.ATURI(fmt.Sprintf("at://did:web:%s/%s/%s", p.Knot, tangled.PipelineNSID, p.Rkey)) } type WorkflowStatus struct { @@ -197,8 +192,4 @@ return rest } return strings.Join(lines[:truncateTo], "\n") + "\n…" -} - -func (ps *PipelineStatus) PipelineAt() syntax.ATURI { - return syntax.ATURI(fmt.Sprintf("at://did:web:%s/%s/%s", ps.PipelineKnot, tangled.PipelineNSID, ps.PipelineRkey)) } diff --git a/appview/pipelines/pipelines.go b/appview/pipelines/pipelines.go --- a/appview/pipelines/pipelines.go +++ b/appview/pipelines/pipelines.go @@ -24,7 +24,6 @@ "tangled.org/core/rbac" "tangled.org/core/types" - "github.com/bluesky-social/indigo/atproto/syntax" indigoxrpc "github.com/bluesky-social/indigo/xrpc" "github.com/go-chi/chi/v5" "github.com/gorilla/websocket" @@ -229,9 +228,10 @@ return } - pipelineId, err := syntax.ParseTID(chi.URLParam(r, "pipeline")) - if err != nil { - l.Debug("invalid pipeline id", "id", pipelineId) + // pipeline ids are opaque, any format the spindle minted + pipelineId := chi.URLParam(r, "pipeline") + if pipelineId == "" { + l.Debug("missing pipeline id") p.pages.Error404(w) return } @@ -261,7 +261,7 @@ } xrpcc := &indigoxrpc.Client{Host: spindleUrl} - out, err := tangled.CiGetPipeline(r.Context(), xrpcc, pipelineId.String()) + out, err := tangled.CiGetPipeline(r.Context(), xrpcc, pipelineId) if err != nil { // TODO(boltless): change behavior based on error l.Debug("failed to get pipeline", "err", err) @@ -391,9 +391,10 @@ return } - pipelineId, err := syntax.ParseTID(chi.URLParam(r, "pipeline")) - if err != nil { - l.Debug("invalid pipeline id", "id", pipelineId) + // pipeline ids are opaque, any format the spindle minted + pipelineId := chi.URLParam(r, "pipeline") + if pipelineId == "" { + l.Debug("missing pipeline id") http.Error(w, "invalid pipeline id", http.StatusBadRequest) return } @@ -426,7 +427,7 @@ sched := &webLogScheduler{ch: evChan} xrpcc := &lexutil.Client{Client: indigoxrpc.Client{Host: spindleUrl}} go func() { - done <- tangled.CiSubscribePipelineLogs(ctx, xrpcc, pipelineId.String(), []string{workflowName}, sched) + done <- tangled.CiSubscribePipelineLogs(ctx, xrpcc, pipelineId, []string{workflowName}, sched) }() var lastWriteLk sync.Mutex @@ -594,9 +595,10 @@ return } - pipelineId, err := syntax.ParseTID(chi.URLParam(r, "pipeline")) - if err != nil { - l.Debug("invalid pipeline id", "id", pipelineId) + // pipeline ids are opaque, any format the spindle minted + pipelineId := chi.URLParam(r, "pipeline") + if pipelineId == "" { + l.Debug("missing pipeline id") p.pages.Error404(w) return } @@ -614,7 +616,7 @@ spindleClient, &tangled.CiCancelPipeline_Input{ Repo: f.RepoDid, - Pipeline: pipelineId.String(), + Pipeline: pipelineId, Workflows: workflows, }, ); err != nil { @@ -664,9 +666,10 @@ return } - pipelineId, err := syntax.ParseTID(chi.URLParam(r, "pipeline")) - if err != nil { - l.Debug("invalid pipeline id", "id", pipelineId) + // pipeline ids are opaque, any format the spindle minted + pipelineId := chi.URLParam(r, "pipeline") + if pipelineId == "" { + l.Debug("missing pipeline id") p.pages.Error404(w) return } @@ -680,7 +683,7 @@ // fetch the original pipeline to replay the same commit and workflows queryClient := &indigoxrpc.Client{Host: spindleUrl} - orig, err := tangled.CiGetPipeline(r.Context(), queryClient, pipelineId.String()) + orig, err := tangled.CiGetPipeline(r.Context(), queryClient, pipelineId) if err != nil { fail("failed to load the original pipeline", err) return @@ -725,12 +728,11 @@ return } - newAt, err := syntax.ParseATURI(out.Pipeline) - if err != nil { - fail("pipeline triggered, but the response was malformed", err) + newId := out.Pipeline + if newId == "" { + fail("pipeline triggered, but the response was malformed", fmt.Errorf("empty pipeline id")) return } - newId := newAt.RecordKey().String() l = l.With("new", newId) l.Info("pipeline retried") diff --git a/lexicons/ci/triggerPipeline.json b/lexicons/ci/triggerPipeline.json --- a/lexicons/ci/triggerPipeline.json +++ b/lexicons/ci/triggerPipeline.json @@ -43,8 +43,7 @@ "properties": { "pipeline": { "type": "string", - "format": "at-uri", - "description": "AT-URI of the created pipeline" + "description": "Spindle-local id of the created pipeline" } } } diff --git a/web/src/lib/api/lexicons/types/sh/tangled/ci/triggerPipeline.ts b/web/src/lib/api/lexicons/types/sh/tangled/ci/triggerPipeline.ts --- a/web/src/lib/api/lexicons/types/sh/tangled/ci/triggerPipeline.ts +++ b/web/src/lib/api/lexicons/types/sh/tangled/ci/triggerPipeline.ts @@ -33,9 +33,9 @@ type: "lex", schema: /*#__PURE__*/ v.object({ /** - * AT-URI of the created pipeline + * Spindle-local id of the created pipeline */ - pipeline: /*#__PURE__*/ v.resourceUriString(), + pipeline: /*#__PURE__*/ v.string(), }), }, }); -- tangled.sh