appview: improve error handling in knotstream/spindlestream #276

merged
opened by oppi.li targeting master from push-vquoltwpkuny
Changed files
+17 -15
appview
knotserver
+7 -8
appview/state/knotstream.go
···
// trigger info
var trigger db.Trigger
var sha string
-
switch record.TriggerMetadata.Kind {
+
trigger.Kind = workflow.TriggerKind(record.TriggerMetadata.Kind)
+
switch trigger.Kind {
case workflow.TriggerKindPush:
-
trigger.Kind = workflow.TriggerKindPush
trigger.PushRef = &record.TriggerMetadata.Push.Ref
trigger.PushNewSha = &record.TriggerMetadata.Push.NewSha
trigger.PushOldSha = &record.TriggerMetadata.Push.OldSha
sha = *trigger.PushNewSha
case workflow.TriggerKindPullRequest:
-
trigger.Kind = workflow.TriggerKindPush
trigger.PRSourceBranch = &record.TriggerMetadata.PullRequest.SourceBranch
trigger.PRTargetBranch = &record.TriggerMetadata.PullRequest.TargetBranch
trigger.PRSourceSha = &record.TriggerMetadata.PullRequest.SourceSha
···
tx, err := d.Begin()
if err != nil {
-
return err
+
return fmt.Errorf("failed to start txn: %w", err)
}
triggerId, err := db.AddTrigger(tx, trigger)
if err != nil {
-
return err
+
return fmt.Errorf("failed to add trigger entry: %w", err)
}
pipeline := db.Pipeline{
···
err = db.AddPipeline(tx, pipeline)
if err != nil {
-
return err
+
return fmt.Errorf("failed to add pipeline: %w", err)
}
err = tx.Commit()
if err != nil {
-
return err
+
return fmt.Errorf("failed to commit txn: %w", err)
}
-
return err
+
return nil
}
+7 -1
appview/state/spindlestream.go
···
import (
"context"
"encoding/json"
+
"fmt"
"log/slog"
"strings"
"time"
···
ExitCode: exitCode,
}
-
return db.AddPipelineStatus(d, status)
+
err = db.AddPipelineStatus(d, status)
+
if err != nil {
+
return fmt.Errorf("failed to add pipeline status: %w", err)
+
}
+
+
return nil
}
+2 -6
knotserver/internal.go
···
}
func (h *InternalHandle) triggerPipeline(line git.PostReceiveLine, gitUserDid, repoDid, repoName string) error {
-
const (
-
WorkflowDir = ".tangled/workflows"
-
)
-
didSlashRepo, err := securejoin.SecureJoin(repoDid, repoName)
if err != nil {
return err
···
return err
}
-
workflowDir, err := gr.FileTree(context.Background(), WorkflowDir)
+
workflowDir, err := gr.FileTree(context.Background(), workflow.WorkflowDir)
if err != nil {
return err
}
···
continue
}
-
fpath := filepath.Join(WorkflowDir, e.Name)
+
fpath := filepath.Join(workflow.WorkflowDir, e.Name)
contents, err := gr.RawContent(fpath)
if err != nil {
continue
+1
knotserver/server.go
···
jc, err := jetstream.NewJetstreamClient(c.Server.JetstreamEndpoint, "knotserver", []string{
tangled.PublicKeyNSID,
tangled.KnotMemberNSID,
+
tangled.RepoPullNSID,
}, nil, logger, db, true, c.Server.LogDids)
if err != nil {
logger.Error("failed to setup jetstream", "error", err)