Publish Image / publish (push) Successful in 36s
Replace the volatile in-memory Map/Set queue with BullMQ backed by Redis for persistence across restarts, automatic retry with exponential backoff, and non-blocking workspace cleanup. - Two queues: workspace-create (concurrency-limited) and workspace-cleanup (with polling instead of sleep-based stop→delete) - Active workspaces tracked in Redis hash for dedup across restarts - Stale sweep every 10 minutes catches orphaned workspaces - Graceful shutdown on SIGTERM/SIGINT - Replace node-cron with BullMQ repeatable jobs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
12 lines
394 B
TypeScript
12 lines
394 B
TypeScript
import type { TaskRequest } from "./types.js";
|
|
|
|
/** Build a dedup key for a task. */
|
|
export function dedupKey(task: TaskRequest): string {
|
|
return `${task.taskType}-${task.giteaRepo}-${task.issueNumber}`;
|
|
}
|
|
|
|
/** Build the workspace name (matches the dedup key). */
|
|
export function workspaceName(task: TaskRequest): string {
|
|
return `${task.taskType}-${task.giteaRepo}-${task.issueNumber}`;
|
|
}
|