Drop per-task port blocks; previews use any free loopback port

This commit is contained in:
Ian Gulliver
2026-10-21 20:49:00 -07:00
parent d88fd66c68
commit f0213e2aed
18 changed files with 441 additions and 425 deletions
+30
View File
@@ -43,6 +43,36 @@ func (s *Store) SetPreview(ctx context.Context, p api.Preview, actor string) ([]
return err
}
rows, err = tx.QueryContext(ctx, `
DELETE FROM previews WHERE port = ? AND task_id != ? AND task_id IN (SELECT id FROM tasks WHERE status = ?)
RETURNING task_id, name, (SELECT project_id FROM tasks WHERE id = previews.task_id)
`, p.Port, p.TaskId, string(api.TaskStatusActive))
if err != nil {
return err
}
taken := []api.Event{}
for rows.Next() {
taskID, name, project := "", "", ""
err = rows.Scan(&taskID, &name, &project)
if err != nil {
rows.Close()
return err
}
taken = append(taken, api.Event{Kind: "preview.taken", ProjectId: &project, TaskId: &taskID, Actor: actor,
Payload: map[string]any{"name": name, "port": p.Port, "by_task_id": p.TaskId}})
}
rows.Close()
err = rows.Err()
if err != nil {
return err
}
for _, ev := range taken {
err = emit(ev)
if err != nil {
return err
}
}
_, err = tx.ExecContext(ctx, `INSERT INTO previews (`+previewColumns+`) VALUES (?, ?, ?, ?)`, p.TaskId, p.Name, p.Port, formatTime(p.CreatedAt))
if err != nil {
return err