Skip to content

Commit a0b0be1

Browse files
committed
fix: typecheck regression and dead code cleanup after otelia removal
- Fix trailing comma in packages/duron/package.json exports (root cause of TS1295 errors) - Remove dead spans-related code from dashboard (SpansProvider, spans-panel, spans-context refs) - Remove unused imports/variables left from otelia removal (adapter.ts, schema.ts, base.ts, test files) - Run oxfmt on affected files
1 parent 8bc1e53 commit a0b0be1

17 files changed

Lines changed: 121 additions & 437 deletions

File tree

bun.lock

Lines changed: 12 additions & 219 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/adr/0001-remove-local-span-storage.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ Meanwhile, the OpenTelemetry ecosystem already provides production-grade span st
2626
Remove `telemetry.local` entirely. Keep the OTel instrumentation (`@opentelemetry/api` context propagation, span creation in `step-manager.ts` and `action-job.ts`) and the `telemetry.traceExporter` path for sending spans to external OTel collectors.
2727

2828
### What stays
29+
2930
- `@opentelemetry/api` as a regular dependency
3031
- `ctx.telemetry.span / tracer / track() / flush()` in action contexts
3132
- Context propagation and automatic span creation
3233
- `telemetry: { traceExporter: exporter }` configuration
3334
- `traceExporter` now accepts `SpanExporter | SpanExporter[]`
3435

3536
### What is removed
37+
3638
- `telemetry.local` option and `LocalTelemetryOptions` type
3739
- `spans` table from the schema
3840
- `LocalSpanExporter` class
@@ -44,11 +46,14 @@ Remove `telemetry.local` entirely. Keep the OTel instrumentation (`@opentelemetr
4446
- `@opentelemetry/sdk-trace-base`, `@opentelemetry/sdk-node`, `@opentelemetry/resources`, `@opentelemetry/semantic-conventions` as direct dependencies
4547

4648
### New optional peer dependencies
49+
4750
Users who want external OTel export install these themselves:
51+
4852
- `@opentelemetry/sdk-trace-base`
4953
- `@opentelemetry/sdk-node`
5054

5155
### Error handling
56+
5257
If `traceExporter` is provided but `@opentelemetry/sdk-node` is not installed, Duron throws at startup with a clear message.
5358

5459
## Consequences

packages/duron-dashboard/src/DuronDashboard.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { ApiProvider, type CustomFetch } from './contexts/api-context'
55
import { AuthProvider, useAuth } from './contexts/auth-context'
66
import { LayoutProvider } from './contexts/layout-context'
77
import { PollingProvider } from './contexts/polling-context'
8-
import { SpansProvider } from './contexts/spans-context'
98
import { type ThemeOption, ThemeProvider } from './contexts/theme-context'
109
import { Dashboard } from './views/dashboard'
1110
import Login from './views/login'
@@ -110,14 +109,12 @@ export function DuronDashboard({
110109
<PollingProvider pollingInterval={pollingInterval}>
111110
<ApiProvider baseUrl={url} customFetch={customFetch}>
112111
<AuthProvider>
113-
<SpansProvider>
114-
<AppContent
115-
enableLogin={enableLogin}
116-
showLogo={showLogo}
117-
showThemeToggle={showThemeToggle}
118-
className={className}
119-
/>
120-
</SpansProvider>
112+
<AppContent
113+
enableLogin={enableLogin}
114+
showLogo={showLogo}
115+
showThemeToggle={showThemeToggle}
116+
className={className}
117+
/>
121118
</AuthProvider>
122119
</ApiProvider>
123120
</PollingProvider>

packages/duron-dashboard/src/dev.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ const client = duron({
1919
},
2020
variables,
2121
logger: 'info',
22-
telemetry: {
23-
local: true,
24-
},
2522
})
2623

2724
const app = createServer({
@@ -33,7 +30,6 @@ const app = createServer({
3330
jwtSecret: process.env.JWT_SECRET || 'dev-secret-key-change-in-production',
3431
expirationTime: '1d',
3532
},
36-
spansEnabled: true,
3733
})
3834

3935
const server = serve({

packages/duron-dashboard/src/views/job-details.tsx

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client'
22

3-
import { Activity, MoreVertical, Play, X } from 'lucide-react'
3+
import { MoreVertical, Play, X } from 'lucide-react'
44
import { useCallback, useEffect, useState } from 'react'
55

66
import { Button } from '@/components/ui/button'
@@ -11,15 +11,13 @@ import {
1111
DropdownMenuTrigger,
1212
} from '@/components/ui/dropdown-menu'
1313
import { ScrollArea, ScrollBar } from '@/components/ui/scroll-area'
14-
import { useSpans } from '@/contexts/spans-context'
1514
import { useJobStatusPolling } from '@/hooks/use-job-status-polling'
1615
import { useCancelJob, useDeleteJob, useJob, useRetryJob } from '@/lib/api'
1716
import { calculateDurationMs, formatMs } from '@/lib/duration'
1817
import { formatDate } from '@/lib/format'
1918

2019
import { BadgeStatus } from '../components/badge-status'
2120
import { JsonView } from '../components/json-view'
22-
import { JobSpansModal } from '../components/spans-panel'
2321
import { isExpiring } from '../lib/is-expiring'
2422

2523
interface JobDetailsProps {
@@ -29,8 +27,6 @@ interface JobDetailsProps {
2927

3028
export function JobDetails({ jobId, onClose }: JobDetailsProps) {
3129
const { data: job, isLoading: jobLoading } = useJob(jobId)
32-
const { spansEnabled } = useSpans()
33-
const [showSpans, setShowSpans] = useState(false)
3430

3531
// Enable polling for job status updates - refetches entire job detail when status changes
3632
useJobStatusPolling(jobId, true)
@@ -139,12 +135,7 @@ export function JobDetails({ jobId, onClose }: JobDetailsProps) {
139135
<Play className="h-4 w-4 mr-2" />
140136
Retry
141137
</DropdownMenuItem>
142-
{spansEnabled && (
143-
<DropdownMenuItem onClick={() => setShowSpans(!showSpans)}>
144-
<Activity className="h-4 w-4 mr-2" />
145-
{showSpans ? 'Hide Spans' : 'Show Spans'}
146-
</DropdownMenuItem>
147-
)}
138+
148139
<DropdownMenuItem
149140
onClick={handleCancel}
150141
disabled={
@@ -300,11 +291,6 @@ export function JobDetails({ jobId, onClose }: JobDetailsProps) {
300291
</div>
301292
<ScrollBar orientation="horizontal" />
302293
</ScrollArea>
303-
304-
{/* Spans Modal */}
305-
{spansEnabled && (
306-
<JobSpansModal jobId={job.id} open={showSpans} onClose={() => setShowSpans(false)} />
307-
)}
308294
</div>
309295
)
310296
}

packages/duron-dashboard/src/views/step-details-content.tsx

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
'use client'
22

3-
import { Activity } from 'lucide-react'
43
import { useCallback, useEffect, useState } from 'react'
54

65
import { JsonView } from '@/components/json-view'
7-
import { StepSpansModal } from '@/components/spans-panel'
8-
import { Button } from '@/components/ui/button'
96
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
10-
import { useSpans } from '@/contexts/spans-context'
117
import { useStepStatusPolling } from '@/hooks/use-step-status-polling'
128
import { useStep } from '@/lib/api'
139
import { calculateDurationMs, formatMs } from '@/lib/duration'
@@ -24,8 +20,6 @@ interface StepDetailsContentProps {
2420
export function StepDetailsContent({ stepId, jobId }: StepDetailsContentProps) {
2521
// Fetch the full step data including output
2622
const { data: step, isLoading, error } = useStep(stepId)
27-
const { spansEnabled } = useSpans()
28-
const [showSpans, setShowSpans] = useState(false)
2923

3024
// Enable polling for individual step status updates
3125
useStepStatusPolling(stepId, jobId, true)
@@ -195,21 +189,6 @@ export function StepDetailsContent({ stepId, jobId }: StepDetailsContentProps) {
195189
</div>
196190
</div>
197191
)}
198-
199-
{/* Spans Button */}
200-
{spansEnabled && (
201-
<div>
202-
<Button variant="outline" size="sm" onClick={() => setShowSpans(true)} className="w-full">
203-
<Activity className="h-4 w-4 mr-2" />
204-
View Spans
205-
</Button>
206-
</div>
207-
)}
208-
209-
{/* Spans Modal */}
210-
{spansEnabled && (
211-
<StepSpansModal stepId={step.id} open={showSpans} onClose={() => setShowSpans(false)} />
212-
)}
213192
</div>
214193
)
215194
}

packages/duron/migrations/postgres/20260720194140_regular_sharon_ventura/snapshot.json

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
"version": "8",
33
"dialect": "postgres",
44
"id": "9327c26b-9fb5-47d2-b3ad-1be9a54d551c",
5-
"prevIds": [
6-
"00000000-0000-0000-0000-000000000000"
7-
],
5+
"prevIds": ["00000000-0000-0000-0000-000000000000"],
86
"ddl": [
97
{
108
"name": "duron",
@@ -1789,14 +1787,10 @@
17891787
},
17901788
{
17911789
"nameExplicit": false,
1792-
"columns": [
1793-
"job_id"
1794-
],
1790+
"columns": ["job_id"],
17951791
"schemaTo": "duron",
17961792
"tableTo": "jobs_active",
1797-
"columnsTo": [
1798-
"id"
1799-
],
1793+
"columnsTo": ["id"],
18001794
"onUpdate": "NO ACTION",
18011795
"onDelete": "CASCADE",
18021796
"name": "job_steps_active_job_id_jobs_active_id_fkey",
@@ -1806,14 +1800,10 @@
18061800
},
18071801
{
18081802
"nameExplicit": false,
1809-
"columns": [
1810-
"job_id"
1811-
],
1803+
"columns": ["job_id"],
18121804
"schemaTo": "duron",
18131805
"tableTo": "jobs_archive",
1814-
"columnsTo": [
1815-
"id"
1816-
],
1806+
"columnsTo": ["id"],
18171807
"onUpdate": "NO ACTION",
18181808
"onDelete": "CASCADE",
18191809
"name": "job_steps_archive_job_id_jobs_archive_id_fkey",
@@ -1822,49 +1812,39 @@
18221812
"table": "job_steps_archive"
18231813
},
18241814
{
1825-
"columns": [
1826-
"id"
1827-
],
1815+
"columns": ["id"],
18281816
"nameExplicit": false,
18291817
"name": "job_steps_active_pkey",
18301818
"schema": "duron",
18311819
"table": "job_steps_active",
18321820
"entityType": "pks"
18331821
},
18341822
{
1835-
"columns": [
1836-
"id"
1837-
],
1823+
"columns": ["id"],
18381824
"nameExplicit": false,
18391825
"name": "job_steps_archive_pkey",
18401826
"schema": "duron",
18411827
"table": "job_steps_archive",
18421828
"entityType": "pks"
18431829
},
18441830
{
1845-
"columns": [
1846-
"id"
1847-
],
1831+
"columns": ["id"],
18481832
"nameExplicit": false,
18491833
"name": "jobs_active_pkey",
18501834
"schema": "duron",
18511835
"table": "jobs_active",
18521836
"entityType": "pks"
18531837
},
18541838
{
1855-
"columns": [
1856-
"id"
1857-
],
1839+
"columns": ["id"],
18581840
"nameExplicit": false,
18591841
"name": "jobs_archive_pkey",
18601842
"schema": "duron",
18611843
"table": "jobs_archive",
18621844
"entityType": "pks"
18631845
},
18641846
{
1865-
"columns": [
1866-
"id"
1867-
],
1847+
"columns": ["id"],
18681848
"nameExplicit": false,
18691849
"name": "spans_pkey",
18701850
"schema": "duron",
@@ -1873,11 +1853,7 @@
18731853
},
18741854
{
18751855
"nameExplicit": true,
1876-
"columns": [
1877-
"job_id",
1878-
"name",
1879-
"parent_step_id"
1880-
],
1856+
"columns": ["job_id", "name", "parent_step_id"],
18811857
"nullsNotDistinct": true,
18821858
"name": "unique_job_step_active_name_parent",
18831859
"entityType": "uniques",
@@ -1928,4 +1904,4 @@
19281904
}
19291905
],
19301906
"renames": []
1931-
}
1907+
}

0 commit comments

Comments
 (0)