(params: DockerResolverParameters, labels: Record<string, string>, canceled: Promise<void>, output: Log, trace: boolean)
| 215 | |
| 216 | // Polling-based fallback for runtimes that don't support `events` (e.g., wslc). |
| 217 | function startEventSeenPolling(params: DockerResolverParameters, labels: Record<string, string>, canceled: Promise<void>, output: Log, trace: boolean) { |
| 218 | let stopped = false; |
| 219 | canceled.catch(() => { stopped = true; }); |
| 220 | const labelFilters = Object.entries(labels).map(([k, v]) => `${k}=${v}`); |
| 221 | return { |
| 222 | started: new Promise<void>((resolve, reject) => { |
| 223 | canceled.catch(reject); |
| 224 | const poll = async () => { |
| 225 | while (!stopped) { |
| 226 | try { |
| 227 | const containers = await listContainers(params, false, labelFilters); |
| 228 | if (trace) { |
| 229 | output.write(`Log: startEventSeenPolling found ${containers.length} container(s)\r\n`); |
| 230 | } |
| 231 | if (containers.length > 0) { |
| 232 | resolve(); |
| 233 | return; |
| 234 | } |
| 235 | } catch (e) { |
| 236 | // Ignore transient errors during polling. |
| 237 | } |
| 238 | await delay(500); |
| 239 | } |
| 240 | }; |
| 241 | poll(); |
| 242 | }) |
| 243 | }; |
| 244 | } |
| 245 | |
| 246 | async function hasLabels(params: DockerResolverParameters, info: any, expectedLabels: Record<string, string>) { |
| 247 | const actualLabels = info.Actor?.Attributes |
no test coverage detected