@tinybirdco/sdk 0.0.52 → 0.0.54
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 +11 -18
- package/dist/api/deploy.d.ts.map +1 -1
- package/dist/api/deploy.js +69 -77
- package/dist/api/deploy.js.map +1 -1
- package/dist/api/deploy.test.js +71 -90
- package/dist/api/deploy.test.js.map +1 -1
- package/package.json +1 -1
- package/src/api/deploy.test.ts +85 -158
- package/src/api/deploy.ts +91 -106
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";
|
|
@@ -8,7 +8,7 @@ import type { BuildConfig, BuildApiResult } from "./build.js";
|
|
|
8
8
|
* Feedback item from deployment response
|
|
9
9
|
*/
|
|
10
10
|
export interface DeploymentFeedback {
|
|
11
|
-
resource: string;
|
|
11
|
+
resource: string | null;
|
|
12
12
|
level: "ERROR" | "WARNING" | "INFO";
|
|
13
13
|
message: string;
|
|
14
14
|
}
|
|
@@ -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;
|
|
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
|
}
|
|
@@ -99,7 +74,7 @@ export async function deployToMain(config, resources, options) {
|
|
|
99
74
|
return feedback
|
|
100
75
|
.map((f) => {
|
|
101
76
|
// Extract just the filename from "Datasource events.datasource" format
|
|
102
|
-
const resourceName = f.resource
|
|
77
|
+
const resourceName = f.resource?.split(" ").pop() ?? f.resource ?? "unknown";
|
|
103
78
|
return `${resourceName}: ${normalizeDeployErrorMessage(f.message)}`;
|
|
104
79
|
})
|
|
105
80
|
.join("\n");
|
|
@@ -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);
|
|
@@ -84,6 +69,22 @@ describe("Deploy API", () => {
|
|
|
84
69
|
expect(result.error).toContain("[events.datasource] Schema mismatch");
|
|
85
70
|
expect(result.error).toContain("General error without filename");
|
|
86
71
|
});
|
|
72
|
+
it("handles deployment feedback entries with null resource", async () => {
|
|
73
|
+
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
74
|
+
return HttpResponse.json({
|
|
75
|
+
result: "failed",
|
|
76
|
+
deployment: {
|
|
77
|
+
id: "deploy-null-resource",
|
|
78
|
+
status: "failed",
|
|
79
|
+
feedback: [{ resource: null, level: "ERROR", message: "Invalid token" }],
|
|
80
|
+
},
|
|
81
|
+
}, { status: 200 });
|
|
82
|
+
}));
|
|
83
|
+
const result = await deployToMain(config, resources);
|
|
84
|
+
expect(result.success).toBe(false);
|
|
85
|
+
expect(result.result).toBe("failed");
|
|
86
|
+
expect(result.error).toContain("unknown: Invalid token");
|
|
87
|
+
});
|
|
87
88
|
it("handles HTTP error responses", async () => {
|
|
88
89
|
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
89
90
|
return HttpResponse.json({ result: "failed", error: "Forbidden" }, { status: 403 });
|
|
@@ -101,33 +102,33 @@ describe("Deploy API", () => {
|
|
|
101
102
|
}));
|
|
102
103
|
await expect(deployToMain(config, resources)).rejects.toThrow("Failed to parse response");
|
|
103
104
|
});
|
|
104
|
-
it("uses /v1/deploy endpoint
|
|
105
|
+
it("uses /v1/deploy endpoint and sends auto_promote by default", async () => {
|
|
105
106
|
let capturedUrl = null;
|
|
106
107
|
server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
107
108
|
capturedUrl = request.url;
|
|
108
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-url-test" }));
|
|
109
|
+
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-url-test", status: "pending" }));
|
|
109
110
|
}), http.get(`${BASE_URL}/v1/deployments/deploy-url-test`, () => {
|
|
110
|
-
return HttpResponse.json(
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
return HttpResponse.json({
|
|
112
|
+
result: "success",
|
|
113
|
+
deployment: { id: "deploy-url-test", status: "data_ready", live: true },
|
|
114
|
+
});
|
|
113
115
|
}));
|
|
114
116
|
await deployToMain(config, resources, { pollIntervalMs: 1 });
|
|
115
117
|
const parsed = new URL(capturedUrl ?? "");
|
|
116
118
|
expect(parsed.pathname).toBe("/v1/deploy");
|
|
117
119
|
expect(parsed.searchParams.get("from")).toBe("ts-sdk");
|
|
120
|
+
expect(parsed.searchParams.get("auto_promote")).toBe("true");
|
|
118
121
|
});
|
|
119
122
|
it("passes allow_destructive_operations when explicitly enabled", async () => {
|
|
120
123
|
let capturedUrl = null;
|
|
121
124
|
server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
122
125
|
capturedUrl = request.url;
|
|
123
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-destructive" }));
|
|
126
|
+
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-destructive", status: "pending" }));
|
|
124
127
|
}), 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());
|
|
128
|
+
return HttpResponse.json({
|
|
129
|
+
result: "success",
|
|
130
|
+
deployment: { id: "deploy-destructive", status: "data_ready", live: true },
|
|
131
|
+
});
|
|
131
132
|
}));
|
|
132
133
|
await deployToMain(config, resources, {
|
|
133
134
|
pollIntervalMs: 1,
|
|
@@ -135,6 +136,19 @@ describe("Deploy API", () => {
|
|
|
135
136
|
});
|
|
136
137
|
const parsed = new URL(capturedUrl ?? "");
|
|
137
138
|
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();
|
|
138
152
|
});
|
|
139
153
|
it("adds actionable guidance to Forward/Classic workspace errors", async () => {
|
|
140
154
|
server.use(http.post(`${BASE_URL}/v1/deploy`, () => {
|
|
@@ -148,55 +162,22 @@ describe("Deploy API", () => {
|
|
|
148
162
|
expect(result.error).toContain("Tinybird Forward workspace");
|
|
149
163
|
expect(result.error).toContain("Use the Tinybird Classic CLI (`tb`) from a Tinybird Classic workspace for this operation.");
|
|
150
164
|
});
|
|
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
165
|
it("normalizes baseUrl with trailing slash", async () => {
|
|
174
166
|
let capturedUrl = null;
|
|
175
167
|
server.use(http.post(`${BASE_URL}/v1/deploy`, ({ request }) => {
|
|
176
168
|
capturedUrl = request.url;
|
|
177
|
-
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-slash" }));
|
|
169
|
+
return HttpResponse.json(createDeploySuccessResponse({ deploymentId: "deploy-slash", status: "pending" }));
|
|
178
170
|
}), http.get(`${BASE_URL}/v1/deployments/deploy-slash`, () => {
|
|
179
|
-
return HttpResponse.json(
|
|
180
|
-
|
|
181
|
-
|
|
171
|
+
return HttpResponse.json({
|
|
172
|
+
result: "success",
|
|
173
|
+
deployment: { id: "deploy-slash", status: "data_ready", live: true },
|
|
174
|
+
});
|
|
182
175
|
}));
|
|
183
176
|
await deployToMain({ ...config, baseUrl: `${BASE_URL}/` }, resources, { pollIntervalMs: 1 });
|
|
184
177
|
const parsed = new URL(capturedUrl ?? "");
|
|
185
178
|
expect(parsed.pathname).toBe("/v1/deploy");
|
|
186
179
|
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");
|
|
180
|
+
expect(parsed.searchParams.get("auto_promote")).toBe("true");
|
|
200
181
|
});
|
|
201
182
|
});
|
|
202
183
|
});
|