spindle: expose knot-side workflow errors as a fake step to the UI #424

merged
opened by winter.bsky.social targeting master from winter.bsky.social/core: push-luoyqwkpromz
Changed files
+31
spindle
+31
spindle/stream.go
···
"fmt"
"io"
"net/http"
+
"os"
"strconv"
"time"
···
filePath := models.LogFilePath(s.cfg.Server.LogDir, wid)
+
if status.Status == models.StatusKindFailed.String() && status.Error != nil {
+
if _, err := os.Stat(filePath); os.IsNotExist(err) {
+
msgs := []models.LogLine{
+
{
+
Kind: models.LogKindControl,
+
Content: "",
+
StepId: 0,
+
StepKind: models.StepKindUser,
+
},
+
{
+
Kind: models.LogKindData,
+
Content: *status.Error,
+
},
+
}
+
+
for _, msg := range msgs {
+
b, err := json.Marshal(msg)
+
if err != nil {
+
return err
+
}
+
+
if err := conn.WriteMessage(websocket.TextMessage, b); err != nil {
+
return fmt.Errorf("failed to write to websocket: %w", err)
+
}
+
}
+
+
return nil
+
}
+
}
+
config := tail.Config{
Follow: !isFinished,
ReOpen: !isFinished,