@tinybirdco/sdk 0.0.54 → 0.0.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Deploy resources to Tinybird main workspace
3
- * Uses the /v1/deploy endpoint with auto-promotion enabled
3
+ * Uses the /v1/deploy endpoint to create a deployment, then sets it live
4
4
  */
5
5
  import type { GeneratedResources } from "../generator/index.js";
6
6
  import type { BuildConfig, BuildApiResult } from "./build.js";
@@ -23,6 +23,12 @@ export interface Deployment {
23
23
  updated_at?: string;
24
24
  feedback?: DeploymentFeedback[];
25
25
  }
26
+ /**
27
+ * Response from /v1/deployments list endpoint
28
+ */
29
+ export interface DeploymentsListResponse {
30
+ deployments: Deployment[];
31
+ }
26
32
  /**
27
33
  * Response from /v1/deploy endpoint
28
34
  */
@@ -35,13 +41,6 @@ export interface DeployResponse {
35
41
  error: string;
36
42
  }>;
37
43
  }
38
- /**
39
- * Response from /v1/deployments/{id} endpoint
40
- */
41
- export interface DeploymentStatusResponse {
42
- result: string;
43
- deployment: Deployment;
44
- }
45
44
  /**
46
45
  * Detailed deployment information with resource changes
47
46
  */
@@ -70,11 +69,20 @@ export interface DeploymentDetails extends Deployment {
70
69
  error: string;
71
70
  }>;
72
71
  }
72
+ /**
73
+ * Response from /v1/deployments/{id} endpoint
74
+ */
75
+ export interface DeploymentStatusResponse {
76
+ result: string;
77
+ deployment: Deployment;
78
+ }
73
79
  /**
74
80
  * Deploy generated resources to Tinybird main workspace
75
81
  *
76
82
  * Uses the /v1/deploy endpoint which accepts all resources in a single
77
- * multipart form request.
83
+ * multipart form request. After creating the deployment, this function:
84
+ * 1. Polls until the deployment is ready (status === 'data_ready')
85
+ * 2. Sets the deployment as live via /v1/deployments/{id}/set-live
78
86
  *
79
87
  * @param config - Build configuration with API URL and token
80
88
  * @param resources - Generated resources to deploy
@@ -142,7 +150,6 @@ export declare function deployToMain(config: BuildConfig, resources: GeneratedRe
142
150
  pollIntervalMs?: number;
143
151
  maxPollAttempts?: number;
144
152
  check?: boolean;
145
- autoPromote?: boolean;
146
153
  allowDestructiveOperations?: boolean;
147
154
  callbacks?: DeployCallbacks;
148
155
  }): Promise<BuildApiResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM9D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC5C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,mCAAmC;IACnC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,mCAAmC;IACnC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,6BAA6B;IAC7B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,6BAA6B;IAC7B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,yCAAyC;IACzC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,mCAAmC;IACnC,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,mCAAmC;IACnC,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,wBAAwB;IACxB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH;;GAEG;AACH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,GACA,OAAO,CAAC,cAAc,CAAC,CA2WzB"}
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Deploy resources to Tinybird main workspace
3
- * Uses the /v1/deploy endpoint with auto-promotion enabled
3
+ * Uses the /v1/deploy endpoint to create a deployment, then sets it live
4
4
  */
5
5
  import { tinybirdFetch } from "./fetcher.js";
6
6
  const FORWARD_CLASSIC_GUIDANCE = "Use the Tinybird Classic CLI (`tb`) from a Tinybird Classic workspace for this operation.";
7
7
  export async function deployToMain(config, resources, options) {
8
8
  const debug = options?.debug ?? !!process.env.TINYBIRD_DEBUG;
9
9
  const pollIntervalMs = options?.pollIntervalMs ?? 1000;
10
- const maxPollAttempts = options?.maxPollAttempts ?? 120;
10
+ const maxPollAttempts = options?.maxPollAttempts ?? 120; // 2 minutes max
11
11
  const baseUrl = config.baseUrl.replace(/\/$/, "");
12
12
  const formData = new FormData();
13
13
  // Add datasources
@@ -30,17 +30,42 @@ export async function deployToMain(config, resources, options) {
30
30
  }
31
31
  formData.append(fieldName, new Blob([pipe.content], { type: "text/plain" }), fileName);
32
32
  }
33
- // Create deployment via /v1/deploy.
34
- // `auto_promote=true` makes the API promote the deployment automatically.
33
+ // Step 0: Clean up any stale non-live deployments that might block the new deployment
34
+ try {
35
+ const deploymentsUrl = `${baseUrl}/v1/deployments`;
36
+ const deploymentsResponse = await tinybirdFetch(deploymentsUrl, {
37
+ headers: {
38
+ Authorization: `Bearer ${config.token}`,
39
+ },
40
+ });
41
+ if (deploymentsResponse.ok) {
42
+ const deploymentsBody = (await deploymentsResponse.json());
43
+ const staleDeployments = deploymentsBody.deployments.filter((d) => !d.live && d.status !== "live");
44
+ for (const stale of staleDeployments) {
45
+ if (debug) {
46
+ console.log(`[debug] Cleaning up stale deployment: ${stale.id} (status: ${stale.status})`);
47
+ }
48
+ await tinybirdFetch(`${baseUrl}/v1/deployments/${stale.id}`, {
49
+ method: "DELETE",
50
+ headers: {
51
+ Authorization: `Bearer ${config.token}`,
52
+ },
53
+ });
54
+ }
55
+ }
56
+ }
57
+ catch (e) {
58
+ // Ignore errors during cleanup - we'll try to deploy anyway
59
+ if (debug) {
60
+ console.log(`[debug] Failed to clean up stale deployments: ${e}`);
61
+ }
62
+ }
63
+ // Step 1: Create deployment via /v1/deploy
35
64
  const deployUrlBase = `${baseUrl}/v1/deploy`;
36
65
  const urlParams = new URLSearchParams();
37
66
  if (options?.check) {
38
67
  urlParams.set("check", "true");
39
68
  }
40
- const autoPromote = options?.autoPromote ?? !options?.check;
41
- if (autoPromote) {
42
- urlParams.set("auto_promote", "true");
43
- }
44
69
  if (options?.allowDestructiveOperations) {
45
70
  urlParams.set("allow_destructive_operations", "true");
46
71
  }
@@ -189,17 +214,15 @@ export async function deployToMain(config, resources, options) {
189
214
  },
190
215
  });
191
216
  }
192
- let deployment = deploymentDetails;
193
- let statusAttempts = 0;
217
+ // Step 2: Poll until deployment is ready
218
+ let deployment = body.deployment;
219
+ let attempts = 0;
194
220
  options?.callbacks?.onWaitingForReady?.();
195
- while (deployment.status !== "data_ready" &&
196
- deployment.status !== "failed" &&
197
- deployment.status !== "error" &&
198
- statusAttempts < maxPollAttempts) {
221
+ while (deployment.status !== "data_ready" && attempts < maxPollAttempts) {
199
222
  await sleep(pollIntervalMs);
200
- statusAttempts++;
223
+ attempts++;
201
224
  if (debug) {
202
- console.log(`[debug] Polling deployment status (attempt ${statusAttempts})...`);
225
+ console.log(`[debug] Polling deployment status (attempt ${attempts})...`);
203
226
  }
204
227
  const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
205
228
  const statusResponse = await tinybirdFetch(statusUrl, {
@@ -220,79 +243,61 @@ export async function deployToMain(config, resources, options) {
220
243
  }
221
244
  const statusBody = (await statusResponse.json());
222
245
  deployment = statusBody.deployment;
246
+ if (debug) {
247
+ console.log(`[debug] Deployment status: ${deployment.status}`);
248
+ }
249
+ // Check for failed status
250
+ if (deployment.status === "failed" || deployment.status === "error") {
251
+ return {
252
+ success: false,
253
+ result: "failed",
254
+ error: `Deployment failed with status: ${deployment.status}`,
255
+ datasourceCount: resources.datasources.length,
256
+ pipeCount: resources.pipes.length,
257
+ connectionCount: resources.connections?.length ?? 0,
258
+ buildId: deploymentId,
259
+ };
260
+ }
223
261
  }
224
- if (deployment.status === "failed" || deployment.status === "error") {
262
+ if (deployment.status !== "data_ready") {
225
263
  return {
226
264
  success: false,
227
265
  result: "failed",
228
- error: `Deployment failed with status: ${deployment.status}`,
266
+ error: `Deployment timed out after ${maxPollAttempts} attempts. Last status: ${deployment.status}`,
229
267
  datasourceCount: resources.datasources.length,
230
268
  pipeCount: resources.pipes.length,
231
269
  connectionCount: resources.connections?.length ?? 0,
232
270
  buildId: deploymentId,
233
271
  };
234
272
  }
235
- if (deployment.status !== "data_ready") {
273
+ options?.callbacks?.onDeploymentReady?.();
274
+ // Step 3: Set the deployment as live
275
+ const setLiveUrl = `${baseUrl}/v1/deployments/${deploymentId}/set-live`;
276
+ if (debug) {
277
+ console.log(`[debug] POST ${setLiveUrl}`);
278
+ }
279
+ const setLiveResponse = await tinybirdFetch(setLiveUrl, {
280
+ method: "POST",
281
+ headers: {
282
+ Authorization: `Bearer ${config.token}`,
283
+ },
284
+ });
285
+ if (!setLiveResponse.ok) {
286
+ const setLiveBody = await setLiveResponse.text();
236
287
  return {
237
288
  success: false,
238
289
  result: "failed",
239
- error: `Deployment timed out after ${maxPollAttempts} attempts. Last status: ${deployment.status}`,
290
+ error: `Failed to set deployment as live: ${setLiveResponse.status} ${setLiveResponse.statusText}\n${setLiveBody}`,
240
291
  datasourceCount: resources.datasources.length,
241
292
  pipeCount: resources.pipes.length,
242
293
  connectionCount: resources.connections?.length ?? 0,
243
294
  buildId: deploymentId,
244
295
  };
245
296
  }
246
- options?.callbacks?.onDeploymentReady?.();
247
- if (autoPromote && !deployment.live) {
248
- let promotionAttempts = 0;
249
- options?.callbacks?.onWaitingForPromote?.();
250
- while (!deployment.live && promotionAttempts < maxPollAttempts) {
251
- await sleep(pollIntervalMs);
252
- promotionAttempts++;
253
- if (debug) {
254
- console.log(`[debug] Polling auto-promote status (attempt ${promotionAttempts})...`);
255
- }
256
- const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
257
- const statusResponse = await tinybirdFetch(statusUrl, {
258
- headers: {
259
- Authorization: `Bearer ${config.token}`,
260
- },
261
- });
262
- if (!statusResponse.ok) {
263
- return {
264
- success: false,
265
- result: "failed",
266
- error: `Failed to check deployment status: ${statusResponse.status} ${statusResponse.statusText}`,
267
- datasourceCount: resources.datasources.length,
268
- pipeCount: resources.pipes.length,
269
- connectionCount: resources.connections?.length ?? 0,
270
- buildId: deploymentId,
271
- };
272
- }
273
- const statusBody = (await statusResponse.json());
274
- deployment = statusBody.deployment;
275
- }
276
- if (!deployment.live) {
277
- return {
278
- success: false,
279
- result: "failed",
280
- error: `Deployment reached data_ready but auto-promote did not complete after ${maxPollAttempts} attempts`,
281
- datasourceCount: resources.datasources.length,
282
- pipeCount: resources.pipes.length,
283
- connectionCount: resources.connections?.length ?? 0,
284
- buildId: deploymentId,
285
- };
286
- }
287
- options?.callbacks?.onDeploymentPromoted?.();
288
- }
289
297
  if (debug) {
290
- const stateLabel = deployment.live ? "live" : "ready";
291
- console.log(`[debug] Deployment ${deploymentId} is now ${stateLabel}`);
292
- }
293
- if (deployment.live) {
294
- options?.callbacks?.onDeploymentLive?.(deploymentId);
298
+ console.log(`[debug] Deployment ${deploymentId} is now live`);
295
299
  }
300
+ options?.callbacks?.onDeploymentLive?.(deploymentId);
296
301
  return {
297
302
  success: true,
298
303
  result: "success",
@@ -312,6 +317,9 @@ export async function deployToMain(config, resources, options) {
312
317
  },
313
318
  };
314
319
  }
320
+ /**
321
+ * Helper function to sleep for a given number of milliseconds
322
+ */
315
323
  function sleep(ms) {
316
324
  return new Promise((resolve) => setTimeout(resolve, ms));
317
325
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,wBAAwB,GAC5B,2FAA2F,CAAC;AAiJ9F,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAmB,EACnB,SAA6B,EAC7B,OAOC;IAED,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC7D,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC;IACvD,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,IAAI,GAAG,CAAC,CAAC,gBAAgB;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEhC,kBAAkB;IAClB,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC;QACpC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,8BAA8B,SAAS,eAAe,QAAQ,GAAG,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,QAAQ,CAAC,MAAM,CACb,SAAS,EACT,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAC9C,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,YAAY;IACZ,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,iBAAiB,CAAC;QACpC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC;QACrC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,wBAAwB,SAAS,eAAe,QAAQ,GAAG,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,QAAQ,CAAC,MAAM,CACb,SAAS,EACT,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAChD,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,GAAG,OAAO,iBAAiB,CAAC;QACnD,MAAM,mBAAmB,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE;YAC9D,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;aACxC;SACF,CAAC,CAAC;QAEH,IAAI,mBAAmB,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,eAAe,GAAG,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAA4B,CAAC;YACtF,MAAM,gBAAgB,GAAG,eAAe,CAAC,WAAW,CAAC,MAAM,CACzD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CACtC,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;gBACrC,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,yCAAyC,KAAK,CAAC,EAAE,aAAa,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7F,CAAC;gBACD,MAAM,aAAa,CAAC,GAAG,OAAO,mBAAmB,KAAK,CAAC,EAAE,EAAE,EAAE;oBAC3D,MAAM,EAAE,QAAQ;oBAChB,OAAO,EAAE;wBACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;qBACxC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,4DAA4D;QAC5D,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,aAAa,GAAG,GAAG,OAAO,YAAY,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,EAAE,0BAA0B,EAAE,CAAC;QACxC,SAAS,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;IAElF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE;QAC9C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;SACxC;QACD,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,iBAAiB;IACjB,IAAI,IAAoB,CAAC;IACzB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,+CAA+C,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,WAAW,OAAO,EAAE,CAC1G,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,MAAM,cAAc,GAAG,CAAC,QAA8B,EAAU,EAAE;QAChE,OAAO,QAAQ;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,uEAAuE;YACvE,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC;YAC7E,OAAO,GAAG,YAAY,KAAK,2BAA2B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,0BAA0B;IAC1B,MAAM,YAAY,GAAG,GAAW,EAAE;QAChC,8DAA8D;QAC9D,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;YAC3E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,MAAM;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,OAAO,GAAG,MAAM,GAAG,2BAA2B,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,gFAAgF;QAChF,OAAO,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,eAAe,OAAO,EAAE,CAAC;IACjF,CAAC,CAAC;IAEF,0BAA0B;IAC1B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,YAAY,EAAE;YACrB,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;YAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;YACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC;QAEpC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,YAAY,EAAE;gBACrB,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;gBAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;gBACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;aACpD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;YAChC,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;YAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;YACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,YAAY;YACpB,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;YAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;YACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;YACnD,KAAK,EAAE;gBACL,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;aACZ;YACD,WAAW,EAAE;gBACX,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;aACZ;SACF,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,YAAY,EAAE;YACrB,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;YAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;YACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;IAE1C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,uCAAuC,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,+DAA+D;IAC/D,IAAI,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC;YAC1B,WAAW,EAAE;gBACX,OAAO,EAAE,iBAAiB,CAAC,oBAAoB,IAAI,EAAE;gBACrD,OAAO,EAAE,iBAAiB,CAAC,wBAAwB,IAAI,EAAE;gBACzD,OAAO,EAAE,iBAAiB,CAAC,wBAAwB,IAAI,EAAE;aAC1D;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,iBAAiB,CAAC,cAAc,IAAI,EAAE;gBAC/C,OAAO,EAAE,iBAAiB,CAAC,kBAAkB,IAAI,EAAE;gBACnD,OAAO,EAAE,iBAAiB,CAAC,kBAAkB,IAAI,EAAE;aACpD;YACD,WAAW,EAAE;gBACX,OAAO,EAAE,iBAAiB,CAAC,wBAAwB,IAAI,EAAE;gBACzD,OAAO,EAAE,iBAAiB,CAAC,4BAA4B,IAAI,EAAE;gBAC7D,OAAO,EAAE,iBAAiB,CAAC,4BAA4B,IAAI,EAAE;aAC9D;SACF,CAAC,CAAC;IACL,CAAC;IAED,yCAAyC;IACzC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,CAAC;IAE1C,OAAO,UAAU,CAAC,MAAM,KAAK,YAAY,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;QACxE,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;QAC5B,QAAQ,EAAE,CAAC;QAEX,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,8CAA8C,QAAQ,MAAM,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,OAAO,mBAAmB,YAAY,EAAE,CAAC;QAC9D,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE;YACpD,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;aACxC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,sCAAsC,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE;gBACjG,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;gBAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;gBACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;gBACnD,OAAO,EAAE,YAAY;aACtB,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAA6B,CAAC;QAC7E,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QAEnC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,8BAA8B,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,0BAA0B;QAC1B,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,kCAAkC,UAAU,CAAC,MAAM,EAAE;gBAC5D,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;gBAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;gBACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;gBACnD,OAAO,EAAE,YAAY;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,8BAA8B,eAAe,2BAA2B,UAAU,CAAC,MAAM,EAAE;YAClG,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;YAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;YACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;YACnD,OAAO,EAAE,YAAY;SACtB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,CAAC;IAE1C,qCAAqC;IACrC,MAAM,UAAU,GAAG,GAAG,OAAO,mBAAmB,YAAY,WAAW,CAAC;IAExE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;SACxC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,qCAAqC,eAAe,CAAC,MAAM,IAAI,eAAe,CAAC,UAAU,KAAK,WAAW,EAAE;YAClH,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;YAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;YACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;YACnD,OAAO,EAAE,YAAY;SACtB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,sBAAsB,YAAY,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,YAAY,CAAC,CAAC;IAErD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM;QAC7C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;QACjC,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;QACnD,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE;YACL,OAAO,EAAE,iBAAiB,CAAC,kBAAkB,IAAI,EAAE;YACnD,OAAO,EAAE,iBAAiB,CAAC,cAAc,IAAI,EAAE;YAC/C,OAAO,EAAE,iBAAiB,CAAC,kBAAkB,IAAI,EAAE;SACpD;QACD,WAAW,EAAE;YACX,OAAO,EAAE,iBAAiB,CAAC,wBAAwB,IAAI,EAAE;YACzD,OAAO,EAAE,iBAAiB,CAAC,oBAAoB,IAAI,EAAE;YACrD,OAAO,EAAE,iBAAiB,CAAC,wBAAwB,IAAI,EAAE;SAC1D;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAe;IAClD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,qBAAqB,GACzB,cAAc,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrD,cAAc,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAEzD,IAAI,CAAC,qBAAqB,IAAI,cAAc,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAChF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,GAAG,cAAc,KAAK,wBAAwB,EAAE,CAAC;AAC1D,CAAC"}
@@ -1,10 +1,16 @@
1
- import { describe, it, expect, beforeAll, afterEach, afterAll, vi } from "vitest";
1
+ import { describe, it, expect, beforeAll, beforeEach, afterEach, afterAll } from "vitest";
2
2
  import { setupServer } from "msw/node";
3
3
  import { http, HttpResponse } from "msw";
4
4
  import { deployToMain } from "./deploy.js";
5
- import { BASE_URL, createDeploySuccessResponse, createBuildFailureResponse, createBuildMultipleErrorsResponse, } from "../test/handlers.js";
5
+ import { BASE_URL, createDeploySuccessResponse, createDeploymentStatusResponse, createSetLiveSuccessResponse, createBuildFailureResponse, createBuildMultipleErrorsResponse, createDeploymentsListResponse, } from "../test/handlers.js";
6
6
  const server = setupServer();
7
7
  beforeAll(() => server.listen({ onUnhandledRequest: "error" }));
8
+ beforeEach(() => {
9
+ // Set up default handler for deployments list (used by stale deployment cleanup)
10
+ server.use(http.get(`${BASE_URL}/v1/deployments`, () => {
11
+ return HttpResponse.json(createDeploymentsListResponse());
12
+ }));
13
+ });
8
14
  afterEach(() => server.resetHandlers());
9
15
  afterAll(() => server.close());
10
16
  describe("Deploy API", () => {
@@ -13,44 +19,53 @@ describe("Deploy API", () => {
13
19
  token: "p.test-token",
14
20
  };
15
21
  const resources = {
16
- datasources: [{ name: "events", content: "SCHEMA > timestamp DateTime" }],
17
- pipes: [{ name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" }],
22
+ datasources: [
23
+ { name: "events", content: "SCHEMA > timestamp DateTime" },
24
+ ],
25
+ pipes: [
26
+ { name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" },
27
+ ],
18
28
  connections: [],
19
29
  };
20
- function setupAutoPromoteSuccessFlow(deploymentId = "deploy-abc") {
30
+ // Helper to set up successful deploy flow
31
+ function setupSuccessfulDeployFlow(deploymentId = "deploy-abc") {
21
32
  server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
22
33
  return HttpResponse.json(createDeploySuccessResponse({ deploymentId, status: "pending" }));
23
34
  }), http.get(`${BASE_URL}/v1/deployments/${deploymentId}`, () => {
24
- return HttpResponse.json({
25
- result: "success",
26
- deployment: {
27
- id: deploymentId,
28
- status: "data_ready",
29
- live: true,
30
- },
31
- });
35
+ return HttpResponse.json(createDeploymentStatusResponse({ deploymentId, status: "data_ready" }));
36
+ }), http.post(`${BASE_URL}/v1/deployments/${deploymentId}/set-live`, () => {
37
+ return HttpResponse.json(createSetLiveSuccessResponse());
32
38
  }));
33
39
  }
34
40
  describe("deployToMain", () => {
35
- it("successfully deploys resources with auto-promote flow", async () => {
36
- setupAutoPromoteSuccessFlow("deploy-abc");
37
- const onDeploymentLive = vi.fn();
38
- const result = await deployToMain(config, resources, {
39
- pollIntervalMs: 1,
40
- callbacks: { onDeploymentLive },
41
- });
41
+ it("successfully deploys resources with full flow", async () => {
42
+ setupSuccessfulDeployFlow("deploy-abc");
43
+ const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
42
44
  expect(result.success).toBe(true);
43
45
  expect(result.result).toBe("success");
44
46
  expect(result.buildId).toBe("deploy-abc");
45
47
  expect(result.datasourceCount).toBe(1);
46
48
  expect(result.pipeCount).toBe(1);
47
- expect(onDeploymentLive).toHaveBeenCalledWith("deploy-abc");
49
+ });
50
+ it("polls until deployment is ready", async () => {
51
+ let pollCount = 0;
52
+ server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
53
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-poll", status: "pending" }));
54
+ }), http.get(`${BASE_URL}/v1/deployments/deploy-poll`, () => {
55
+ pollCount++;
56
+ // Return pending for first 2 polls, then data_ready
57
+ const status = pollCount < 3 ? "pending" : "data_ready";
58
+ return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-poll", status }));
59
+ }), http.post(`${BASE_URL}/v1/deployments/deploy-poll/set-live`, () => {
60
+ return HttpResponse.json(createSetLiveSuccessResponse());
61
+ }));
62
+ const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
63
+ expect(result.success).toBe(true);
64
+ expect(pollCount).toBe(3);
48
65
  });
49
66
  it("handles deploy failure with single error", async () => {
50
67
  server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
51
- return HttpResponse.json(createBuildFailureResponse("Permission denied"), {
52
- status: 200,
53
- });
68
+ return HttpResponse.json(createBuildFailureResponse("Permission denied"), { status: 200 });
54
69
  }));
55
70
  const result = await deployToMain(config, resources);
56
71
  expect(result.success).toBe(false);
@@ -102,33 +117,33 @@ describe("Deploy API", () => {
102
117
  }));
103
118
  await expect(deployToMain(config, resources)).rejects.toThrow("Failed to parse response");
104
119
  });
105
- it("uses /v1/deploy endpoint and sends auto_promote by default", async () => {
120
+ it("uses /v1/deploy endpoint (not /v1/build)", async () => {
106
121
  let capturedUrl = null;
107
122
  server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
108
123
  capturedUrl = request.url;
109
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-url-test", status: "pending" }));
124
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-url-test" }));
110
125
  }), http.get(`${BASE_URL}/v1/deployments/deploy-url-test`, () => {
111
- return HttpResponse.json({
112
- result: "success",
113
- deployment: { id: "deploy-url-test", status: "data_ready", live: true },
114
- });
126
+ return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-url-test", status: "data_ready" }));
127
+ }), http.post(`${BASE_URL}/v1/deployments/deploy-url-test/set-live`, () => {
128
+ return HttpResponse.json(createSetLiveSuccessResponse());
115
129
  }));
116
130
  await deployToMain(config, resources, { pollIntervalMs: 1 });
117
131
  const parsed = new URL(capturedUrl ?? "");
118
132
  expect(parsed.pathname).toBe("/v1/deploy");
119
133
  expect(parsed.searchParams.get("from")).toBe("ts-sdk");
120
- expect(parsed.searchParams.get("auto_promote")).toBe("true");
121
134
  });
122
135
  it("passes allow_destructive_operations when explicitly enabled", async () => {
123
136
  let capturedUrl = null;
124
137
  server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
125
138
  capturedUrl = request.url;
126
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-destructive", status: "pending" }));
139
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-destructive" }));
127
140
  }), http.get(`${BASE_URL}/v1/deployments/deploy-destructive`, () => {
128
- return HttpResponse.json({
129
- result: "success",
130
- deployment: { id: "deploy-destructive", status: "data_ready", live: true },
131
- });
141
+ return HttpResponse.json(createDeploymentStatusResponse({
142
+ deploymentId: "deploy-destructive",
143
+ status: "data_ready",
144
+ }));
145
+ }), http.post(`${BASE_URL}/v1/deployments/deploy-destructive/set-live`, () => {
146
+ return HttpResponse.json(createSetLiveSuccessResponse());
132
147
  }));
133
148
  await deployToMain(config, resources, {
134
149
  pollIntervalMs: 1,
@@ -136,19 +151,6 @@ describe("Deploy API", () => {
136
151
  });
137
152
  const parsed = new URL(capturedUrl ?? "");
138
153
  expect(parsed.searchParams.get("allow_destructive_operations")).toBe("true");
139
- expect(parsed.searchParams.get("auto_promote")).toBe("true");
140
- });
141
- it("does not send auto_promote in check mode", async () => {
142
- let capturedUrl = null;
143
- server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
144
- capturedUrl = request.url;
145
- return HttpResponse.json({ result: "success" });
146
- }));
147
- const result = await deployToMain(config, resources, { check: true });
148
- expect(result.success).toBe(true);
149
- const parsed = new URL(capturedUrl ?? "");
150
- expect(parsed.searchParams.get("check")).toBe("true");
151
- expect(parsed.searchParams.get("auto_promote")).toBeNull();
152
154
  });
153
155
  it("adds actionable guidance to Forward/Classic workspace errors", async () => {
154
156
  server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
@@ -162,22 +164,55 @@ describe("Deploy API", () => {
162
164
  expect(result.error).toContain("Tinybird Forward workspace");
163
165
  expect(result.error).toContain("Use the Tinybird Classic CLI (`tb`) from a Tinybird Classic workspace for this operation.");
164
166
  });
167
+ it("handles failed deployment status", async () => {
168
+ server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
169
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-fail", status: "pending" }));
170
+ }), http.get(`${BASE_URL}/v1/deployments/deploy-fail`, () => {
171
+ return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-fail", status: "failed" }));
172
+ }));
173
+ const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
174
+ expect(result.success).toBe(false);
175
+ expect(result.error).toContain("Deployment failed with status: failed");
176
+ });
177
+ it("handles set-live failure", async () => {
178
+ server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
179
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-setlive-fail" }));
180
+ }), http.get(`${BASE_URL}/v1/deployments/deploy-setlive-fail`, () => {
181
+ return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-setlive-fail", status: "data_ready" }));
182
+ }), http.post(`${BASE_URL}/v1/deployments/deploy-setlive-fail/set-live`, () => {
183
+ return HttpResponse.json({ error: "Set live failed" }, { status: 500 });
184
+ }));
185
+ const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
186
+ expect(result.success).toBe(false);
187
+ expect(result.error).toContain("Failed to set deployment as live");
188
+ });
165
189
  it("normalizes baseUrl with trailing slash", async () => {
166
190
  let capturedUrl = null;
167
191
  server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
168
192
  capturedUrl = request.url;
169
- return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-slash", status: "pending" }));
193
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-slash" }));
170
194
  }), http.get(`${BASE_URL}/v1/deployments/deploy-slash`, () => {
171
- return HttpResponse.json({
172
- result: "success",
173
- deployment: { id: "deploy-slash", status: "data_ready", live: true },
174
- });
195
+ return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-slash", status: "data_ready" }));
196
+ }), http.post(`${BASE_URL}/v1/deployments/deploy-slash/set-live`, () => {
197
+ return HttpResponse.json(createSetLiveSuccessResponse());
175
198
  }));
176
199
  await deployToMain({ ...config, baseUrl: `${BASE_URL}/` }, resources, { pollIntervalMs: 1 });
177
200
  const parsed = new URL(capturedUrl ?? "");
178
201
  expect(parsed.pathname).toBe("/v1/deploy");
179
202
  expect(parsed.searchParams.get("from")).toBe("ts-sdk");
180
- expect(parsed.searchParams.get("auto_promote")).toBe("true");
203
+ });
204
+ it("times out when deployment never becomes ready", async () => {
205
+ server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
206
+ return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-timeout", status: "pending" }));
207
+ }), http.get(`${BASE_URL}/v1/deployments/deploy-timeout`, () => {
208
+ return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-timeout", status: "pending" }));
209
+ }));
210
+ const result = await deployToMain(config, resources, {
211
+ pollIntervalMs: 1,
212
+ maxPollAttempts: 3,
213
+ });
214
+ expect(result.success).toBe(false);
215
+ expect(result.error).toContain("Deployment timed out");
181
216
  });
182
217
  });
183
218
  });
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../src/api/deploy.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../src/api/deploy.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinybirdco/sdk",
3
- "version": "0.0.54",
3
+ "version": "0.0.55",
4
4
  "description": "TypeScript SDK for Tinybird Forward - define datasources and pipes as TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, beforeAll, afterEach, afterAll, vi } from "vitest";
1
+ import { describe, it, expect, beforeAll, beforeEach, afterEach, afterAll } from "vitest";
2
2
  import { setupServer } from "msw/node";
3
3
  import { http, HttpResponse } from "msw";
4
4
  import { deployToMain } from "./deploy.js";
@@ -6,14 +6,25 @@ import type { BuildConfig } from "./build.js";
6
6
  import {
7
7
  BASE_URL,
8
8
  createDeploySuccessResponse,
9
+ createDeploymentStatusResponse,
10
+ createSetLiveSuccessResponse,
9
11
  createBuildFailureResponse,
10
12
  createBuildMultipleErrorsResponse,
13
+ createDeploymentsListResponse,
11
14
  } from "../test/handlers.js";
12
15
  import type { GeneratedResources } from "../generator/index.js";
13
16
 
14
17
  const server = setupServer();
15
18
 
16
19
  beforeAll(() => server.listen({ onUnhandledRequest: "error" }));
20
+ beforeEach(() => {
21
+ // Set up default handler for deployments list (used by stale deployment cleanup)
22
+ server.use(
23
+ http.get(`${BASE_URL}/v1/deployments`, () => {
24
+ return HttpResponse.json(createDeploymentsListResponse());
25
+ })
26
+ );
27
+ });
17
28
  afterEach(() => server.resetHandlers());
18
29
  afterAll(() => server.close());
19
30
 
@@ -24,12 +35,17 @@ describe("Deploy API", () => {
24
35
  };
25
36
 
26
37
  const resources: GeneratedResources = {
27
- datasources: [{ name: "events", content: "SCHEMA > timestamp DateTime" }],
28
- pipes: [{ name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" }],
38
+ datasources: [
39
+ { name: "events", content: "SCHEMA > timestamp DateTime" },
40
+ ],
41
+ pipes: [
42
+ { name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" },
43
+ ],
29
44
  connections: [],
30
45
  };
31
46
 
32
- function setupAutoPromoteSuccessFlow(deploymentId = "deploy-abc") {
47
+ // Helper to set up successful deploy flow
48
+ function setupSuccessfulDeployFlow(deploymentId = "deploy-abc") {
33
49
  server.use(
34
50
  http.post(`${BASE_URL}/v1/deploy`, () => {
35
51
  return HttpResponse.json(
@@ -37,42 +53,64 @@ describe("Deploy API", () => {
37
53
  );
38
54
  }),
39
55
  http.get(`${BASE_URL}/v1/deployments/${deploymentId}`, () => {
40
- return HttpResponse.json({
41
- result: "success",
42
- deployment: {
43
- id: deploymentId,
44
- status: "data_ready",
45
- live: true,
46
- },
47
- });
56
+ return HttpResponse.json(
57
+ createDeploymentStatusResponse({ deploymentId, status: "data_ready" })
58
+ );
59
+ }),
60
+ http.post(`${BASE_URL}/v1/deployments/${deploymentId}/set-live`, () => {
61
+ return HttpResponse.json(createSetLiveSuccessResponse());
48
62
  })
49
63
  );
50
64
  }
51
65
 
52
66
  describe("deployToMain", () => {
53
- it("successfully deploys resources with auto-promote flow", async () => {
54
- setupAutoPromoteSuccessFlow("deploy-abc");
67
+ it("successfully deploys resources with full flow", async () => {
68
+ setupSuccessfulDeployFlow("deploy-abc");
55
69
 
56
- const onDeploymentLive = vi.fn();
57
- const result = await deployToMain(config, resources, {
58
- pollIntervalMs: 1,
59
- callbacks: { onDeploymentLive },
60
- });
70
+ const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
61
71
 
62
72
  expect(result.success).toBe(true);
63
73
  expect(result.result).toBe("success");
64
74
  expect(result.buildId).toBe("deploy-abc");
65
75
  expect(result.datasourceCount).toBe(1);
66
76
  expect(result.pipeCount).toBe(1);
67
- expect(onDeploymentLive).toHaveBeenCalledWith("deploy-abc");
77
+ });
78
+
79
+ it("polls until deployment is ready", async () => {
80
+ let pollCount = 0;
81
+
82
+ server.use(
83
+ http.post(`${BASE_URL}/v1/deploy`, () => {
84
+ return HttpResponse.json(
85
+ createDeploySuccessResponse({ deploymentId: "deploy-poll", status: "pending" })
86
+ );
87
+ }),
88
+ http.get(`${BASE_URL}/v1/deployments/deploy-poll`, () => {
89
+ pollCount++;
90
+ // Return pending for first 2 polls, then data_ready
91
+ const status = pollCount < 3 ? "pending" : "data_ready";
92
+ return HttpResponse.json(
93
+ createDeploymentStatusResponse({ deploymentId: "deploy-poll", status })
94
+ );
95
+ }),
96
+ http.post(`${BASE_URL}/v1/deployments/deploy-poll/set-live`, () => {
97
+ return HttpResponse.json(createSetLiveSuccessResponse());
98
+ })
99
+ );
100
+
101
+ const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
102
+
103
+ expect(result.success).toBe(true);
104
+ expect(pollCount).toBe(3);
68
105
  });
69
106
 
70
107
  it("handles deploy failure with single error", async () => {
71
108
  server.use(
72
109
  http.post(`${BASE_URL}/v1/deploy`, () => {
73
- return HttpResponse.json(createBuildFailureResponse("Permission denied"), {
74
- status: 200,
75
- });
110
+ return HttpResponse.json(
111
+ createBuildFailureResponse("Permission denied"),
112
+ { status: 200 }
113
+ );
76
114
  })
77
115
  );
78
116
 
@@ -130,7 +168,10 @@ describe("Deploy API", () => {
130
168
  it("handles HTTP error responses", async () => {
131
169
  server.use(
132
170
  http.post(`${BASE_URL}/v1/deploy`, () => {
133
- return HttpResponse.json({ result: "failed", error: "Forbidden" }, { status: 403 });
171
+ return HttpResponse.json(
172
+ { result: "failed", error: "Forbidden" },
173
+ { status: 403 }
174
+ );
134
175
  })
135
176
  );
136
177
 
@@ -150,24 +191,28 @@ describe("Deploy API", () => {
150
191
  })
151
192
  );
152
193
 
153
- await expect(deployToMain(config, resources)).rejects.toThrow("Failed to parse response");
194
+ await expect(deployToMain(config, resources)).rejects.toThrow(
195
+ "Failed to parse response"
196
+ );
154
197
  });
155
198
 
156
- it("uses /v1/deploy endpoint and sends auto_promote by default", async () => {
199
+ it("uses /v1/deploy endpoint (not /v1/build)", async () => {
157
200
  let capturedUrl: string | null = null;
158
201
 
159
202
  server.use(
160
203
  http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
161
204
  capturedUrl = request.url;
162
205
  return HttpResponse.json(
163
- createDeploySuccessResponse({ deploymentId: "deploy-url-test", status: "pending" })
206
+ createDeploySuccessResponse({ deploymentId: "deploy-url-test" })
164
207
  );
165
208
  }),
166
209
  http.get(`${BASE_URL}/v1/deployments/deploy-url-test`, () => {
167
- return HttpResponse.json({
168
- result: "success",
169
- deployment: { id: "deploy-url-test", status: "data_ready", live: true },
170
- });
210
+ return HttpResponse.json(
211
+ createDeploymentStatusResponse({ deploymentId: "deploy-url-test", status: "data_ready" })
212
+ );
213
+ }),
214
+ http.post(`${BASE_URL}/v1/deployments/deploy-url-test/set-live`, () => {
215
+ return HttpResponse.json(createSetLiveSuccessResponse());
171
216
  })
172
217
  );
173
218
 
@@ -176,7 +221,6 @@ describe("Deploy API", () => {
176
221
  const parsed = new URL(capturedUrl ?? "");
177
222
  expect(parsed.pathname).toBe("/v1/deploy");
178
223
  expect(parsed.searchParams.get("from")).toBe("ts-sdk");
179
- expect(parsed.searchParams.get("auto_promote")).toBe("true");
180
224
  });
181
225
 
182
226
  it("passes allow_destructive_operations when explicitly enabled", async () => {
@@ -186,14 +230,19 @@ describe("Deploy API", () => {
186
230
  http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
187
231
  capturedUrl = request.url;
188
232
  return HttpResponse.json(
189
- createDeploySuccessResponse({ deploymentId: "deploy-destructive", status: "pending" })
233
+ createDeploySuccessResponse({ deploymentId: "deploy-destructive" })
190
234
  );
191
235
  }),
192
236
  http.get(`${BASE_URL}/v1/deployments/deploy-destructive`, () => {
193
- return HttpResponse.json({
194
- result: "success",
195
- deployment: { id: "deploy-destructive", status: "data_ready", live: true },
196
- });
237
+ return HttpResponse.json(
238
+ createDeploymentStatusResponse({
239
+ deploymentId: "deploy-destructive",
240
+ status: "data_ready",
241
+ })
242
+ );
243
+ }),
244
+ http.post(`${BASE_URL}/v1/deployments/deploy-destructive/set-live`, () => {
245
+ return HttpResponse.json(createSetLiveSuccessResponse());
197
246
  })
198
247
  );
199
248
 
@@ -204,25 +253,6 @@ describe("Deploy API", () => {
204
253
 
205
254
  const parsed = new URL(capturedUrl ?? "");
206
255
  expect(parsed.searchParams.get("allow_destructive_operations")).toBe("true");
207
- expect(parsed.searchParams.get("auto_promote")).toBe("true");
208
- });
209
-
210
- it("does not send auto_promote in check mode", async () => {
211
- let capturedUrl: string | null = null;
212
-
213
- server.use(
214
- http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
215
- capturedUrl = request.url;
216
- return HttpResponse.json({ result: "success" });
217
- })
218
- );
219
-
220
- const result = await deployToMain(config, resources, { check: true });
221
-
222
- expect(result.success).toBe(true);
223
- const parsed = new URL(capturedUrl ?? "");
224
- expect(parsed.searchParams.get("check")).toBe("true");
225
- expect(parsed.searchParams.get("auto_promote")).toBeNull();
226
256
  });
227
257
 
228
258
  it("adds actionable guidance to Forward/Classic workspace errors", async () => {
@@ -248,6 +278,49 @@ describe("Deploy API", () => {
248
278
  );
249
279
  });
250
280
 
281
+ it("handles failed deployment status", async () => {
282
+ server.use(
283
+ http.post(`${BASE_URL}/v1/deploy`, () => {
284
+ return HttpResponse.json(
285
+ createDeploySuccessResponse({ deploymentId: "deploy-fail", status: "pending" })
286
+ );
287
+ }),
288
+ http.get(`${BASE_URL}/v1/deployments/deploy-fail`, () => {
289
+ return HttpResponse.json(
290
+ createDeploymentStatusResponse({ deploymentId: "deploy-fail", status: "failed" })
291
+ );
292
+ })
293
+ );
294
+
295
+ const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
296
+
297
+ expect(result.success).toBe(false);
298
+ expect(result.error).toContain("Deployment failed with status: failed");
299
+ });
300
+
301
+ it("handles set-live failure", async () => {
302
+ server.use(
303
+ http.post(`${BASE_URL}/v1/deploy`, () => {
304
+ return HttpResponse.json(
305
+ createDeploySuccessResponse({ deploymentId: "deploy-setlive-fail" })
306
+ );
307
+ }),
308
+ http.get(`${BASE_URL}/v1/deployments/deploy-setlive-fail`, () => {
309
+ return HttpResponse.json(
310
+ createDeploymentStatusResponse({ deploymentId: "deploy-setlive-fail", status: "data_ready" })
311
+ );
312
+ }),
313
+ http.post(`${BASE_URL}/v1/deployments/deploy-setlive-fail/set-live`, () => {
314
+ return HttpResponse.json({ error: "Set live failed" }, { status: 500 });
315
+ })
316
+ );
317
+
318
+ const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
319
+
320
+ expect(result.success).toBe(false);
321
+ expect(result.error).toContain("Failed to set deployment as live");
322
+ });
323
+
251
324
  it("normalizes baseUrl with trailing slash", async () => {
252
325
  let capturedUrl: string | null = null;
253
326
 
@@ -255,14 +328,16 @@ describe("Deploy API", () => {
255
328
  http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
256
329
  capturedUrl = request.url;
257
330
  return HttpResponse.json(
258
- createDeploySuccessResponse({ deploymentId: "deploy-slash", status: "pending" })
331
+ createDeploySuccessResponse({ deploymentId: "deploy-slash" })
259
332
  );
260
333
  }),
261
334
  http.get(`${BASE_URL}/v1/deployments/deploy-slash`, () => {
262
- return HttpResponse.json({
263
- result: "success",
264
- deployment: { id: "deploy-slash", status: "data_ready", live: true },
265
- });
335
+ return HttpResponse.json(
336
+ createDeploymentStatusResponse({ deploymentId: "deploy-slash", status: "data_ready" })
337
+ );
338
+ }),
339
+ http.post(`${BASE_URL}/v1/deployments/deploy-slash/set-live`, () => {
340
+ return HttpResponse.json(createSetLiveSuccessResponse());
266
341
  })
267
342
  );
268
343
 
@@ -275,7 +350,29 @@ describe("Deploy API", () => {
275
350
  const parsed = new URL(capturedUrl ?? "");
276
351
  expect(parsed.pathname).toBe("/v1/deploy");
277
352
  expect(parsed.searchParams.get("from")).toBe("ts-sdk");
278
- expect(parsed.searchParams.get("auto_promote")).toBe("true");
353
+ });
354
+
355
+ it("times out when deployment never becomes ready", async () => {
356
+ server.use(
357
+ http.post(`${BASE_URL}/v1/deploy`, () => {
358
+ return HttpResponse.json(
359
+ createDeploySuccessResponse({ deploymentId: "deploy-timeout", status: "pending" })
360
+ );
361
+ }),
362
+ http.get(`${BASE_URL}/v1/deployments/deploy-timeout`, () => {
363
+ return HttpResponse.json(
364
+ createDeploymentStatusResponse({ deploymentId: "deploy-timeout", status: "pending" })
365
+ );
366
+ })
367
+ );
368
+
369
+ const result = await deployToMain(config, resources, {
370
+ pollIntervalMs: 1,
371
+ maxPollAttempts: 3,
372
+ });
373
+
374
+ expect(result.success).toBe(false);
375
+ expect(result.error).toContain("Deployment timed out");
279
376
  });
280
377
  });
281
378
  });
package/src/api/deploy.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Deploy resources to Tinybird main workspace
3
- * Uses the /v1/deploy endpoint with auto-promotion enabled
3
+ * Uses the /v1/deploy endpoint to create a deployment, then sets it live
4
4
  */
5
5
 
6
6
  import type { GeneratedResources } from "../generator/index.js";
@@ -31,6 +31,13 @@ export interface Deployment {
31
31
  feedback?: DeploymentFeedback[];
32
32
  }
33
33
 
34
+ /**
35
+ * Response from /v1/deployments list endpoint
36
+ */
37
+ export interface DeploymentsListResponse {
38
+ deployments: Deployment[];
39
+ }
40
+
34
41
  /**
35
42
  * Response from /v1/deploy endpoint
36
43
  */
@@ -41,14 +48,6 @@ export interface DeployResponse {
41
48
  errors?: Array<{ filename?: string; error: string }>;
42
49
  }
43
50
 
44
- /**
45
- * Response from /v1/deployments/{id} endpoint
46
- */
47
- export interface DeploymentStatusResponse {
48
- result: string;
49
- deployment: Deployment;
50
- }
51
-
52
51
  /**
53
52
  * Detailed deployment information with resource changes
54
53
  */
@@ -75,11 +74,21 @@ export interface DeploymentDetails extends Deployment {
75
74
  errors?: Array<{ filename?: string; error: string }>;
76
75
  }
77
76
 
77
+ /**
78
+ * Response from /v1/deployments/{id} endpoint
79
+ */
80
+ export interface DeploymentStatusResponse {
81
+ result: string;
82
+ deployment: Deployment;
83
+ }
84
+
78
85
  /**
79
86
  * Deploy generated resources to Tinybird main workspace
80
87
  *
81
88
  * Uses the /v1/deploy endpoint which accepts all resources in a single
82
- * multipart form request.
89
+ * multipart form request. After creating the deployment, this function:
90
+ * 1. Polls until the deployment is ready (status === 'data_ready')
91
+ * 2. Sets the deployment as live via /v1/deployments/{id}/set-live
83
92
  *
84
93
  * @param config - Build configuration with API URL and token
85
94
  * @param resources - Generated resources to deploy
@@ -152,14 +161,13 @@ export async function deployToMain(
152
161
  pollIntervalMs?: number;
153
162
  maxPollAttempts?: number;
154
163
  check?: boolean;
155
- autoPromote?: boolean;
156
164
  allowDestructiveOperations?: boolean;
157
165
  callbacks?: DeployCallbacks;
158
166
  }
159
167
  ): Promise<BuildApiResult> {
160
168
  const debug = options?.debug ?? !!process.env.TINYBIRD_DEBUG;
161
169
  const pollIntervalMs = options?.pollIntervalMs ?? 1000;
162
- const maxPollAttempts = options?.maxPollAttempts ?? 120;
170
+ const maxPollAttempts = options?.maxPollAttempts ?? 120; // 2 minutes max
163
171
  const baseUrl = config.baseUrl.replace(/\/$/, "");
164
172
 
165
173
  const formData = new FormData();
@@ -194,17 +202,46 @@ export async function deployToMain(
194
202
  );
195
203
  }
196
204
 
197
- // Create deployment via /v1/deploy.
198
- // `auto_promote=true` makes the API promote the deployment automatically.
205
+ // Step 0: Clean up any stale non-live deployments that might block the new deployment
206
+ try {
207
+ const deploymentsUrl = `${baseUrl}/v1/deployments`;
208
+ const deploymentsResponse = await tinybirdFetch(deploymentsUrl, {
209
+ headers: {
210
+ Authorization: `Bearer ${config.token}`,
211
+ },
212
+ });
213
+
214
+ if (deploymentsResponse.ok) {
215
+ const deploymentsBody = (await deploymentsResponse.json()) as DeploymentsListResponse;
216
+ const staleDeployments = deploymentsBody.deployments.filter(
217
+ (d) => !d.live && d.status !== "live"
218
+ );
219
+
220
+ for (const stale of staleDeployments) {
221
+ if (debug) {
222
+ console.log(`[debug] Cleaning up stale deployment: ${stale.id} (status: ${stale.status})`);
223
+ }
224
+ await tinybirdFetch(`${baseUrl}/v1/deployments/${stale.id}`, {
225
+ method: "DELETE",
226
+ headers: {
227
+ Authorization: `Bearer ${config.token}`,
228
+ },
229
+ });
230
+ }
231
+ }
232
+ } catch (e) {
233
+ // Ignore errors during cleanup - we'll try to deploy anyway
234
+ if (debug) {
235
+ console.log(`[debug] Failed to clean up stale deployments: ${e}`);
236
+ }
237
+ }
238
+
239
+ // Step 1: Create deployment via /v1/deploy
199
240
  const deployUrlBase = `${baseUrl}/v1/deploy`;
200
241
  const urlParams = new URLSearchParams();
201
242
  if (options?.check) {
202
243
  urlParams.set("check", "true");
203
244
  }
204
- const autoPromote = options?.autoPromote ?? !options?.check;
205
- if (autoPromote) {
206
- urlParams.set("auto_promote", "true");
207
- }
208
245
  if (options?.allowDestructiveOperations) {
209
246
  urlParams.set("allow_destructive_operations", "true");
210
247
  }
@@ -371,22 +408,18 @@ export async function deployToMain(
371
408
  });
372
409
  }
373
410
 
374
- let deployment = deploymentDetails;
375
- let statusAttempts = 0;
411
+ // Step 2: Poll until deployment is ready
412
+ let deployment = body.deployment;
413
+ let attempts = 0;
376
414
 
377
415
  options?.callbacks?.onWaitingForReady?.();
378
416
 
379
- while (
380
- deployment.status !== "data_ready" &&
381
- deployment.status !== "failed" &&
382
- deployment.status !== "error" &&
383
- statusAttempts < maxPollAttempts
384
- ) {
417
+ while (deployment.status !== "data_ready" && attempts < maxPollAttempts) {
385
418
  await sleep(pollIntervalMs);
386
- statusAttempts++;
419
+ attempts++;
387
420
 
388
421
  if (debug) {
389
- console.log(`[debug] Polling deployment status (attempt ${statusAttempts})...`);
422
+ console.log(`[debug] Polling deployment status (attempt ${attempts})...`);
390
423
  }
391
424
 
392
425
  const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
@@ -410,18 +443,23 @@ export async function deployToMain(
410
443
 
411
444
  const statusBody = (await statusResponse.json()) as DeploymentStatusResponse;
412
445
  deployment = statusBody.deployment;
413
- }
414
446
 
415
- if (deployment.status === "failed" || deployment.status === "error") {
416
- return {
417
- success: false,
418
- result: "failed",
419
- error: `Deployment failed with status: ${deployment.status}`,
420
- datasourceCount: resources.datasources.length,
421
- pipeCount: resources.pipes.length,
422
- connectionCount: resources.connections?.length ?? 0,
423
- buildId: deploymentId,
424
- };
447
+ if (debug) {
448
+ console.log(`[debug] Deployment status: ${deployment.status}`);
449
+ }
450
+
451
+ // Check for failed status
452
+ if (deployment.status === "failed" || deployment.status === "error") {
453
+ return {
454
+ success: false,
455
+ result: "failed",
456
+ error: `Deployment failed with status: ${deployment.status}`,
457
+ datasourceCount: resources.datasources.length,
458
+ pipeCount: resources.pipes.length,
459
+ connectionCount: resources.connections?.length ?? 0,
460
+ buildId: deploymentId,
461
+ };
462
+ }
425
463
  }
426
464
 
427
465
  if (deployment.status !== "data_ready") {
@@ -438,64 +476,38 @@ export async function deployToMain(
438
476
 
439
477
  options?.callbacks?.onDeploymentReady?.();
440
478
 
441
- if (autoPromote && !deployment.live) {
442
- let promotionAttempts = 0;
443
- options?.callbacks?.onWaitingForPromote?.();
444
-
445
- while (!deployment.live && promotionAttempts < maxPollAttempts) {
446
- await sleep(pollIntervalMs);
447
- promotionAttempts++;
479
+ // Step 3: Set the deployment as live
480
+ const setLiveUrl = `${baseUrl}/v1/deployments/${deploymentId}/set-live`;
448
481
 
449
- if (debug) {
450
- console.log(`[debug] Polling auto-promote status (attempt ${promotionAttempts})...`);
451
- }
452
-
453
- const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
454
- const statusResponse = await tinybirdFetch(statusUrl, {
455
- headers: {
456
- Authorization: `Bearer ${config.token}`,
457
- },
458
- });
459
-
460
- if (!statusResponse.ok) {
461
- return {
462
- success: false,
463
- result: "failed",
464
- error: `Failed to check deployment status: ${statusResponse.status} ${statusResponse.statusText}`,
465
- datasourceCount: resources.datasources.length,
466
- pipeCount: resources.pipes.length,
467
- connectionCount: resources.connections?.length ?? 0,
468
- buildId: deploymentId,
469
- };
470
- }
471
-
472
- const statusBody = (await statusResponse.json()) as DeploymentStatusResponse;
473
- deployment = statusBody.deployment;
474
- }
482
+ if (debug) {
483
+ console.log(`[debug] POST ${setLiveUrl}`);
484
+ }
475
485
 
476
- if (!deployment.live) {
477
- return {
478
- success: false,
479
- result: "failed",
480
- error: `Deployment reached data_ready but auto-promote did not complete after ${maxPollAttempts} attempts`,
481
- datasourceCount: resources.datasources.length,
482
- pipeCount: resources.pipes.length,
483
- connectionCount: resources.connections?.length ?? 0,
484
- buildId: deploymentId,
485
- };
486
- }
486
+ const setLiveResponse = await tinybirdFetch(setLiveUrl, {
487
+ method: "POST",
488
+ headers: {
489
+ Authorization: `Bearer ${config.token}`,
490
+ },
491
+ });
487
492
 
488
- options?.callbacks?.onDeploymentPromoted?.();
493
+ if (!setLiveResponse.ok) {
494
+ const setLiveBody = await setLiveResponse.text();
495
+ return {
496
+ success: false,
497
+ result: "failed",
498
+ error: `Failed to set deployment as live: ${setLiveResponse.status} ${setLiveResponse.statusText}\n${setLiveBody}`,
499
+ datasourceCount: resources.datasources.length,
500
+ pipeCount: resources.pipes.length,
501
+ connectionCount: resources.connections?.length ?? 0,
502
+ buildId: deploymentId,
503
+ };
489
504
  }
490
505
 
491
506
  if (debug) {
492
- const stateLabel = deployment.live ? "live" : "ready";
493
- console.log(`[debug] Deployment ${deploymentId} is now ${stateLabel}`);
507
+ console.log(`[debug] Deployment ${deploymentId} is now live`);
494
508
  }
495
509
 
496
- if (deployment.live) {
497
- options?.callbacks?.onDeploymentLive?.(deploymentId);
498
- }
510
+ options?.callbacks?.onDeploymentLive?.(deploymentId);
499
511
 
500
512
  return {
501
513
  success: true,
@@ -517,6 +529,9 @@ export async function deployToMain(
517
529
  };
518
530
  }
519
531
 
532
+ /**
533
+ * Helper function to sleep for a given number of milliseconds
534
+ */
520
535
  function sleep(ms: number): Promise<void> {
521
536
  return new Promise((resolve) => setTimeout(resolve, ms));
522
537
  }