Give each workflow run a parent task with no agent
This commit is contained in:
@@ -66,6 +66,7 @@ private func stateColor(_ state: String) -> Color {
|
||||
struct WorkflowView: View {
|
||||
@Environment(Store.self) private var store
|
||||
@ViewState private var run: WorkflowRun?
|
||||
@ViewState private var runId: String?
|
||||
@ViewState private var error = ""
|
||||
@ViewState private var target = 0
|
||||
@ViewState private var loading = false
|
||||
@@ -74,8 +75,8 @@ struct WorkflowView: View {
|
||||
var body: some View {
|
||||
let task = store.selectedTaskId.flatMap { store.findTask($0) }
|
||||
VStack(spacing: 0) {
|
||||
if let task, let runId = task.workflowRun {
|
||||
if let run, run.run == runId {
|
||||
if let task, task.workflow != nil {
|
||||
if let run, runId == task.id {
|
||||
HStack(alignment: .firstTextBaseline, spacing: 10) {
|
||||
Text(run.name).font(Fonts.font(13, weight: 700))
|
||||
Text(run.title).foregroundStyle(Palette.muted)
|
||||
@@ -114,13 +115,14 @@ struct WorkflowView: View {
|
||||
EmptyText(text: "Loading…")
|
||||
}
|
||||
} else {
|
||||
EmptyText(text: task != nil ? "This task isn't part of a workflow run." : "No task selected.")
|
||||
EmptyText(text: task != nil ? "This task isn't a workflow run." : "No task selected.")
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: .infinity, alignment: .top)
|
||||
.task(id: store.selectedTaskId) {
|
||||
target += 1
|
||||
run = nil
|
||||
runId = nil
|
||||
error = ""
|
||||
await load()
|
||||
let off = store.events.add { ev in
|
||||
@@ -134,7 +136,7 @@ struct WorkflowView: View {
|
||||
off()
|
||||
target += 1
|
||||
}
|
||||
.onChange(of: task?.workflowRun) {
|
||||
.onChange(of: task?.workflow) {
|
||||
if run == nil && !loading && error.isEmpty {
|
||||
Task {
|
||||
await load()
|
||||
@@ -144,13 +146,13 @@ struct WorkflowView: View {
|
||||
}
|
||||
|
||||
private func relevant(_ ev: ByreEvent) -> Bool {
|
||||
guard ev.seq != 0, let run else {
|
||||
guard ev.seq != 0, let run, let runId else {
|
||||
return false
|
||||
}
|
||||
if ev.kind == "task.created" {
|
||||
return ev.payload.value["workflow_run"] as? String == run.run
|
||||
return ev.payload.value["parent_task_id"] as? String == runId
|
||||
}
|
||||
let ids = Set(run.stages.flatMap { $0.attempts.map(\.taskId) })
|
||||
let ids = Set(run.stages.flatMap { $0.attempts.map(\.taskId) } + [runId])
|
||||
guard let taskId = ev.taskId else {
|
||||
return false
|
||||
}
|
||||
@@ -158,7 +160,7 @@ struct WorkflowView: View {
|
||||
}
|
||||
|
||||
private func load() async {
|
||||
guard let taskId = store.selectedTaskId, store.findTask(taskId)?.workflowRun != nil else {
|
||||
guard let taskId = store.selectedTaskId, store.findTask(taskId)?.workflow != nil else {
|
||||
return
|
||||
}
|
||||
if loading {
|
||||
@@ -172,6 +174,7 @@ struct WorkflowView: View {
|
||||
let fresh = try await store.api.client.getWorkflowRun(path: .init(taskId: taskId)).ok.body.json
|
||||
if started == target {
|
||||
run = fresh
|
||||
runId = taskId
|
||||
error = ""
|
||||
}
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user