@shipfox/client-workflows 16.0.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-type.log +1 -0
- package/CHANGELOG.md +20 -0
- package/dist/components/identifier/identifier.js +2 -2
- package/dist/components/identifier/identifier.js.map +1 -1
- package/dist/components/job-detail/agent-config-failure-callout.d.ts.map +1 -1
- package/dist/components/job-detail/agent-config-failure-callout.js +1 -1
- package/dist/components/job-detail/agent-config-failure-callout.js.map +1 -1
- package/dist/components/job-detail/job-context-panel.d.ts +6 -0
- package/dist/components/job-detail/job-context-panel.d.ts.map +1 -0
- package/dist/components/job-detail/job-context-panel.js +224 -0
- package/dist/components/job-detail/job-context-panel.js.map +1 -0
- package/dist/components/job-detail/job-detail-header.d.ts +3 -1
- package/dist/components/job-detail/job-detail-header.d.ts.map +1 -1
- package/dist/components/job-detail/job-detail-header.js +54 -48
- package/dist/components/job-detail/job-detail-header.js.map +1 -1
- package/dist/components/job-detail/job-detail-view.d.ts +1 -1
- package/dist/components/job-detail/job-detail-view.d.ts.map +1 -1
- package/dist/components/job-detail/job-detail-view.js +80 -44
- package/dist/components/job-detail/job-detail-view.js.map +1 -1
- package/dist/components/job-detail/job-empty-states.d.ts.map +1 -1
- package/dist/components/job-detail/job-empty-states.js +19 -10
- package/dist/components/job-detail/job-empty-states.js.map +1 -1
- package/dist/components/job-detail/job-execution-switcher.js +4 -4
- package/dist/components/job-detail/job-execution-switcher.js.map +1 -1
- package/dist/components/job-detail/json-code.d.ts +14 -0
- package/dist/components/job-detail/json-code.d.ts.map +1 -0
- package/dist/components/job-detail/json-code.js +93 -0
- package/dist/components/job-detail/json-code.js.map +1 -0
- package/dist/components/job-detail/step-attempt-log-panel.d.ts.map +1 -1
- package/dist/components/job-detail/step-attempt-log-panel.js +9 -6
- package/dist/components/job-detail/step-attempt-log-panel.js.map +1 -1
- package/dist/components/job-detail/step-troubleshooting.d.ts +18 -0
- package/dist/components/job-detail/step-troubleshooting.d.ts.map +1 -0
- package/dist/components/job-detail/step-troubleshooting.js +493 -0
- package/dist/components/job-detail/step-troubleshooting.js.map +1 -0
- package/dist/components/job-graph/job-graph-content.d.ts.map +1 -1
- package/dist/components/job-graph/job-graph-content.js +5 -4
- package/dist/components/job-graph/job-graph-content.js.map +1 -1
- package/dist/components/job-graph/job-node.js +3 -3
- package/dist/components/job-graph/job-node.js.map +1 -1
- package/dist/components/step-list/index.d.ts +1 -0
- package/dist/components/step-list/index.d.ts.map +1 -1
- package/dist/components/step-list/index.js.map +1 -1
- package/dist/components/step-list/step-list-model.d.ts.map +1 -1
- package/dist/components/step-list/step-list-model.js +5 -0
- package/dist/components/step-list/step-list-model.js.map +1 -1
- package/dist/components/step-list/step-list.d.ts +5 -1
- package/dist/components/step-list/step-list.d.ts.map +1 -1
- package/dist/components/step-list/step-list.js +117 -82
- package/dist/components/step-list/step-list.js.map +1 -1
- package/dist/components/workflow-run-duration-label.js +1 -1
- package/dist/components/workflow-run-duration-label.js.map +1 -1
- package/dist/components/workflow-run-list/job-status-strip.js +6 -6
- package/dist/components/workflow-run-list/job-status-strip.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-filter-menu.js +1 -1
- package/dist/components/workflow-run-list/workflow-run-filter-menu.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-filters.js +4 -4
- package/dist/components/workflow-run-list/workflow-run-filters.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-list-states.js +6 -6
- package/dist/components/workflow-run-list/workflow-run-list-states.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-list-view.js +1 -1
- package/dist/components/workflow-run-list/workflow-run-list-view.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-row.js +7 -7
- package/dist/components/workflow-run-list/workflow-run-row.js.map +1 -1
- package/dist/components/workflow-run-summary/workflow-run-attempt-switcher.js +1 -1
- package/dist/components/workflow-run-summary/workflow-run-attempt-switcher.js.map +1 -1
- package/dist/components/workflow-run-summary/workflow-run-summary.d.ts +0 -1
- package/dist/components/workflow-run-summary/workflow-run-summary.d.ts.map +1 -1
- package/dist/components/workflow-run-summary/workflow-run-summary.js +8 -13
- package/dist/components/workflow-run-summary/workflow-run-summary.js.map +1 -1
- package/dist/components/workflow-run-tabs/index.d.ts +1 -1
- package/dist/components/workflow-run-tabs/index.d.ts.map +1 -1
- package/dist/components/workflow-run-tabs/index.js.map +1 -1
- package/dist/components/workflow-run-tabs/run-annotation-count-chip.js +2 -2
- package/dist/components/workflow-run-tabs/run-annotation-count-chip.js.map +1 -1
- package/dist/components/workflow-run-tabs/run-annotation-list.d.ts +9 -2
- package/dist/components/workflow-run-tabs/run-annotation-list.d.ts.map +1 -1
- package/dist/components/workflow-run-tabs/run-annotation-list.js +28 -19
- package/dist/components/workflow-run-tabs/run-annotation-list.js.map +1 -1
- package/dist/components/workflow-run-tabs/run-annotation-summary-line.d.ts.map +1 -1
- package/dist/components/workflow-run-tabs/run-annotation-summary-line.js +5 -5
- package/dist/components/workflow-run-tabs/run-annotation-summary-line.js.map +1 -1
- package/dist/components/workflow-run-view/run-workspace-nav.js +7 -7
- package/dist/components/workflow-run-view/run-workspace-nav.js.map +1 -1
- package/dist/components/workflow-run-view/workflow-run-states.js +6 -6
- package/dist/components/workflow-run-view/workflow-run-states.js.map +1 -1
- package/dist/components/workflow-run-view/workflow-run-view.d.ts.map +1 -1
- package/dist/components/workflow-run-view/workflow-run-view.js +72 -12
- package/dist/components/workflow-run-view/workflow-run-view.js.map +1 -1
- package/dist/core/entities/job-execution.d.ts +7 -0
- package/dist/core/entities/job-execution.d.ts.map +1 -1
- package/dist/core/entities/job-execution.js.map +1 -1
- package/dist/core/entities/job.d.ts +9 -0
- package/dist/core/entities/job.d.ts.map +1 -1
- package/dist/core/entities/job.js.map +1 -1
- package/dist/core/entities/step-attempt.d.ts +29 -0
- package/dist/core/entities/step-attempt.d.ts.map +1 -1
- package/dist/core/entities/step-attempt.js.map +1 -1
- package/dist/core/entities/step.d.ts +3 -1
- package/dist/core/entities/step.d.ts.map +1 -1
- package/dist/core/entities/step.js.map +1 -1
- package/dist/core/run-annotation.d.ts +6 -0
- package/dist/core/run-annotation.d.ts.map +1 -1
- package/dist/core/run-annotation.js.map +1 -1
- package/dist/core/workflow-run.d.ts +1 -1
- package/dist/core/workflow-run.d.ts.map +1 -1
- package/dist/core/workflow-run.js.map +1 -1
- package/dist/hooks/api/annotations.d.ts +63 -0
- package/dist/hooks/api/annotations.d.ts.map +1 -0
- package/dist/hooks/api/annotations.js +145 -0
- package/dist/hooks/api/annotations.js.map +1 -0
- package/dist/hooks/api/step-attempt-detail.d.ts +14 -0
- package/dist/hooks/api/step-attempt-detail.d.ts.map +1 -0
- package/dist/hooks/api/step-attempt-detail.js +43 -0
- package/dist/hooks/api/step-attempt-detail.js.map +1 -0
- package/dist/hooks/api/workflow-run-mapper.d.ts +9 -2
- package/dist/hooks/api/workflow-run-mapper.d.ts.map +1 -1
- package/dist/hooks/api/workflow-run-mapper.js +47 -0
- package/dist/hooks/api/workflow-run-mapper.js.map +1 -1
- package/dist/pages/project-workflows-page.js +19 -19
- package/dist/pages/project-workflows-page.js.map +1 -1
- package/dist/pages/workflow-run-list-page.js +1 -1
- package/dist/pages/workflow-run-list-page.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/components/identifier/identifier.tsx +2 -2
- package/src/components/job-detail/agent-config-failure-callout.tsx +5 -1
- package/src/components/job-detail/job-context-panel.test.tsx +72 -0
- package/src/components/job-detail/job-context-panel.tsx +237 -0
- package/src/components/job-detail/job-detail-header.tsx +52 -46
- package/src/components/job-detail/job-detail-view.stories.tsx +555 -53
- package/src/components/job-detail/job-detail-view.tsx +87 -45
- package/src/components/job-detail/job-empty-states.tsx +23 -10
- package/src/components/job-detail/job-execution-switcher.tsx +5 -5
- package/src/components/job-detail/json-code.tsx +120 -0
- package/src/components/job-detail/step-attempt-log-panel.test.tsx +1 -0
- package/src/components/job-detail/step-attempt-log-panel.tsx +17 -6
- package/src/components/job-detail/step-troubleshooting.stories.tsx +120 -0
- package/src/components/job-detail/step-troubleshooting.test.tsx +337 -0
- package/src/components/job-detail/step-troubleshooting.tsx +537 -0
- package/src/components/job-graph/job-graph-content.tsx +4 -3
- package/src/components/job-graph/job-node.tsx +3 -3
- package/src/components/step-list/index.ts +1 -0
- package/src/components/step-list/step-list-model.ts +5 -0
- package/src/components/step-list/step-list.test.tsx +75 -2
- package/src/components/step-list/step-list.tsx +73 -20
- package/src/components/workflow-run-duration-label.tsx +1 -1
- package/src/components/workflow-run-list/job-status-strip.tsx +6 -6
- package/src/components/workflow-run-list/workflow-run-filter-menu.tsx +1 -1
- package/src/components/workflow-run-list/workflow-run-filters.tsx +4 -4
- package/src/components/workflow-run-list/workflow-run-list-states.tsx +6 -6
- package/src/components/workflow-run-list/workflow-run-list-view.tsx +1 -1
- package/src/components/workflow-run-list/workflow-run-row.tsx +7 -7
- package/src/components/workflow-run-summary/workflow-run-attempt-switcher.tsx +1 -1
- package/src/components/workflow-run-summary/workflow-run-summary.test.tsx +1 -1
- package/src/components/workflow-run-summary/workflow-run-summary.tsx +11 -11
- package/src/components/workflow-run-tabs/index.ts +5 -1
- package/src/components/workflow-run-tabs/run-annotation-count-chip.tsx +2 -2
- package/src/components/workflow-run-tabs/run-annotation-list.tsx +25 -10
- package/src/components/workflow-run-tabs/run-annotation-summary-line.tsx +5 -5
- package/src/components/workflow-run-view/run-workspace-nav.tsx +7 -7
- package/src/components/workflow-run-view/workflow-run-states.tsx +6 -6
- package/src/components/workflow-run-view/workflow-run-view.tsx +114 -14
- package/src/core/entities/job-execution.ts +7 -0
- package/src/core/entities/job.ts +9 -0
- package/src/core/entities/step-attempt.ts +33 -0
- package/src/core/entities/step.ts +3 -1
- package/src/core/run-annotation.ts +6 -0
- package/src/core/workflow-run.ts +4 -0
- package/src/hooks/api/annotations.test.ts +84 -0
- package/src/hooks/api/annotations.ts +240 -0
- package/src/hooks/api/step-attempt-detail.ts +67 -0
- package/src/hooks/api/workflow-run-mapper.ts +46 -0
- package/src/hooks/api/workflow-runs.test.tsx +61 -1
- package/src/pages/project-workflows-page.tsx +19 -19
- package/src/pages/workflow-job-detail-page.test.tsx +52 -1
- package/src/pages/workflow-run-list-page.tsx +1 -1
- package/test/fixtures/workflow-run.ts +7 -0
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -66,9 +66,9 @@ function ProjectWorkflowsPageInner({projectId}: {projectId: string}) {
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
return (
|
|
69
|
-
<div className="flex w-full flex-col gap-
|
|
69
|
+
<div className="flex w-full flex-col gap-section">
|
|
70
70
|
{projectQuery.isPending ? (
|
|
71
|
-
<div className="flex flex-col gap-
|
|
71
|
+
<div className="flex flex-col gap-cluster">
|
|
72
72
|
<Skeleton className="h-28 w-1/3" />
|
|
73
73
|
<Skeleton className="h-18 w-1/2" />
|
|
74
74
|
</div>
|
|
@@ -88,7 +88,7 @@ function ProjectWorkflowsPageInner({projectId}: {projectId: string}) {
|
|
|
88
88
|
|
|
89
89
|
{projectQuery.data ? (
|
|
90
90
|
<>
|
|
91
|
-
<header className="flex flex-col gap-
|
|
91
|
+
<header className="flex flex-col gap-tight">
|
|
92
92
|
<Header variant="h2">Workflows</Header>
|
|
93
93
|
<Text size="sm" className="text-foreground-neutral-muted">
|
|
94
94
|
Synced workflow definitions for this project source.
|
|
@@ -170,7 +170,7 @@ function WorkflowDefinitionsList({
|
|
|
170
170
|
}) {
|
|
171
171
|
if (isPending) {
|
|
172
172
|
return (
|
|
173
|
-
<div className="flex flex-col gap-
|
|
173
|
+
<div className="flex flex-col gap-inline">
|
|
174
174
|
<Skeleton className="h-40 w-full" />
|
|
175
175
|
<Skeleton className="h-40 w-full" />
|
|
176
176
|
<Skeleton className="h-40 w-full" />
|
|
@@ -228,11 +228,11 @@ function WorkflowDefinitionsList({
|
|
|
228
228
|
/>
|
|
229
229
|
</TableCell>
|
|
230
230
|
<TableCell className="max-w-260">
|
|
231
|
-
<div className="flex min-w-0 flex-col gap-
|
|
231
|
+
<div className="flex min-w-0 flex-col gap-tight">
|
|
232
232
|
<button
|
|
233
233
|
type="button"
|
|
234
234
|
onClick={() => onOpenDefinition(definition)}
|
|
235
|
-
className="flex min-w-0 flex-col gap-
|
|
235
|
+
className="flex min-w-0 flex-col gap-tight text-left outline-none focus-visible:shadow-border-interactive-with-active rounded-4"
|
|
236
236
|
>
|
|
237
237
|
<Text size="sm" bold className="truncate">
|
|
238
238
|
{definition.name}
|
|
@@ -276,11 +276,11 @@ function WorkflowDefinitionsList({
|
|
|
276
276
|
return (
|
|
277
277
|
<div
|
|
278
278
|
key={definition.id}
|
|
279
|
-
className="flex flex-col gap-
|
|
279
|
+
className="flex flex-col gap-inline border-b border-border-neutral-base p-panel-compact last:border-b-0"
|
|
280
280
|
>
|
|
281
281
|
<button
|
|
282
282
|
type="button"
|
|
283
|
-
className="flex min-w-0 items-start gap-
|
|
283
|
+
className="flex min-w-0 items-start gap-inline text-left"
|
|
284
284
|
onClick={() => onOpenDefinition(definition)}
|
|
285
285
|
>
|
|
286
286
|
<Icon
|
|
@@ -288,7 +288,7 @@ function WorkflowDefinitionsList({
|
|
|
288
288
|
className="size-16 shrink-0 text-foreground-neutral-muted"
|
|
289
289
|
aria-hidden="true"
|
|
290
290
|
/>
|
|
291
|
-
<div className="flex min-w-0 flex-col gap-
|
|
291
|
+
<div className="flex min-w-0 flex-col gap-tight">
|
|
292
292
|
<Text size="sm" bold className="break-words">
|
|
293
293
|
{definition.name}
|
|
294
294
|
</Text>
|
|
@@ -297,7 +297,7 @@ function WorkflowDefinitionsList({
|
|
|
297
297
|
</Code>
|
|
298
298
|
</div>
|
|
299
299
|
</button>
|
|
300
|
-
<div className="flex items-center justify-between gap-
|
|
300
|
+
<div className="flex items-center justify-between gap-inline">
|
|
301
301
|
<Text size="xs" className="text-foreground-neutral-muted">
|
|
302
302
|
Updated <RelativeTime value={definition.updatedAt} />
|
|
303
303
|
</Text>
|
|
@@ -319,7 +319,7 @@ function WorkflowDefinitionsList({
|
|
|
319
319
|
|
|
320
320
|
{isFetchNextPageError ? (
|
|
321
321
|
<Callout role="alert" type="error">
|
|
322
|
-
<div className="flex items-center justify-between gap-
|
|
322
|
+
<div className="flex items-center justify-between gap-cluster">
|
|
323
323
|
<Text size="sm">Could not load more workflows.</Text>
|
|
324
324
|
<Button size="sm" variant="secondary" onClick={onLoadMore}>
|
|
325
325
|
Retry
|
|
@@ -363,7 +363,7 @@ function WorkflowSyncAlert({sync}: {sync: DefinitionSyncSummary | null | undefin
|
|
|
363
363
|
|
|
364
364
|
return (
|
|
365
365
|
<Callout role="alert" type="error">
|
|
366
|
-
<div className="flex flex-col gap-
|
|
366
|
+
<div className="flex flex-col gap-tight">
|
|
367
367
|
<Text size="sm" bold>
|
|
368
368
|
Workflow sync failed
|
|
369
369
|
</Text>
|
|
@@ -388,11 +388,11 @@ function WorkflowSyncWarnings({sync}: {sync: DefinitionSyncSummary | null | unde
|
|
|
388
388
|
|
|
389
389
|
return (
|
|
390
390
|
<Callout role="status" type="warning">
|
|
391
|
-
<div className="flex flex-col gap-
|
|
391
|
+
<div className="flex flex-col gap-inline">
|
|
392
392
|
<Text size="sm" bold>
|
|
393
393
|
Workflow definition warnings
|
|
394
394
|
</Text>
|
|
395
|
-
<ul className="flex flex-col gap-
|
|
395
|
+
<ul className="flex flex-col gap-tight">
|
|
396
396
|
{warningItems.map(({key, warning}) => (
|
|
397
397
|
<li key={key}>
|
|
398
398
|
<Text size="sm">{warning.message}</Text>
|
|
@@ -436,18 +436,18 @@ function DefinitionSheet({
|
|
|
436
436
|
{definition.configPath ?? 'Manual workflow definition'}
|
|
437
437
|
</SheetDescription>
|
|
438
438
|
</SheetHeader>
|
|
439
|
-
<SheetBody className="gap-
|
|
440
|
-
<div className="grid w-full gap-
|
|
439
|
+
<SheetBody className="gap-group">
|
|
440
|
+
<div className="grid w-full gap-inline">
|
|
441
441
|
<Metadata label="Definition id" value={definition.id} />
|
|
442
442
|
<Metadata label="Source" value={definition.source} />
|
|
443
443
|
<Metadata label="Ref" value={definition.ref ?? 'Not set'} />
|
|
444
444
|
<Metadata label="SHA" value={definition.sha ?? 'Not set'} />
|
|
445
445
|
</div>
|
|
446
|
-
<div className="flex w-full flex-col gap-
|
|
446
|
+
<div className="flex w-full flex-col gap-inline">
|
|
447
447
|
<Text size="sm" bold>
|
|
448
448
|
Normalized definition
|
|
449
449
|
</Text>
|
|
450
|
-
<pre className="max-h-[52vh] w-full overflow-auto rounded-8 border border-border-neutral-base bg-background-neutral-subtle p-
|
|
450
|
+
<pre className="max-h-[52vh] w-full overflow-auto rounded-8 border border-border-neutral-base bg-background-neutral-subtle p-panel-compact scrollbar">
|
|
451
451
|
<Code as="code" className="whitespace-pre text-foreground-neutral-base">
|
|
452
452
|
{normalizedJson}
|
|
453
453
|
</Code>
|
|
@@ -463,7 +463,7 @@ function DefinitionSheet({
|
|
|
463
463
|
|
|
464
464
|
function Metadata({label, value}: {label: string; value: string}) {
|
|
465
465
|
return (
|
|
466
|
-
<div className="min-w-0 py-
|
|
466
|
+
<div className="min-w-0 py-row first:pt-0 last:pb-0">
|
|
467
467
|
<Text size="xs" className="text-foreground-neutral-muted">
|
|
468
468
|
{label}
|
|
469
469
|
</Text>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {configureApiClient} from '@shipfox/client-api';
|
|
2
|
-
import {act, screen} from '@testing-library/react';
|
|
2
|
+
import {act, screen, waitFor} from '@testing-library/react';
|
|
3
3
|
import userEvent from '@testing-library/user-event';
|
|
4
4
|
import {workflowRunsQueryKeys} from '#hooks/api/workflow-runs.js';
|
|
5
5
|
import type {WorkflowJobSearch, WorkflowRunsSearch} from '#routes/inputs.js';
|
|
@@ -34,6 +34,7 @@ const RUN_MOVED_ON_PATTERN = /Run moved on to/;
|
|
|
34
34
|
const LINT_LINK_PATTERN = /lint/;
|
|
35
35
|
const RELEASE_LINK_PATTERN = /release/;
|
|
36
36
|
const ANNOTATION_LINK_PATTERN = /annotation/;
|
|
37
|
+
const ANNOTATIONS_LINK_PATTERN = /Annotations/;
|
|
37
38
|
|
|
38
39
|
describe('WorkflowJobDetailPage', () => {
|
|
39
40
|
beforeEach(() => {
|
|
@@ -228,6 +229,56 @@ describe('WorkflowJobDetailPage', () => {
|
|
|
228
229
|
expect(screen.queryByText('This job has no annotations to show.')).not.toBeInTheDocument();
|
|
229
230
|
});
|
|
230
231
|
|
|
232
|
+
test('keeps the job navigation count run-scoped', async () => {
|
|
233
|
+
jobAnnotations.value = Array.from({length: 5}, (_unused, index) => ({
|
|
234
|
+
id: `aaaaaaaa-1111-4aaa-8aaa-${String(index + 1).padStart(12, '0')}`,
|
|
235
|
+
job_id: JOB_ID,
|
|
236
|
+
job_execution_id: EXECUTION_ID,
|
|
237
|
+
origin_step_id: STEP_ID,
|
|
238
|
+
origin_step_attempt: 1,
|
|
239
|
+
context: `annotation-${index + 1}`,
|
|
240
|
+
style: 'error',
|
|
241
|
+
sequence: index + 1,
|
|
242
|
+
body: 'Body',
|
|
243
|
+
}));
|
|
244
|
+
const annotationRequests: URL[] = [];
|
|
245
|
+
const summaryRequests: URL[] = [];
|
|
246
|
+
configureApiClient({
|
|
247
|
+
fetchImpl: vi.fn((input: RequestInfo | URL) => {
|
|
248
|
+
const request = input as Request;
|
|
249
|
+
const url = new URL(request.url);
|
|
250
|
+
if (url.pathname.endsWith('/annotations')) {
|
|
251
|
+
annotationRequests.push(url);
|
|
252
|
+
return jobDetailFetch(input);
|
|
253
|
+
}
|
|
254
|
+
if (url.pathname.endsWith('/annotations/summary')) {
|
|
255
|
+
summaryRequests.push(url);
|
|
256
|
+
const executionScoped = url.searchParams.has('job_execution_id');
|
|
257
|
+
return Promise.resolve(
|
|
258
|
+
jsonResponse({
|
|
259
|
+
total: executionScoped ? 2 : 5,
|
|
260
|
+
error: executionScoped ? 2 : 5,
|
|
261
|
+
warning: 0,
|
|
262
|
+
info: 0,
|
|
263
|
+
success: 0,
|
|
264
|
+
step_counts: [],
|
|
265
|
+
}),
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
return jobDetailFetch(input);
|
|
269
|
+
}),
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
renderJobPath('?runAttempt=1');
|
|
273
|
+
|
|
274
|
+
const annotationsLink = await screen.findByRole('link', {name: ANNOTATIONS_LINK_PATTERN});
|
|
275
|
+
await waitFor(() => expect(annotationsLink).toHaveTextContent('5'));
|
|
276
|
+
expect(annotationRequests.some((url) => !url.searchParams.has('job_execution_id'))).toBe(true);
|
|
277
|
+
expect(
|
|
278
|
+
summaryRequests.some((url) => url.searchParams.get('job_execution_id') === EXECUTION_ID),
|
|
279
|
+
).toBe(true);
|
|
280
|
+
});
|
|
281
|
+
|
|
231
282
|
test('explains a failure that happened before the first step started', async () => {
|
|
232
283
|
configureApiClient({
|
|
233
284
|
fetchImpl: vi.fn(() => Promise.resolve(jsonResponse(failedBeforeStepsDetailDto()))),
|
|
@@ -50,7 +50,7 @@ export function WorkflowRunsPage({
|
|
|
50
50
|
|
|
51
51
|
return (
|
|
52
52
|
<div className="flex min-h-0 flex-1 overflow-hidden bg-background-neutral-base">
|
|
53
|
-
<div className="mx-auto flex min-h-0 w-full max-w-[1120px] flex-1 flex-col px-
|
|
53
|
+
<div className="mx-auto flex min-h-0 w-full max-w-[1120px] flex-1 flex-col px-frame py-frame">
|
|
54
54
|
<WorkflowRunList
|
|
55
55
|
projectId={projectId}
|
|
56
56
|
workspaceSlug={workspaceSlug}
|
|
@@ -233,6 +233,9 @@ export function workflowJobDto(overrides: JobDtoOverrides = {}): WorkflowRunJobD
|
|
|
233
233
|
status: 'pending',
|
|
234
234
|
status_reason: null,
|
|
235
235
|
carried_over: false,
|
|
236
|
+
success: null,
|
|
237
|
+
runner: null,
|
|
238
|
+
evaluation_trace: null,
|
|
236
239
|
listening: null,
|
|
237
240
|
listener_status: 'inactive',
|
|
238
241
|
resolution_reason: null,
|
|
@@ -271,8 +274,10 @@ export function workflowJobExecutionDto(
|
|
|
271
274
|
name: 'build',
|
|
272
275
|
status: 'pending',
|
|
273
276
|
status_reason: null,
|
|
277
|
+
runner: null,
|
|
274
278
|
trigger_events: [],
|
|
275
279
|
outputs: null,
|
|
280
|
+
evaluation_trace: null,
|
|
276
281
|
queued_at: null,
|
|
277
282
|
started_at: null,
|
|
278
283
|
finished_at: null,
|
|
@@ -296,8 +301,10 @@ export function workflowStepDto(
|
|
|
296
301
|
name: 'build',
|
|
297
302
|
source_location: null,
|
|
298
303
|
status: 'pending',
|
|
304
|
+
status_reason: null,
|
|
299
305
|
type: 'run',
|
|
300
306
|
config: {},
|
|
307
|
+
evaluation_trace: null,
|
|
301
308
|
error: null,
|
|
302
309
|
position: 0,
|
|
303
310
|
current_attempt: 1,
|