Skip to content

Commit d9e51c5

Browse files
committed
Fix flaky CI: handle missing database in generateStaticParams and sitemap
1 parent af6c458 commit d9e51c5

File tree

1 file changed

+68
-48
lines changed

1 file changed

+68
-48
lines changed

web/src/server/agents-data.ts

Lines changed: 68 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -188,61 +188,81 @@ export interface StaticParamsAgentData {
188188
}
189189

190190
export const fetchAgentsForSitemap = async (): Promise<SitemapAgentData[]> => {
191-
// Fetch only the fields needed for sitemap URLs - no data blob at all
192-
const agentsPromise = db
193-
.select({
194-
id: schema.agentConfig.id,
195-
version: schema.agentConfig.version,
196-
created_at: schema.agentConfig.created_at,
197-
publisher_id: schema.publisher.id,
198-
})
199-
.from(schema.agentConfig)
200-
.innerJoin(
201-
schema.publisher,
202-
eq(schema.agentConfig.publisher_id, schema.publisher.id),
191+
try {
192+
// Fetch only the fields needed for sitemap URLs - no data blob at all
193+
const agentsPromise = db
194+
.select({
195+
id: schema.agentConfig.id,
196+
version: schema.agentConfig.version,
197+
created_at: schema.agentConfig.created_at,
198+
publisher_id: schema.publisher.id,
199+
})
200+
.from(schema.agentConfig)
201+
.innerJoin(
202+
schema.publisher,
203+
eq(schema.agentConfig.publisher_id, schema.publisher.id),
204+
)
205+
.orderBy(sql`${schema.agentConfig.created_at} DESC`)
206+
207+
// Get last_used dates from metrics, grouped by agent_id to match agentConfig.id
208+
const metricsPromise = db
209+
.select({
210+
publisher_id: schema.agentRun.publisher_id,
211+
agent_id: schema.agentRun.agent_id,
212+
last_used: sql<Date>`MAX(${schema.agentRun.created_at})`,
213+
})
214+
.from(schema.agentRun)
215+
.where(
216+
and(
217+
eq(schema.agentRun.status, 'completed'),
218+
sql`${schema.agentRun.agent_id} IS NOT NULL`,
219+
sql`${schema.agentRun.publisher_id} IS NOT NULL`,
220+
),
221+
)
222+
.groupBy(schema.agentRun.publisher_id, schema.agentRun.agent_id)
223+
224+
const [agents, metrics] = await Promise.all([agentsPromise, metricsPromise])
225+
226+
return buildAgentsDataForSitemap({ agents, metrics })
227+
} catch (error) {
228+
// In CI/build environments without a database, return empty array
229+
// so sitemap generation doesn't fail the build
230+
console.warn(
231+
'[fetchAgentsForSitemap] Database unavailable, returning empty array:',
232+
error instanceof Error ? error.message : error,
203233
)
204-
.orderBy(sql`${schema.agentConfig.created_at} DESC`)
205-
206-
// Get last_used dates from metrics, grouped by agent_id to match agentConfig.id
207-
const metricsPromise = db
208-
.select({
209-
publisher_id: schema.agentRun.publisher_id,
210-
agent_id: schema.agentRun.agent_id,
211-
last_used: sql<Date>`MAX(${schema.agentRun.created_at})`,
212-
})
213-
.from(schema.agentRun)
214-
.where(
215-
and(
216-
eq(schema.agentRun.status, 'completed'),
217-
sql`${schema.agentRun.agent_id} IS NOT NULL`,
218-
sql`${schema.agentRun.publisher_id} IS NOT NULL`,
219-
),
220-
)
221-
.groupBy(schema.agentRun.publisher_id, schema.agentRun.agent_id)
222-
223-
const [agents, metrics] = await Promise.all([agentsPromise, metricsPromise])
224-
225-
return buildAgentsDataForSitemap({ agents, metrics })
234+
return []
235+
}
226236
}
227237

228238
export const fetchAgentsForStaticParams = async (): Promise<
229239
StaticParamsAgentData[]
230240
> => {
231-
// Fetch only the fields needed to build static params for versioned agents.
232-
const agents = await db
233-
.select({
234-
id: schema.agentConfig.id,
235-
version: schema.agentConfig.version,
236-
publisher_id: schema.publisher.id,
237-
})
238-
.from(schema.agentConfig)
239-
.innerJoin(
240-
schema.publisher,
241-
eq(schema.agentConfig.publisher_id, schema.publisher.id),
241+
try {
242+
// Fetch only the fields needed to build static params for versioned agents.
243+
const agents = await db
244+
.select({
245+
id: schema.agentConfig.id,
246+
version: schema.agentConfig.version,
247+
publisher_id: schema.publisher.id,
248+
})
249+
.from(schema.agentConfig)
250+
.innerJoin(
251+
schema.publisher,
252+
eq(schema.agentConfig.publisher_id, schema.publisher.id),
253+
)
254+
.orderBy(sql`${schema.agentConfig.created_at} DESC`)
255+
256+
return agents
257+
} catch (error) {
258+
// In CI/build environments without a database, return empty array
259+
// so pages are dynamically rendered at runtime instead of statically generated
260+
console.warn(
261+
'[fetchAgentsForStaticParams] Database unavailable, returning empty array:',
262+
error instanceof Error ? error.message : error,
242263
)
243-
.orderBy(sql`${schema.agentConfig.created_at} DESC`)
244-
245-
return agents
264+
return []
265+
}
246266
}
247267

248268
export const getCachedAgentsForSitemap = unstable_cache(

0 commit comments

Comments
 (0)