@tinybirdco/sdk 0.0.52 → 0.0.53
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.
- package/dist/api/deploy.d.ts +10 -17
- package/dist/api/deploy.d.ts.map +1 -1
- package/dist/api/deploy.js +68 -76
- package/dist/api/deploy.js.map +1 -1
- package/dist/api/deploy.test.js +55 -90
- package/dist/api/deploy.test.js.map +1 -1
- package/package.json +1 -1
- package/src/api/deploy.test.ts +62 -159
- package/src/api/deploy.ts +89 -104
package/dist/api/deploy.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Deploy resources to Tinybird main workspace
|
|
3
|
-
* Uses the /v1/deploy endpoint
|
|
3
|
+
* Uses the /v1/deploy endpoint with auto-promotion enabled
|
|
4
4
|
*/
|
|
5
5
|
import type { GeneratedResources } from "../generator/index.js";
|
|
6
6
|
import type { BuildConfig, BuildApiResult } from "./build.js";
|
|
@@ -23,12 +23,6 @@ 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
|
-
}
|
|
32
26
|
/**
|
|
33
27
|
* Response from /v1/deploy endpoint
|
|
34
28
|
*/
|
|
@@ -41,6 +35,13 @@ export interface DeployResponse {
|
|
|
41
35
|
error: string;
|
|
42
36
|
}>;
|
|
43
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Response from /v1/deployments/{id} endpoint
|
|
40
|
+
*/
|
|
41
|
+
export interface DeploymentStatusResponse {
|
|
42
|
+
result: string;
|
|
43
|
+
deployment: Deployment;
|
|
44
|
+
}
|
|
44
45
|
/**
|
|
45
46
|
* Detailed deployment information with resource changes
|
|
46
47
|
*/
|
|
@@ -69,20 +70,11 @@ export interface DeploymentDetails extends Deployment {
|
|
|
69
70
|
error: string;
|
|
70
71
|
}>;
|
|
71
72
|
}
|
|
72
|
-
/**
|
|
73
|
-
* Response from /v1/deployments/{id} endpoint
|
|
74
|
-
*/
|
|
75
|
-
export interface DeploymentStatusResponse {
|
|
76
|
-
result: string;
|
|
77
|
-
deployment: Deployment;
|
|
78
|
-
}
|
|
79
73
|
/**
|
|
80
74
|
* Deploy generated resources to Tinybird main workspace
|
|
81
75
|
*
|
|
82
76
|
* Uses the /v1/deploy endpoint which accepts all resources in a single
|
|
83
|
-
* multipart form request.
|
|
84
|
-
* 1. Polls until the deployment is ready (status === 'data_ready')
|
|
85
|
-
* 2. Sets the deployment as live via /v1/deployments/{id}/set-live
|
|
77
|
+
* multipart form request.
|
|
86
78
|
*
|
|
87
79
|
* @param config - Build configuration with API URL and token
|
|
88
80
|
* @param resources - Generated resources to deploy
|
|
@@ -150,6 +142,7 @@ export declare function deployToMain(config: BuildConfig, resources: GeneratedRe
|
|
|
150
142
|
pollIntervalMs?: number;
|
|
151
143
|
maxPollAttempts?: number;
|
|
152
144
|
check?: boolean;
|
|
145
|
+
autoPromote?: boolean;
|
|
153
146
|
allowDestructiveOperations?: boolean;
|
|
154
147
|
callbacks?: DeployCallbacks;
|
|
155
148
|
}): Promise<BuildApiResult>;
|
package/dist/api/deploy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,CAAC;IACjB,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,
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/api/deploy.ts"],"names":[],"mappings":"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"}
|
package/dist/api/deploy.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Deploy resources to Tinybird main workspace
|
|
3
|
-
* Uses the /v1/deploy endpoint
|
|
3
|
+
* Uses the /v1/deploy endpoint with auto-promotion enabled
|
|
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;
|
|
11
11
|
const baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
12
12
|
const formData = new FormData();
|
|
13
13
|
// Add datasources
|
|
@@ -30,42 +30,17 @@ 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
|
-
//
|
|
34
|
-
|
|
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
|
|
33
|
+
// Create deployment via /v1/deploy.
|
|
34
|
+
// `auto_promote=true` makes the API promote the deployment automatically.
|
|
64
35
|
const deployUrlBase = `${baseUrl}/v1/deploy`;
|
|
65
36
|
const urlParams = new URLSearchParams();
|
|
66
37
|
if (options?.check) {
|
|
67
38
|
urlParams.set("check", "true");
|
|
68
39
|
}
|
|
40
|
+
const autoPromote = options?.autoPromote ?? !options?.check;
|
|
41
|
+
if (autoPromote) {
|
|
42
|
+
urlParams.set("auto_promote", "true");
|
|
43
|
+
}
|
|
69
44
|
if (options?.allowDestructiveOperations) {
|
|
70
45
|
urlParams.set("allow_destructive_operations", "true");
|
|
71
46
|
}
|
|
@@ -214,15 +189,17 @@ export async function deployToMain(config, resources, options) {
|
|
|
214
189
|
},
|
|
215
190
|
});
|
|
216
191
|
}
|
|
217
|
-
|
|
218
|
-
let
|
|
219
|
-
let attempts = 0;
|
|
192
|
+
let deployment = deploymentDetails;
|
|
193
|
+
let statusAttempts = 0;
|
|
220
194
|
options?.callbacks?.onWaitingForReady?.();
|
|
221
|
-
while (deployment.status !== "data_ready" &&
|
|
195
|
+
while (deployment.status !== "data_ready" &&
|
|
196
|
+
deployment.status !== "failed" &&
|
|
197
|
+
deployment.status !== "error" &&
|
|
198
|
+
statusAttempts < maxPollAttempts) {
|
|
222
199
|
await sleep(pollIntervalMs);
|
|
223
|
-
|
|
200
|
+
statusAttempts++;
|
|
224
201
|
if (debug) {
|
|
225
|
-
console.log(`[debug] Polling deployment status (attempt ${
|
|
202
|
+
console.log(`[debug] Polling deployment status (attempt ${statusAttempts})...`);
|
|
226
203
|
}
|
|
227
204
|
const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
|
|
228
205
|
const statusResponse = await tinybirdFetch(statusUrl, {
|
|
@@ -243,61 +220,79 @@ export async function deployToMain(config, resources, options) {
|
|
|
243
220
|
}
|
|
244
221
|
const statusBody = (await statusResponse.json());
|
|
245
222
|
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
|
-
}
|
|
261
223
|
}
|
|
262
|
-
if (deployment.status
|
|
224
|
+
if (deployment.status === "failed" || deployment.status === "error") {
|
|
263
225
|
return {
|
|
264
226
|
success: false,
|
|
265
227
|
result: "failed",
|
|
266
|
-
error: `Deployment
|
|
228
|
+
error: `Deployment failed with status: ${deployment.status}`,
|
|
267
229
|
datasourceCount: resources.datasources.length,
|
|
268
230
|
pipeCount: resources.pipes.length,
|
|
269
231
|
connectionCount: resources.connections?.length ?? 0,
|
|
270
232
|
buildId: deploymentId,
|
|
271
233
|
};
|
|
272
234
|
}
|
|
273
|
-
|
|
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();
|
|
235
|
+
if (deployment.status !== "data_ready") {
|
|
287
236
|
return {
|
|
288
237
|
success: false,
|
|
289
238
|
result: "failed",
|
|
290
|
-
error: `
|
|
239
|
+
error: `Deployment timed out after ${maxPollAttempts} attempts. Last status: ${deployment.status}`,
|
|
291
240
|
datasourceCount: resources.datasources.length,
|
|
292
241
|
pipeCount: resources.pipes.length,
|
|
293
242
|
connectionCount: resources.connections?.length ?? 0,
|
|
294
243
|
buildId: deploymentId,
|
|
295
244
|
};
|
|
296
245
|
}
|
|
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
|
+
}
|
|
297
289
|
if (debug) {
|
|
298
|
-
|
|
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);
|
|
299
295
|
}
|
|
300
|
-
options?.callbacks?.onDeploymentLive?.(deploymentId);
|
|
301
296
|
return {
|
|
302
297
|
success: true,
|
|
303
298
|
result: "success",
|
|
@@ -317,9 +312,6 @@ export async function deployToMain(config, resources, options) {
|
|
|
317
312
|
},
|
|
318
313
|
};
|
|
319
314
|
}
|
|
320
|
-
/**
|
|
321
|
-
* Helper function to sleep for a given number of milliseconds
|
|
322
|
-
*/
|
|
323
315
|
function sleep(ms) {
|
|
324
316
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
325
317
|
}
|
package/dist/api/deploy.js.map
CHANGED
|
@@ -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":"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"}
|
package/dist/api/deploy.test.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import { describe, it, expect, beforeAll,
|
|
1
|
+
import { describe, it, expect, beforeAll, afterEach, afterAll, vi } 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,
|
|
5
|
+
import { BASE_URL, createDeploySuccessResponse, createBuildFailureResponse, createBuildMultipleErrorsResponse, } 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
|
-
});
|
|
14
8
|
afterEach(() => server.resetHandlers());
|
|
15
9
|
afterAll(() => server.close());
|
|
16
10
|
describe("Deploy API", () => {
|
|
@@ -19,53 +13,44 @@ describe("Deploy API", () => {
|
|
|
19
13
|
token: "p.test-token",
|
|
20
14
|
};
|
|
21
15
|
const resources = {
|
|
22
|
-
datasources: [
|
|
23
|
-
|
|
24
|
-
],
|
|
25
|
-
pipes: [
|
|
26
|
-
{ name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" },
|
|
27
|
-
],
|
|
16
|
+
datasources: [{ name: "events", content: "SCHEMA > timestamp DateTime" }],
|
|
17
|
+
pipes: [{ name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" }],
|
|
28
18
|
connections: [],
|
|
29
19
|
};
|
|
30
|
-
|
|
31
|
-
function setupSuccessfulDeployFlow(deploymentId = "deploy-abc") {
|
|
20
|
+
function setupAutoPromoteSuccessFlow(deploymentId = "deploy-abc") {
|
|
32
21
|
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
33
22
|
return HttpResponse.json(createDeploySuccessResponse({ deploymentId, status: "pending" }));
|
|
34
23
|
}), http.get(`${BASE_URL}/v1/deployments/${deploymentId}`, () => {
|
|
35
|
-
return HttpResponse.json(
|
|
36
|
-
|
|
37
|
-
|
|
24
|
+
return HttpResponse.json({
|
|
25
|
+
result: "success",
|
|
26
|
+
deployment: {
|
|
27
|
+
id: deploymentId,
|
|
28
|
+
status: "data_ready",
|
|
29
|
+
live: true,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
38
32
|
}));
|
|
39
33
|
}
|
|
40
34
|
describe("deployToMain", () => {
|
|
41
|
-
it("successfully deploys resources with
|
|
42
|
-
|
|
43
|
-
const
|
|
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
|
+
});
|
|
44
42
|
expect(result.success).toBe(true);
|
|
45
43
|
expect(result.result).toBe("success");
|
|
46
44
|
expect(result.buildId).toBe("deploy-abc");
|
|
47
45
|
expect(result.datasourceCount).toBe(1);
|
|
48
46
|
expect(result.pipeCount).toBe(1);
|
|
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);
|
|
47
|
+
expect(onDeploymentLive).toHaveBeenCalledWith("deploy-abc");
|
|
65
48
|
});
|
|
66
49
|
it("handles deploy failure with single error", async () => {
|
|
67
50
|
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
68
|
-
return HttpResponse.json(createBuildFailureResponse("Permission denied"), {
|
|
51
|
+
return HttpResponse.json(createBuildFailureResponse("Permission denied"), {
|
|
52
|
+
status: 200,
|
|
53
|
+
});
|
|
69
54
|
}));
|
|
70
55
|
const result = await deployToMain(config, resources);
|
|
71
56
|
expect(result.success).toBe(false);
|
|
@@ -101,33 +86,33 @@ describe("Deploy API", () => {
|
|
|
101
86
|
}));
|
|
102
87
|
await expect(deployToMain(config, resources)).rejects.toThrow("Failed to parse response");
|
|
103
88
|
});
|
|
104
|
-
it("uses /v1/deploy endpoint
|
|
89
|
+
it("uses /v1/deploy endpoint and sends auto_promote by default", async () => {
|
|
105
90
|
let capturedUrl = null;
|
|
106
91
|
server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
107
92
|
capturedUrl = request.url;
|
|
108
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-url-test" }));
|
|
93
|
+
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-url-test", status: "pending" }));
|
|
109
94
|
}), http.get(`${BASE_URL}/v1/deployments/deploy-url-test`, () => {
|
|
110
|
-
return HttpResponse.json(
|
|
111
|
-
|
|
112
|
-
|
|
95
|
+
return HttpResponse.json({
|
|
96
|
+
result: "success",
|
|
97
|
+
deployment: { id: "deploy-url-test", status: "data_ready", live: true },
|
|
98
|
+
});
|
|
113
99
|
}));
|
|
114
100
|
await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
115
101
|
const parsed = new URL(capturedUrl ?? "");
|
|
116
102
|
expect(parsed.pathname).toBe("/v1/deploy");
|
|
117
103
|
expect(parsed.searchParams.get("from")).toBe("ts-sdk");
|
|
104
|
+
expect(parsed.searchParams.get("auto_promote")).toBe("true");
|
|
118
105
|
});
|
|
119
106
|
it("passes allow_destructive_operations when explicitly enabled", async () => {
|
|
120
107
|
let capturedUrl = null;
|
|
121
108
|
server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
122
109
|
capturedUrl = request.url;
|
|
123
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-destructive" }));
|
|
110
|
+
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-destructive", status: "pending" }));
|
|
124
111
|
}), http.get(`${BASE_URL}/v1/deployments/deploy-destructive`, () => {
|
|
125
|
-
return HttpResponse.json(
|
|
126
|
-
|
|
127
|
-
status: "data_ready",
|
|
128
|
-
})
|
|
129
|
-
}), http.post(`${BASE_URL}/v1/deployments/deploy-destructive/set-live`, () => {
|
|
130
|
-
return HttpResponse.json(createSetLiveSuccessResponse());
|
|
112
|
+
return HttpResponse.json({
|
|
113
|
+
result: "success",
|
|
114
|
+
deployment: { id: "deploy-destructive", status: "data_ready", live: true },
|
|
115
|
+
});
|
|
131
116
|
}));
|
|
132
117
|
await deployToMain(config, resources, {
|
|
133
118
|
pollIntervalMs: 1,
|
|
@@ -135,6 +120,19 @@ describe("Deploy API", () => {
|
|
|
135
120
|
});
|
|
136
121
|
const parsed = new URL(capturedUrl ?? "");
|
|
137
122
|
expect(parsed.searchParams.get("allow_destructive_operations")).toBe("true");
|
|
123
|
+
expect(parsed.searchParams.get("auto_promote")).toBe("true");
|
|
124
|
+
});
|
|
125
|
+
it("does not send auto_promote in check mode", async () => {
|
|
126
|
+
let capturedUrl = null;
|
|
127
|
+
server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
128
|
+
capturedUrl = request.url;
|
|
129
|
+
return HttpResponse.json({ result: "success" });
|
|
130
|
+
}));
|
|
131
|
+
const result = await deployToMain(config, resources, { check: true });
|
|
132
|
+
expect(result.success).toBe(true);
|
|
133
|
+
const parsed = new URL(capturedUrl ?? "");
|
|
134
|
+
expect(parsed.searchParams.get("check")).toBe("true");
|
|
135
|
+
expect(parsed.searchParams.get("auto_promote")).toBeNull();
|
|
138
136
|
});
|
|
139
137
|
it("adds actionable guidance to Forward/Classic workspace errors", async () => {
|
|
140
138
|
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
@@ -148,55 +146,22 @@ describe("Deploy API", () => {
|
|
|
148
146
|
expect(result.error).toContain("Tinybird Forward workspace");
|
|
149
147
|
expect(result.error).toContain("Use the Tinybird Classic CLI (`tb`) from a Tinybird Classic workspace for this operation.");
|
|
150
148
|
});
|
|
151
|
-
it("handles failed deployment status", async () => {
|
|
152
|
-
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
153
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-fail", status: "pending" }));
|
|
154
|
-
}), http.get(`${BASE_URL}/v1/deployments/deploy-fail`, () => {
|
|
155
|
-
return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-fail", status: "failed" }));
|
|
156
|
-
}));
|
|
157
|
-
const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
158
|
-
expect(result.success).toBe(false);
|
|
159
|
-
expect(result.error).toContain("Deployment failed with status: failed");
|
|
160
|
-
});
|
|
161
|
-
it("handles set-live failure", async () => {
|
|
162
|
-
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
163
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-setlive-fail" }));
|
|
164
|
-
}), http.get(`${BASE_URL}/v1/deployments/deploy-setlive-fail`, () => {
|
|
165
|
-
return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-setlive-fail", status: "data_ready" }));
|
|
166
|
-
}), http.post(`${BASE_URL}/v1/deployments/deploy-setlive-fail/set-live`, () => {
|
|
167
|
-
return HttpResponse.json({ error: "Set live failed" }, { status: 500 });
|
|
168
|
-
}));
|
|
169
|
-
const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
170
|
-
expect(result.success).toBe(false);
|
|
171
|
-
expect(result.error).toContain("Failed to set deployment as live");
|
|
172
|
-
});
|
|
173
149
|
it("normalizes baseUrl with trailing slash", async () => {
|
|
174
150
|
let capturedUrl = null;
|
|
175
151
|
server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
176
152
|
capturedUrl = request.url;
|
|
177
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-slash" }));
|
|
153
|
+
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-slash", status: "pending" }));
|
|
178
154
|
}), http.get(`${BASE_URL}/v1/deployments/deploy-slash`, () => {
|
|
179
|
-
return HttpResponse.json(
|
|
180
|
-
|
|
181
|
-
|
|
155
|
+
return HttpResponse.json({
|
|
156
|
+
result: "success",
|
|
157
|
+
deployment: { id: "deploy-slash", status: "data_ready", live: true },
|
|
158
|
+
});
|
|
182
159
|
}));
|
|
183
160
|
await deployToMain({ ...config, baseUrl: `${BASE_URL}/` }, resources, { pollIntervalMs: 1 });
|
|
184
161
|
const parsed = new URL(capturedUrl ?? "");
|
|
185
162
|
expect(parsed.pathname).toBe("/v1/deploy");
|
|
186
163
|
expect(parsed.searchParams.get("from")).toBe("ts-sdk");
|
|
187
|
-
|
|
188
|
-
it("times out when deployment never becomes ready", async () => {
|
|
189
|
-
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
190
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-timeout", status: "pending" }));
|
|
191
|
-
}), http.get(`${BASE_URL}/v1/deployments/deploy-timeout`, () => {
|
|
192
|
-
return HttpResponse.json(createDeploymentStatusResponse({ deploymentId: "deploy-timeout", status: "pending" }));
|
|
193
|
-
}));
|
|
194
|
-
const result = await deployToMain(config, resources, {
|
|
195
|
-
pollIntervalMs: 1,
|
|
196
|
-
maxPollAttempts: 3,
|
|
197
|
-
});
|
|
198
|
-
expect(result.success).toBe(false);
|
|
199
|
-
expect(result.error).toContain("Deployment timed out");
|
|
164
|
+
expect(parsed.searchParams.get("auto_promote")).toBe("true");
|
|
200
165
|
});
|
|
201
166
|
});
|
|
202
167
|
});
|
|
@@ -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
package/src/api/deploy.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it, expect, beforeAll,
|
|
1
|
+
import { describe, it, expect, beforeAll, afterEach, afterAll, vi } from "vitest";
|
|
2
2
|
import { setupServer } from "msw/node";
|
|
3
3
|
import { http, HttpResponse } from "msw";
|
|
4
4
|
import { deployToMain } from "./deploy.js";
|
|
@@ -6,25 +6,14 @@ import type { BuildConfig } from "./build.js";
|
|
|
6
6
|
import {
|
|
7
7
|
BASE_URL,
|
|
8
8
|
createDeploySuccessResponse,
|
|
9
|
-
createDeploymentStatusResponse,
|
|
10
|
-
createSetLiveSuccessResponse,
|
|
11
9
|
createBuildFailureResponse,
|
|
12
10
|
createBuildMultipleErrorsResponse,
|
|
13
|
-
createDeploymentsListResponse,
|
|
14
11
|
} from "../test/handlers.js";
|
|
15
12
|
import type { GeneratedResources } from "../generator/index.js";
|
|
16
13
|
|
|
17
14
|
const server = setupServer();
|
|
18
15
|
|
|
19
16
|
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
|
-
});
|
|
28
17
|
afterEach(() => server.resetHandlers());
|
|
29
18
|
afterAll(() => server.close());
|
|
30
19
|
|
|
@@ -35,17 +24,12 @@ describe("Deploy API", () => {
|
|
|
35
24
|
};
|
|
36
25
|
|
|
37
26
|
const resources: GeneratedResources = {
|
|
38
|
-
datasources: [
|
|
39
|
-
|
|
40
|
-
],
|
|
41
|
-
pipes: [
|
|
42
|
-
{ name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" },
|
|
43
|
-
],
|
|
27
|
+
datasources: [{ name: "events", content: "SCHEMA > timestamp DateTime" }],
|
|
28
|
+
pipes: [{ name: "top_events", content: "NODE main\nSQL > SELECT * FROM events" }],
|
|
44
29
|
connections: [],
|
|
45
30
|
};
|
|
46
31
|
|
|
47
|
-
|
|
48
|
-
function setupSuccessfulDeployFlow(deploymentId = "deploy-abc") {
|
|
32
|
+
function setupAutoPromoteSuccessFlow(deploymentId = "deploy-abc") {
|
|
49
33
|
server.use(
|
|
50
34
|
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
51
35
|
return HttpResponse.json(
|
|
@@ -53,64 +37,42 @@ describe("Deploy API", () => {
|
|
|
53
37
|
);
|
|
54
38
|
}),
|
|
55
39
|
http.get(`${BASE_URL}/v1/deployments/${deploymentId}`, () => {
|
|
56
|
-
return HttpResponse.json(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
40
|
+
return HttpResponse.json({
|
|
41
|
+
result: "success",
|
|
42
|
+
deployment: {
|
|
43
|
+
id: deploymentId,
|
|
44
|
+
status: "data_ready",
|
|
45
|
+
live: true,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
62
48
|
})
|
|
63
49
|
);
|
|
64
50
|
}
|
|
65
51
|
|
|
66
52
|
describe("deployToMain", () => {
|
|
67
|
-
it("successfully deploys resources with
|
|
68
|
-
|
|
53
|
+
it("successfully deploys resources with auto-promote flow", async () => {
|
|
54
|
+
setupAutoPromoteSuccessFlow("deploy-abc");
|
|
69
55
|
|
|
70
|
-
const
|
|
56
|
+
const onDeploymentLive = vi.fn();
|
|
57
|
+
const result = await deployToMain(config, resources, {
|
|
58
|
+
pollIntervalMs: 1,
|
|
59
|
+
callbacks: { onDeploymentLive },
|
|
60
|
+
});
|
|
71
61
|
|
|
72
62
|
expect(result.success).toBe(true);
|
|
73
63
|
expect(result.result).toBe("success");
|
|
74
64
|
expect(result.buildId).toBe("deploy-abc");
|
|
75
65
|
expect(result.datasourceCount).toBe(1);
|
|
76
66
|
expect(result.pipeCount).toBe(1);
|
|
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);
|
|
67
|
+
expect(onDeploymentLive).toHaveBeenCalledWith("deploy-abc");
|
|
105
68
|
});
|
|
106
69
|
|
|
107
70
|
it("handles deploy failure with single error", async () => {
|
|
108
71
|
server.use(
|
|
109
72
|
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
110
|
-
return HttpResponse.json(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
);
|
|
73
|
+
return HttpResponse.json(createBuildFailureResponse("Permission denied"), {
|
|
74
|
+
status: 200,
|
|
75
|
+
});
|
|
114
76
|
})
|
|
115
77
|
);
|
|
116
78
|
|
|
@@ -144,10 +106,7 @@ describe("Deploy API", () => {
|
|
|
144
106
|
it("handles HTTP error responses", async () => {
|
|
145
107
|
server.use(
|
|
146
108
|
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
147
|
-
return HttpResponse.json(
|
|
148
|
-
{ result: "failed", error: "Forbidden" },
|
|
149
|
-
{ status: 403 }
|
|
150
|
-
);
|
|
109
|
+
return HttpResponse.json({ result: "failed", error: "Forbidden" }, { status: 403 });
|
|
151
110
|
})
|
|
152
111
|
);
|
|
153
112
|
|
|
@@ -167,28 +126,24 @@ describe("Deploy API", () => {
|
|
|
167
126
|
})
|
|
168
127
|
);
|
|
169
128
|
|
|
170
|
-
await expect(deployToMain(config, resources)).rejects.toThrow(
|
|
171
|
-
"Failed to parse response"
|
|
172
|
-
);
|
|
129
|
+
await expect(deployToMain(config, resources)).rejects.toThrow("Failed to parse response");
|
|
173
130
|
});
|
|
174
131
|
|
|
175
|
-
it("uses /v1/deploy endpoint
|
|
132
|
+
it("uses /v1/deploy endpoint and sends auto_promote by default", async () => {
|
|
176
133
|
let capturedUrl: string | null = null;
|
|
177
134
|
|
|
178
135
|
server.use(
|
|
179
136
|
http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
180
137
|
capturedUrl = request.url;
|
|
181
138
|
return HttpResponse.json(
|
|
182
|
-
createDeploySuccessResponse({ deploymentId: "deploy-url-test" })
|
|
139
|
+
createDeploySuccessResponse({ deploymentId: "deploy-url-test", status: "pending" })
|
|
183
140
|
);
|
|
184
141
|
}),
|
|
185
142
|
http.get(`${BASE_URL}/v1/deployments/deploy-url-test`, () => {
|
|
186
|
-
return HttpResponse.json(
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
http.post(`${BASE_URL}/v1/deployments/deploy-url-test/set-live`, () => {
|
|
191
|
-
return HttpResponse.json(createSetLiveSuccessResponse());
|
|
143
|
+
return HttpResponse.json({
|
|
144
|
+
result: "success",
|
|
145
|
+
deployment: { id: "deploy-url-test", status: "data_ready", live: true },
|
|
146
|
+
});
|
|
192
147
|
})
|
|
193
148
|
);
|
|
194
149
|
|
|
@@ -197,6 +152,7 @@ describe("Deploy API", () => {
|
|
|
197
152
|
const parsed = new URL(capturedUrl ?? "");
|
|
198
153
|
expect(parsed.pathname).toBe("/v1/deploy");
|
|
199
154
|
expect(parsed.searchParams.get("from")).toBe("ts-sdk");
|
|
155
|
+
expect(parsed.searchParams.get("auto_promote")).toBe("true");
|
|
200
156
|
});
|
|
201
157
|
|
|
202
158
|
it("passes allow_destructive_operations when explicitly enabled", async () => {
|
|
@@ -206,19 +162,14 @@ describe("Deploy API", () => {
|
|
|
206
162
|
http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
207
163
|
capturedUrl = request.url;
|
|
208
164
|
return HttpResponse.json(
|
|
209
|
-
createDeploySuccessResponse({ deploymentId: "deploy-destructive" })
|
|
165
|
+
createDeploySuccessResponse({ deploymentId: "deploy-destructive", status: "pending" })
|
|
210
166
|
);
|
|
211
167
|
}),
|
|
212
168
|
http.get(`${BASE_URL}/v1/deployments/deploy-destructive`, () => {
|
|
213
|
-
return HttpResponse.json(
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
})
|
|
218
|
-
);
|
|
219
|
-
}),
|
|
220
|
-
http.post(`${BASE_URL}/v1/deployments/deploy-destructive/set-live`, () => {
|
|
221
|
-
return HttpResponse.json(createSetLiveSuccessResponse());
|
|
169
|
+
return HttpResponse.json({
|
|
170
|
+
result: "success",
|
|
171
|
+
deployment: { id: "deploy-destructive", status: "data_ready", live: true },
|
|
172
|
+
});
|
|
222
173
|
})
|
|
223
174
|
);
|
|
224
175
|
|
|
@@ -229,6 +180,25 @@ describe("Deploy API", () => {
|
|
|
229
180
|
|
|
230
181
|
const parsed = new URL(capturedUrl ?? "");
|
|
231
182
|
expect(parsed.searchParams.get("allow_destructive_operations")).toBe("true");
|
|
183
|
+
expect(parsed.searchParams.get("auto_promote")).toBe("true");
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it("does not send auto_promote in check mode", async () => {
|
|
187
|
+
let capturedUrl: string | null = null;
|
|
188
|
+
|
|
189
|
+
server.use(
|
|
190
|
+
http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
191
|
+
capturedUrl = request.url;
|
|
192
|
+
return HttpResponse.json({ result: "success" });
|
|
193
|
+
})
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
const result = await deployToMain(config, resources, { check: true });
|
|
197
|
+
|
|
198
|
+
expect(result.success).toBe(true);
|
|
199
|
+
const parsed = new URL(capturedUrl ?? "");
|
|
200
|
+
expect(parsed.searchParams.get("check")).toBe("true");
|
|
201
|
+
expect(parsed.searchParams.get("auto_promote")).toBeNull();
|
|
232
202
|
});
|
|
233
203
|
|
|
234
204
|
it("adds actionable guidance to Forward/Classic workspace errors", async () => {
|
|
@@ -254,49 +224,6 @@ describe("Deploy API", () => {
|
|
|
254
224
|
);
|
|
255
225
|
});
|
|
256
226
|
|
|
257
|
-
it("handles failed deployment status", async () => {
|
|
258
|
-
server.use(
|
|
259
|
-
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
260
|
-
return HttpResponse.json(
|
|
261
|
-
createDeploySuccessResponse({ deploymentId: "deploy-fail", status: "pending" })
|
|
262
|
-
);
|
|
263
|
-
}),
|
|
264
|
-
http.get(`${BASE_URL}/v1/deployments/deploy-fail`, () => {
|
|
265
|
-
return HttpResponse.json(
|
|
266
|
-
createDeploymentStatusResponse({ deploymentId: "deploy-fail", status: "failed" })
|
|
267
|
-
);
|
|
268
|
-
})
|
|
269
|
-
);
|
|
270
|
-
|
|
271
|
-
const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
272
|
-
|
|
273
|
-
expect(result.success).toBe(false);
|
|
274
|
-
expect(result.error).toContain("Deployment failed with status: failed");
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
it("handles set-live failure", async () => {
|
|
278
|
-
server.use(
|
|
279
|
-
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
280
|
-
return HttpResponse.json(
|
|
281
|
-
createDeploySuccessResponse({ deploymentId: "deploy-setlive-fail" })
|
|
282
|
-
);
|
|
283
|
-
}),
|
|
284
|
-
http.get(`${BASE_URL}/v1/deployments/deploy-setlive-fail`, () => {
|
|
285
|
-
return HttpResponse.json(
|
|
286
|
-
createDeploymentStatusResponse({ deploymentId: "deploy-setlive-fail", status: "data_ready" })
|
|
287
|
-
);
|
|
288
|
-
}),
|
|
289
|
-
http.post(`${BASE_URL}/v1/deployments/deploy-setlive-fail/set-live`, () => {
|
|
290
|
-
return HttpResponse.json({ error: "Set live failed" }, { status: 500 });
|
|
291
|
-
})
|
|
292
|
-
);
|
|
293
|
-
|
|
294
|
-
const result = await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
295
|
-
|
|
296
|
-
expect(result.success).toBe(false);
|
|
297
|
-
expect(result.error).toContain("Failed to set deployment as live");
|
|
298
|
-
});
|
|
299
|
-
|
|
300
227
|
it("normalizes baseUrl with trailing slash", async () => {
|
|
301
228
|
let capturedUrl: string | null = null;
|
|
302
229
|
|
|
@@ -304,16 +231,14 @@ describe("Deploy API", () => {
|
|
|
304
231
|
http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
305
232
|
capturedUrl = request.url;
|
|
306
233
|
return HttpResponse.json(
|
|
307
|
-
createDeploySuccessResponse({ deploymentId: "deploy-slash" })
|
|
234
|
+
createDeploySuccessResponse({ deploymentId: "deploy-slash", status: "pending" })
|
|
308
235
|
);
|
|
309
236
|
}),
|
|
310
237
|
http.get(`${BASE_URL}/v1/deployments/deploy-slash`, () => {
|
|
311
|
-
return HttpResponse.json(
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
http.post(`${BASE_URL}/v1/deployments/deploy-slash/set-live`, () => {
|
|
316
|
-
return HttpResponse.json(createSetLiveSuccessResponse());
|
|
238
|
+
return HttpResponse.json({
|
|
239
|
+
result: "success",
|
|
240
|
+
deployment: { id: "deploy-slash", status: "data_ready", live: true },
|
|
241
|
+
});
|
|
317
242
|
})
|
|
318
243
|
);
|
|
319
244
|
|
|
@@ -326,29 +251,7 @@ describe("Deploy API", () => {
|
|
|
326
251
|
const parsed = new URL(capturedUrl ?? "");
|
|
327
252
|
expect(parsed.pathname).toBe("/v1/deploy");
|
|
328
253
|
expect(parsed.searchParams.get("from")).toBe("ts-sdk");
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
it("times out when deployment never becomes ready", async () => {
|
|
332
|
-
server.use(
|
|
333
|
-
http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
334
|
-
return HttpResponse.json(
|
|
335
|
-
createDeploySuccessResponse({ deploymentId: "deploy-timeout", status: "pending" })
|
|
336
|
-
);
|
|
337
|
-
}),
|
|
338
|
-
http.get(`${BASE_URL}/v1/deployments/deploy-timeout`, () => {
|
|
339
|
-
return HttpResponse.json(
|
|
340
|
-
createDeploymentStatusResponse({ deploymentId: "deploy-timeout", status: "pending" })
|
|
341
|
-
);
|
|
342
|
-
})
|
|
343
|
-
);
|
|
344
|
-
|
|
345
|
-
const result = await deployToMain(config, resources, {
|
|
346
|
-
pollIntervalMs: 1,
|
|
347
|
-
maxPollAttempts: 3,
|
|
348
|
-
});
|
|
349
|
-
|
|
350
|
-
expect(result.success).toBe(false);
|
|
351
|
-
expect(result.error).toContain("Deployment timed out");
|
|
254
|
+
expect(parsed.searchParams.get("auto_promote")).toBe("true");
|
|
352
255
|
});
|
|
353
256
|
});
|
|
354
257
|
});
|
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
|
|
3
|
+
* Uses the /v1/deploy endpoint with auto-promotion enabled
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { GeneratedResources } from "../generator/index.js";
|
|
@@ -31,13 +31,6 @@ 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
|
-
|
|
41
34
|
/**
|
|
42
35
|
* Response from /v1/deploy endpoint
|
|
43
36
|
*/
|
|
@@ -48,6 +41,14 @@ export interface DeployResponse {
|
|
|
48
41
|
errors?: Array<{ filename?: string; error: string }>;
|
|
49
42
|
}
|
|
50
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Response from /v1/deployments/{id} endpoint
|
|
46
|
+
*/
|
|
47
|
+
export interface DeploymentStatusResponse {
|
|
48
|
+
result: string;
|
|
49
|
+
deployment: Deployment;
|
|
50
|
+
}
|
|
51
|
+
|
|
51
52
|
/**
|
|
52
53
|
* Detailed deployment information with resource changes
|
|
53
54
|
*/
|
|
@@ -74,21 +75,11 @@ export interface DeploymentDetails extends Deployment {
|
|
|
74
75
|
errors?: Array<{ filename?: string; error: string }>;
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
/**
|
|
78
|
-
* Response from /v1/deployments/{id} endpoint
|
|
79
|
-
*/
|
|
80
|
-
export interface DeploymentStatusResponse {
|
|
81
|
-
result: string;
|
|
82
|
-
deployment: Deployment;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
78
|
/**
|
|
86
79
|
* Deploy generated resources to Tinybird main workspace
|
|
87
80
|
*
|
|
88
81
|
* Uses the /v1/deploy endpoint which accepts all resources in a single
|
|
89
|
-
* multipart form request.
|
|
90
|
-
* 1. Polls until the deployment is ready (status === 'data_ready')
|
|
91
|
-
* 2. Sets the deployment as live via /v1/deployments/{id}/set-live
|
|
82
|
+
* multipart form request.
|
|
92
83
|
*
|
|
93
84
|
* @param config - Build configuration with API URL and token
|
|
94
85
|
* @param resources - Generated resources to deploy
|
|
@@ -161,13 +152,14 @@ export async function deployToMain(
|
|
|
161
152
|
pollIntervalMs?: number;
|
|
162
153
|
maxPollAttempts?: number;
|
|
163
154
|
check?: boolean;
|
|
155
|
+
autoPromote?: boolean;
|
|
164
156
|
allowDestructiveOperations?: boolean;
|
|
165
157
|
callbacks?: DeployCallbacks;
|
|
166
158
|
}
|
|
167
159
|
): Promise<BuildApiResult> {
|
|
168
160
|
const debug = options?.debug ?? !!process.env.TINYBIRD_DEBUG;
|
|
169
161
|
const pollIntervalMs = options?.pollIntervalMs ?? 1000;
|
|
170
|
-
const maxPollAttempts = options?.maxPollAttempts ?? 120;
|
|
162
|
+
const maxPollAttempts = options?.maxPollAttempts ?? 120;
|
|
171
163
|
const baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
172
164
|
|
|
173
165
|
const formData = new FormData();
|
|
@@ -202,46 +194,17 @@ export async function deployToMain(
|
|
|
202
194
|
);
|
|
203
195
|
}
|
|
204
196
|
|
|
205
|
-
//
|
|
206
|
-
|
|
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
|
|
197
|
+
// Create deployment via /v1/deploy.
|
|
198
|
+
// `auto_promote=true` makes the API promote the deployment automatically.
|
|
240
199
|
const deployUrlBase = `${baseUrl}/v1/deploy`;
|
|
241
200
|
const urlParams = new URLSearchParams();
|
|
242
201
|
if (options?.check) {
|
|
243
202
|
urlParams.set("check", "true");
|
|
244
203
|
}
|
|
204
|
+
const autoPromote = options?.autoPromote ?? !options?.check;
|
|
205
|
+
if (autoPromote) {
|
|
206
|
+
urlParams.set("auto_promote", "true");
|
|
207
|
+
}
|
|
245
208
|
if (options?.allowDestructiveOperations) {
|
|
246
209
|
urlParams.set("allow_destructive_operations", "true");
|
|
247
210
|
}
|
|
@@ -408,18 +371,22 @@ export async function deployToMain(
|
|
|
408
371
|
});
|
|
409
372
|
}
|
|
410
373
|
|
|
411
|
-
|
|
412
|
-
let
|
|
413
|
-
let attempts = 0;
|
|
374
|
+
let deployment = deploymentDetails;
|
|
375
|
+
let statusAttempts = 0;
|
|
414
376
|
|
|
415
377
|
options?.callbacks?.onWaitingForReady?.();
|
|
416
378
|
|
|
417
|
-
while (
|
|
379
|
+
while (
|
|
380
|
+
deployment.status !== "data_ready" &&
|
|
381
|
+
deployment.status !== "failed" &&
|
|
382
|
+
deployment.status !== "error" &&
|
|
383
|
+
statusAttempts < maxPollAttempts
|
|
384
|
+
) {
|
|
418
385
|
await sleep(pollIntervalMs);
|
|
419
|
-
|
|
386
|
+
statusAttempts++;
|
|
420
387
|
|
|
421
388
|
if (debug) {
|
|
422
|
-
console.log(`[debug] Polling deployment status (attempt ${
|
|
389
|
+
console.log(`[debug] Polling deployment status (attempt ${statusAttempts})...`);
|
|
423
390
|
}
|
|
424
391
|
|
|
425
392
|
const statusUrl = `${baseUrl}/v1/deployments/${deploymentId}`;
|
|
@@ -443,30 +410,13 @@ export async function deployToMain(
|
|
|
443
410
|
|
|
444
411
|
const statusBody = (await statusResponse.json()) as DeploymentStatusResponse;
|
|
445
412
|
deployment = statusBody.deployment;
|
|
446
|
-
|
|
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
|
-
}
|
|
463
413
|
}
|
|
464
414
|
|
|
465
|
-
if (deployment.status
|
|
415
|
+
if (deployment.status === "failed" || deployment.status === "error") {
|
|
466
416
|
return {
|
|
467
417
|
success: false,
|
|
468
418
|
result: "failed",
|
|
469
|
-
error: `Deployment
|
|
419
|
+
error: `Deployment failed with status: ${deployment.status}`,
|
|
470
420
|
datasourceCount: resources.datasources.length,
|
|
471
421
|
pipeCount: resources.pipes.length,
|
|
472
422
|
connectionCount: resources.connections?.length ?? 0,
|
|
@@ -474,28 +424,11 @@ export async function deployToMain(
|
|
|
474
424
|
};
|
|
475
425
|
}
|
|
476
426
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
// Step 3: Set the deployment as live
|
|
480
|
-
const setLiveUrl = `${baseUrl}/v1/deployments/${deploymentId}/set-live`;
|
|
481
|
-
|
|
482
|
-
if (debug) {
|
|
483
|
-
console.log(`[debug] POST ${setLiveUrl}`);
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
const setLiveResponse = await tinybirdFetch(setLiveUrl, {
|
|
487
|
-
method: "POST",
|
|
488
|
-
headers: {
|
|
489
|
-
Authorization: `Bearer ${config.token}`,
|
|
490
|
-
},
|
|
491
|
-
});
|
|
492
|
-
|
|
493
|
-
if (!setLiveResponse.ok) {
|
|
494
|
-
const setLiveBody = await setLiveResponse.text();
|
|
427
|
+
if (deployment.status !== "data_ready") {
|
|
495
428
|
return {
|
|
496
429
|
success: false,
|
|
497
430
|
result: "failed",
|
|
498
|
-
error: `
|
|
431
|
+
error: `Deployment timed out after ${maxPollAttempts} attempts. Last status: ${deployment.status}`,
|
|
499
432
|
datasourceCount: resources.datasources.length,
|
|
500
433
|
pipeCount: resources.pipes.length,
|
|
501
434
|
connectionCount: resources.connections?.length ?? 0,
|
|
@@ -503,11 +436,66 @@ export async function deployToMain(
|
|
|
503
436
|
};
|
|
504
437
|
}
|
|
505
438
|
|
|
439
|
+
options?.callbacks?.onDeploymentReady?.();
|
|
440
|
+
|
|
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++;
|
|
448
|
+
|
|
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
|
+
}
|
|
475
|
+
|
|
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
|
+
}
|
|
487
|
+
|
|
488
|
+
options?.callbacks?.onDeploymentPromoted?.();
|
|
489
|
+
}
|
|
490
|
+
|
|
506
491
|
if (debug) {
|
|
507
|
-
|
|
492
|
+
const stateLabel = deployment.live ? "live" : "ready";
|
|
493
|
+
console.log(`[debug] Deployment ${deploymentId} is now ${stateLabel}`);
|
|
508
494
|
}
|
|
509
495
|
|
|
510
|
-
|
|
496
|
+
if (deployment.live) {
|
|
497
|
+
options?.callbacks?.onDeploymentLive?.(deploymentId);
|
|
498
|
+
}
|
|
511
499
|
|
|
512
500
|
return {
|
|
513
501
|
success: true,
|
|
@@ -529,9 +517,6 @@ export async function deployToMain(
|
|
|
529
517
|
};
|
|
530
518
|
}
|
|
531
519
|
|
|
532
|
-
/**
|
|
533
|
-
* Helper function to sleep for a given number of milliseconds
|
|
534
|
-
*/
|
|
535
520
|
function sleep(ms: number): Promise<void> {
|
|
536
521
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
537
522
|
}
|