From cb4ed19f0b9219f29458efd12e164d270f3eafa1 Mon Sep 17 00:00:00 2001 From: dawn Date: Mon, 29 Jun 2026 22:26:30 +0300 Subject: [PATCH] appview: add types.Pipeline for templates to work also fix a few things in templates themselves Signed-off-by: dawn --- api/tangled/cbor_gen.go | 59 ++++- api/tangled/cidefs.go | 1 + appview/pages/pages.go | 44 +++- appview/pages/templates/repo/index.html | 8 +- appview/pages/templates/repo/log.html | 18 +- .../fragments/pipelineSymbolLong.html | 2 +- appview/pipelines/pipelines.go | 14 +- appview/pulls/list.go | 7 +- appview/pulls/single.go | 6 +- appview/repo/log.go | 4 +- appview/repo/repo_util.go | 10 +- lexicons/ci/defs.json | 3 + spindle/db/pipelines.go | 4 +- types/pipeline.go | 242 ++++++++++++++++++ 14 files changed, 381 insertions(+), 41 deletions(-) create mode 100644 types/pipeline.go diff --git a/api/tangled/cbor_gen.go b/api/tangled/cbor_gen.go index 460a49ff..d54e883a 100644 --- a/api/tangled/cbor_gen.go +++ b/api/tangled/cbor_gen.go @@ -1203,7 +1203,11 @@ func (t *CiDefs_Workflow) MarshalCBOR(w io.Writer) error { } cw := cbg.NewCborWriter(w) - fieldCount := 5 + fieldCount := 6 + + if t.Error == nil { + fieldCount-- + } if t.FinishedAt == nil { fieldCount-- @@ -1263,6 +1267,38 @@ func (t *CiDefs_Workflow) MarshalCBOR(w io.Writer) error { return err } + // t.Error (string) (string) + if t.Error != nil { + + if len("error") > 1000000 { + return xerrors.Errorf("Value in field \"error\" was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("error"))); err != nil { + return err + } + if _, err := cw.WriteString(string("error")); err != nil { + return err + } + + if t.Error == nil { + if _, err := cw.Write(cbg.CborNull); err != nil { + return err + } + } else { + if len(*t.Error) > 1000000 { + return xerrors.Errorf("Value in field t.Error was too long") + } + + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(*t.Error))); err != nil { + return err + } + if _, err := cw.WriteString(string(*t.Error)); err != nil { + return err + } + } + } + // t.Status (string) (string) if len("status") > 1000000 { return xerrors.Errorf("Value in field \"status\" was too long") @@ -1415,6 +1451,27 @@ func (t *CiDefs_Workflow) UnmarshalCBOR(r io.Reader) (err error) { t.Name = string(sval) } + // t.Error (string) (string) + case "error": + + { + b, err := cr.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := cr.UnreadByte(); err != nil { + return err + } + + sval, err := cbg.ReadStringWithMax(cr, 1000000) + if err != nil { + return err + } + + t.Error = (*string)(&sval) + } + } // t.Status (string) (string) case "status": diff --git a/api/tangled/cidefs.go b/api/tangled/cidefs.go index d2360c1a..8edcbe31 100644 --- a/api/tangled/cidefs.go +++ b/api/tangled/cidefs.go @@ -74,6 +74,7 @@ func (t *CiDefs_Pipeline_Trigger) UnmarshalJSON(b []byte) error { // CiDefs_Workflow is a "workflow" in the sh.tangled.ci.defs schema. type CiDefs_Workflow struct { + Error *string `json:"error,omitempty" cborgen:"error,omitempty"` FinishedAt *string `json:"finishedAt,omitempty" cborgen:"finishedAt,omitempty"` // id: Spindle-local workflow id. Unique per pipeline, usually same as name. Id string `json:"id" cborgen:"id"` diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 54714f5b..f99c12f4 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -242,7 +242,11 @@ func (p *Pages) executePlain(name string, w io.Writer, params any) error { return err } - return tpl.Execute(w, params) + err = tpl.Execute(w, params) + if err != nil { + p.logger.Error("failed to execute template", "template", name, "err", err) + } + return err } func (p *Pages) executeLogin(name string, w io.Writer, params any) error { @@ -251,7 +255,11 @@ func (p *Pages) executeLogin(name string, w io.Writer, params any) error { return err } - return tpl.ExecuteTemplate(w, "layouts/base", params) + err = tpl.ExecuteTemplate(w, "layouts/base", params) + if err != nil { + p.logger.Error("failed to execute login template", "template", name, "err", err) + } + return err } func (p *Pages) execute(name string, w io.Writer, params any) error { @@ -260,7 +268,11 @@ func (p *Pages) execute(name string, w io.Writer, params any) error { return err } - return tpl.ExecuteTemplate(w, "layouts/base", params) + err = tpl.ExecuteTemplate(w, "layouts/base", params) + if err != nil { + p.logger.Error("failed to execute template", "template", name, "err", err) + } + return err } func (p *Pages) executeRepo(name string, w io.Writer, params any) error { @@ -269,7 +281,11 @@ func (p *Pages) executeRepo(name string, w io.Writer, params any) error { return err } - return tpl.ExecuteTemplate(w, "layouts/base", params) + err = tpl.ExecuteTemplate(w, "layouts/base", params) + if err != nil { + p.logger.Error("failed to execute repo template", "template", name, "err", err) + } + return err } func (p *Pages) executeProfile(name string, w io.Writer, params any) error { @@ -278,7 +294,11 @@ func (p *Pages) executeProfile(name string, w io.Writer, params any) error { return err } - return tpl.ExecuteTemplate(w, "layouts/base", params) + err = tpl.ExecuteTemplate(w, "layouts/base", params) + if err != nil { + p.logger.Error("failed to execute profile template", "template", name, "err", err) + } + return err } type DollyParams struct { @@ -891,7 +911,7 @@ type RepoIndexParams struct { EmailToDid map[string]string VerifiedCommits commitverify.VerifiedCommits Languages []types.RepoLanguageDetails - Pipelines map[string]*tangled.CiDefs_Pipeline + Pipelines map[string]types.Pipeline NeedsKnotUpgrade bool KnotUnreachable bool types.RepoIndexResponse @@ -960,7 +980,7 @@ type RepoLogParams struct { Active string EmailToDid map[string]string VerifiedCommits commitverify.VerifiedCommits - Pipelines map[string]*tangled.CiDefs_Pipeline + Pipelines map[string]types.Pipeline types.RepoLogResponse } @@ -975,7 +995,7 @@ type RepoCommitParams struct { RepoInfo repoinfo.RepoInfo Active string EmailToDid map[string]string - Pipeline *tangled.CiDefs_Pipeline + Pipeline *types.Pipeline DiffOpts types.DiffOpts // singular because it's always going to be just one @@ -1376,7 +1396,7 @@ type RepoPullsParams struct { FilterQuery string BaseFilterQuery string Stacks []models.Stack - Pipelines map[string]tangled.CiDefs_Pipeline + Pipelines map[string]types.Pipeline LabelDefs map[string]*models.LabelDefinition Page pagination.Page PullCount int @@ -1416,7 +1436,7 @@ type RepoSinglePullParams struct { BranchDeleteStatus *models.BranchDeleteStatus MergeCheck types.MergeCheckResponse ResubmitCheck ResubmitResult - Pipelines map[string]tangled.CiDefs_Pipeline + Pipelines map[string]types.Pipeline Diff types.DiffRenderer DiffOpts types.DiffOpts ActiveRound int @@ -1588,7 +1608,7 @@ func (p *Pages) RepoForks(w io.Writer, params RepoForksParams) error { type PipelinesParams struct { BaseParams RepoInfo repoinfo.RepoInfo - Pipelines []*tangled.CiDefs_Pipeline + Pipelines []types.Pipeline Active string FilterKind string Total int64 @@ -1642,7 +1662,7 @@ func (p *Pages) WorkflowSymbolOOB(w io.Writer, params WorkflowSymbolOOBParams) e type WorkflowParams struct { BaseParams RepoInfo repoinfo.RepoInfo - Pipeline *tangled.CiDefs_Pipeline + Pipeline types.Pipeline Workflow string LogUrl string Active string diff --git a/appview/pages/templates/repo/index.html b/appview/pages/templates/repo/index.html index 828e5656..c4988b28 100644 --- a/appview/pages/templates/repo/index.html +++ b/appview/pages/templates/repo/index.html @@ -260,9 +260,11 @@ {{ $pipeline := index $.Pipelines .Hash.String }} - {{ if and $pipeline (gt (len $pipeline.Statuses) 0) }} -
- {{ template "repo/pipelines/fragments/pipelineSymbolLong" (dict "RepoInfo" $.RepoInfo "Pipeline" $pipeline) }} + {{ if $pipeline }} + {{ if gt (len $pipeline.Statuses) 0 }} +
+ {{ template "repo/pipelines/fragments/pipelineSymbolLong" (dict "RepoInfo" $.RepoInfo "Pipeline" $pipeline) }} + {{ end }} {{ end }} diff --git a/appview/pages/templates/repo/log.html b/appview/pages/templates/repo/log.html index 232f01be..3e4e8111 100644 --- a/appview/pages/templates/repo/log.html +++ b/appview/pages/templates/repo/log.html @@ -73,8 +73,10 @@ {{ $pipeline := index $.Pipelines .Hash.String }} - {{ if and $pipeline (gt (len $pipeline.Statuses) 0) }} - {{ template "repo/pipelines/fragments/pipelineSymbolLong" (dict "Pipeline" $pipeline "RepoInfo" $.RepoInfo) }} + {{ if $pipeline }} + {{ if gt (len $pipeline.Statuses) 0 }} + {{ template "repo/pipelines/fragments/pipelineSymbolLong" (dict "Pipeline" $pipeline "RepoInfo" $.RepoInfo) }} + {{ end }} {{ end }} @@ -157,11 +159,13 @@ {{ $pipeline := index $.Pipelines .Hash.String }} - {{ if and $pipeline (gt (len $pipeline.Statuses) 0) }} -
- - {{ template "repo/pipelines/fragments/pipelineSymbolLong" (dict "Pipeline" $pipeline "RepoInfo" $.RepoInfo) }} - + {{ if $pipeline }} + {{ if gt (len $pipeline.Statuses) 0 }} +
+ + {{ template "repo/pipelines/fragments/pipelineSymbolLong" (dict "Pipeline" $pipeline "RepoInfo" $.RepoInfo) }} + + {{ end }} {{ end }} diff --git a/appview/pages/templates/repo/pipelines/fragments/pipelineSymbolLong.html b/appview/pages/templates/repo/pipelines/fragments/pipelineSymbolLong.html index b6e04742..6a08ddd6 100644 --- a/appview/pages/templates/repo/pipelines/fragments/pipelineSymbolLong.html +++ b/appview/pages/templates/repo/pipelines/fragments/pipelineSymbolLong.html @@ -1,7 +1,7 @@ {{ define "repo/pipelines/fragments/pipelineSymbolLong" }} {{ $pipeline := .Pipeline }} {{ $repoinfo := .RepoInfo }} - {{ $popoverId := printf "pipeline-status-%d" $pipeline.Id }} + {{ $popoverId := printf "pipeline-status-%s" $pipeline.Id }}