@tinybirdco/sdk 0.0.30 → 0.0.31
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/README.md +29 -4
- package/dist/cli/commands/branch.js +5 -5
- package/dist/cli/commands/branch.js.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +2 -2
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/build.test.d.ts +2 -0
- package/dist/cli/commands/build.test.d.ts.map +1 -0
- package/dist/cli/commands/build.test.js +266 -0
- package/dist/cli/commands/build.test.js.map +1 -0
- package/dist/cli/commands/clear.d.ts.map +1 -1
- package/dist/cli/commands/clear.js +2 -2
- package/dist/cli/commands/clear.js.map +1 -1
- package/dist/cli/commands/deploy.js +2 -2
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/dev.js +12 -12
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/info.js +2 -2
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/info.test.js +11 -13
- package/dist/cli/commands/info.test.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +44 -26
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/init.test.js +44 -25
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +7 -6
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/login.test.js +1 -1
- package/dist/cli/commands/login.test.js.map +1 -1
- package/dist/cli/commands/preview.d.ts.map +1 -1
- package/dist/cli/commands/preview.js +2 -2
- package/dist/cli/commands/preview.js.map +1 -1
- package/dist/cli/config-loader.d.ts +18 -0
- package/dist/cli/config-loader.d.ts.map +1 -0
- package/dist/cli/config-loader.js +57 -0
- package/dist/cli/config-loader.js.map +1 -0
- package/dist/cli/config-types.d.ts +28 -0
- package/dist/cli/config-types.d.ts.map +1 -0
- package/dist/cli/config-types.js +8 -0
- package/dist/cli/config-types.js.map +1 -0
- package/dist/cli/config.d.ts +63 -29
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +139 -43
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/config.test.js +73 -9
- package/dist/cli/config.test.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/client/base.d.ts.map +1 -1
- package/dist/client/base.js +21 -9
- package/dist/client/base.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/branch.ts +5 -5
- package/src/cli/commands/build.test.ts +310 -0
- package/src/cli/commands/build.ts +2 -2
- package/src/cli/commands/clear.ts +2 -2
- package/src/cli/commands/deploy.ts +2 -2
- package/src/cli/commands/dev.ts +12 -12
- package/src/cli/commands/info.test.ts +11 -13
- package/src/cli/commands/info.ts +2 -2
- package/src/cli/commands/init.test.ts +53 -37
- package/src/cli/commands/init.ts +49 -30
- package/src/cli/commands/login.test.ts +1 -1
- package/src/cli/commands/login.ts +7 -6
- package/src/cli/commands/preview.ts +2 -2
- package/src/cli/config-loader.ts +87 -0
- package/src/cli/config-types.ts +29 -0
- package/src/cli/config.test.ts +95 -8
- package/src/cli/config.ts +179 -70
- package/src/cli/index.ts +3 -0
- package/src/client/base.ts +33 -16
- package/src/index.ts +4 -0
package/dist/client/base.js
CHANGED
|
@@ -101,7 +101,7 @@ export class TinybirdClient {
|
|
|
101
101
|
try {
|
|
102
102
|
// Dynamic import to avoid circular dependencies and to keep CLI code
|
|
103
103
|
// out of the client bundle when not using dev mode
|
|
104
|
-
const {
|
|
104
|
+
const { loadConfigAsync } = await import("../cli/config.js");
|
|
105
105
|
const { getOrCreateBranch } = await import("../api/branches.js");
|
|
106
106
|
const { isPreviewEnvironment, getPreviewBranchName } = await import("./preview.js");
|
|
107
107
|
// In preview environments (Vercel preview, CI), the token was already resolved
|
|
@@ -110,9 +110,14 @@ export class TinybirdClient {
|
|
|
110
110
|
const gitBranchName = getPreviewBranchName();
|
|
111
111
|
// Preview branches use the tmp_ci_ prefix (matches what tinybird preview creates)
|
|
112
112
|
const sanitized = gitBranchName
|
|
113
|
-
? gitBranchName
|
|
113
|
+
? gitBranchName
|
|
114
|
+
.replace(/[^a-zA-Z0-9_]/g, "_")
|
|
115
|
+
.replace(/_+/g, "_")
|
|
116
|
+
.replace(/^_|_$/g, "")
|
|
117
|
+
: undefined;
|
|
118
|
+
const tinybirdBranchName = sanitized
|
|
119
|
+
? `tmp_ci_${sanitized}`
|
|
114
120
|
: undefined;
|
|
115
|
-
const tinybirdBranchName = sanitized ? `tmp_ci_${sanitized}` : undefined;
|
|
116
121
|
return this.buildContext({
|
|
117
122
|
token: this.config.token,
|
|
118
123
|
isBranchToken: !!tinybirdBranchName,
|
|
@@ -122,18 +127,26 @@ export class TinybirdClient {
|
|
|
122
127
|
}
|
|
123
128
|
// Use configDir if provided (important for monorepo setups where process.cwd()
|
|
124
129
|
// may not be in the same directory tree as tinybird.json)
|
|
125
|
-
const config =
|
|
130
|
+
const config = await loadConfigAsync(this.config.configDir);
|
|
126
131
|
const gitBranch = config.gitBranch ?? undefined;
|
|
127
132
|
// If on main branch, use the workspace token
|
|
128
133
|
if (config.isMainBranch || !config.tinybirdBranch) {
|
|
129
|
-
return this.buildContext({
|
|
134
|
+
return this.buildContext({
|
|
135
|
+
token: this.config.token,
|
|
136
|
+
isBranchToken: false,
|
|
137
|
+
gitBranch,
|
|
138
|
+
});
|
|
130
139
|
}
|
|
131
140
|
const branchName = config.tinybirdBranch;
|
|
132
141
|
// Get or create branch (always fetch fresh to avoid stale cache issues)
|
|
133
142
|
const branch = await getOrCreateBranch({ baseUrl: this.config.baseUrl, token: this.config.token }, branchName);
|
|
134
143
|
if (!branch.token) {
|
|
135
144
|
// Fall back to workspace token if no branch token
|
|
136
|
-
return this.buildContext({
|
|
145
|
+
return this.buildContext({
|
|
146
|
+
token: this.config.token,
|
|
147
|
+
isBranchToken: false,
|
|
148
|
+
gitBranch,
|
|
149
|
+
});
|
|
137
150
|
}
|
|
138
151
|
return this.buildContext({
|
|
139
152
|
token: branch.token,
|
|
@@ -142,9 +155,8 @@ export class TinybirdClient {
|
|
|
142
155
|
gitBranch,
|
|
143
156
|
});
|
|
144
157
|
}
|
|
145
|
-
catch {
|
|
146
|
-
|
|
147
|
-
return this.buildContext({ token: this.config.token, isBranchToken: false });
|
|
158
|
+
catch (error) {
|
|
159
|
+
throw new TinybirdError(`Failed to resolve branch context: ${error.message}`, 500);
|
|
148
160
|
}
|
|
149
161
|
}
|
|
150
162
|
/**
|
package/dist/client/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAY9D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,cAAc;IACR,MAAM,CAAe;IACrB,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IACtD,cAAc,GAAkC,IAAI,CAAC;IACrD,eAAe,GAAyB,IAAI,CAAC;IAErD,YAAY,MAAoB;QAC9B,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,6CAA6C;QAC7C,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,QAAQ;QACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,KAAK,CAAC;IACvB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,cAAc;QAC1B,iCAAiC;QACjC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;gBACvC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,aAAa,EAAE,KAAK;aACrB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;QACjD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,SAA4B;QAC/C,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;YACrC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;YACxC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI;SACvC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB;QAChC,IAAI,CAAC;YACH,qEAAqE;YACrE,mDAAmD;YACnD,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -80,4 +80,5 @@ export type { TinybirdApiConfig, TinybirdApiQueryOptions, TinybirdApiIngestOptio
|
|
|
80
80
|
export { isPreviewEnvironment, getPreviewBranchName, resolveToken, clearTokenCache, } from "./client/preview.js";
|
|
81
81
|
export { parseApiUrl, getDashboardUrl, getBranchDashboardUrl, getLocalDashboardUrl, } from "./api/dashboard.js";
|
|
82
82
|
export type { RegionInfo } from "./api/dashboard.js";
|
|
83
|
+
export type { TinybirdConfig, DevMode } from "./cli/config-types.js";
|
|
83
84
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Branch management commands
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { loadConfigAsync, type ResolvedConfig } from "../config.js";
|
|
6
6
|
import {
|
|
7
7
|
listBranches,
|
|
8
8
|
getBranch,
|
|
@@ -83,7 +83,7 @@ export async function runBranchList(
|
|
|
83
83
|
|
|
84
84
|
let config: ResolvedConfig;
|
|
85
85
|
try {
|
|
86
|
-
config =
|
|
86
|
+
config = await loadConfigAsync(cwd);
|
|
87
87
|
} catch (error) {
|
|
88
88
|
return {
|
|
89
89
|
success: false,
|
|
@@ -122,7 +122,7 @@ export async function runBranchStatus(
|
|
|
122
122
|
|
|
123
123
|
let config: ResolvedConfig;
|
|
124
124
|
try {
|
|
125
|
-
config =
|
|
125
|
+
config = await loadConfigAsync(cwd);
|
|
126
126
|
} catch (error) {
|
|
127
127
|
return {
|
|
128
128
|
success: false,
|
|
@@ -239,7 +239,7 @@ export async function runBranchDelete(
|
|
|
239
239
|
|
|
240
240
|
let config: ResolvedConfig;
|
|
241
241
|
try {
|
|
242
|
-
config =
|
|
242
|
+
config = await loadConfigAsync(cwd);
|
|
243
243
|
} catch (error) {
|
|
244
244
|
return {
|
|
245
245
|
success: false,
|
|
@@ -288,7 +288,7 @@ export async function runBranchListCached(
|
|
|
288
288
|
|
|
289
289
|
let config: ResolvedConfig;
|
|
290
290
|
try {
|
|
291
|
-
config =
|
|
291
|
+
config = await loadConfigAsync(cwd);
|
|
292
292
|
} catch {
|
|
293
293
|
return { branches: {} };
|
|
294
294
|
}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { runBuild } from "./build.js";
|
|
3
|
+
|
|
4
|
+
// Mock all dependencies
|
|
5
|
+
vi.mock("../config.js", () => ({
|
|
6
|
+
loadConfigAsync: vi.fn(),
|
|
7
|
+
LOCAL_BASE_URL: "http://localhost:7181",
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
vi.mock("../../generator/index.js", () => ({
|
|
11
|
+
buildFromInclude: vi.fn(),
|
|
12
|
+
}));
|
|
13
|
+
|
|
14
|
+
vi.mock("../../api/build.js", () => ({
|
|
15
|
+
buildToTinybird: vi.fn(),
|
|
16
|
+
}));
|
|
17
|
+
|
|
18
|
+
vi.mock("../../api/branches.js", () => ({
|
|
19
|
+
getOrCreateBranch: vi.fn(),
|
|
20
|
+
}));
|
|
21
|
+
|
|
22
|
+
vi.mock("../../api/local.js", () => ({
|
|
23
|
+
getLocalTokens: vi.fn(),
|
|
24
|
+
getOrCreateLocalWorkspace: vi.fn(),
|
|
25
|
+
getLocalWorkspaceName: vi.fn(),
|
|
26
|
+
LocalNotRunningError: class LocalNotRunningError extends Error {},
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
vi.mock("../../api/workspaces.js", () => ({
|
|
30
|
+
getWorkspace: vi.fn(),
|
|
31
|
+
}));
|
|
32
|
+
|
|
33
|
+
vi.mock("../../api/dashboard.js", () => ({
|
|
34
|
+
getBranchDashboardUrl: vi.fn(),
|
|
35
|
+
getLocalDashboardUrl: vi.fn(),
|
|
36
|
+
}));
|
|
37
|
+
|
|
38
|
+
describe("Build Command", () => {
|
|
39
|
+
beforeEach(() => {
|
|
40
|
+
vi.clearAllMocks();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
afterEach(() => {
|
|
44
|
+
vi.resetAllMocks();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe("devModeOverride", () => {
|
|
48
|
+
it("uses local mode when devModeOverride is 'local'", async () => {
|
|
49
|
+
const { loadConfigAsync } = await import("../config.js");
|
|
50
|
+
const { buildFromInclude } = await import("../../generator/index.js");
|
|
51
|
+
const { getLocalTokens, getOrCreateLocalWorkspace, getLocalWorkspaceName } = await import("../../api/local.js");
|
|
52
|
+
const { buildToTinybird } = await import("../../api/build.js");
|
|
53
|
+
const { getWorkspace } = await import("../../api/workspaces.js");
|
|
54
|
+
const { getLocalDashboardUrl } = await import("../../api/dashboard.js");
|
|
55
|
+
|
|
56
|
+
// Config has devMode: "branch" but we override with "local"
|
|
57
|
+
vi.mocked(loadConfigAsync).mockResolvedValue({
|
|
58
|
+
include: ["test.ts"],
|
|
59
|
+
token: "p.test-token",
|
|
60
|
+
baseUrl: "https://api.tinybird.co",
|
|
61
|
+
configPath: "/test/tinybird.config.json",
|
|
62
|
+
devMode: "branch", // Config says branch
|
|
63
|
+
cwd: "/test",
|
|
64
|
+
gitBranch: "feature-test",
|
|
65
|
+
tinybirdBranch: "feature_test",
|
|
66
|
+
isMainBranch: false,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
vi.mocked(buildFromInclude).mockResolvedValue({
|
|
70
|
+
resources: {
|
|
71
|
+
datasources: [],
|
|
72
|
+
pipes: [],
|
|
73
|
+
connections: [],
|
|
74
|
+
},
|
|
75
|
+
entities: {
|
|
76
|
+
datasources: {},
|
|
77
|
+
pipes: {},
|
|
78
|
+
connections: {},
|
|
79
|
+
rawDatasources: [],
|
|
80
|
+
rawPipes: [],
|
|
81
|
+
sourceFiles: [],
|
|
82
|
+
},
|
|
83
|
+
stats: {
|
|
84
|
+
datasourceCount: 0,
|
|
85
|
+
pipeCount: 0,
|
|
86
|
+
connectionCount: 0,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
vi.mocked(getLocalTokens).mockResolvedValue({
|
|
91
|
+
admin_token: "admin-token",
|
|
92
|
+
user_token: "user-token",
|
|
93
|
+
workspace_admin_token: "workspace-admin-token",
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
vi.mocked(getWorkspace).mockResolvedValue({
|
|
97
|
+
id: "ws-id",
|
|
98
|
+
name: "test-workspace",
|
|
99
|
+
user_id: "user-id",
|
|
100
|
+
user_email: "user@test.com",
|
|
101
|
+
scope: "USER",
|
|
102
|
+
main: null,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
vi.mocked(getLocalWorkspaceName).mockReturnValue("feature_test_workspace");
|
|
106
|
+
|
|
107
|
+
vi.mocked(getOrCreateLocalWorkspace).mockResolvedValue({
|
|
108
|
+
workspace: { id: "local-ws-id", name: "feature_test_workspace", token: "local-token" },
|
|
109
|
+
wasCreated: false,
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
vi.mocked(getLocalDashboardUrl).mockReturnValue("http://localhost:7181/dashboard");
|
|
113
|
+
|
|
114
|
+
vi.mocked(buildToTinybird).mockResolvedValue({
|
|
115
|
+
success: true,
|
|
116
|
+
result: "success",
|
|
117
|
+
datasourceCount: 0,
|
|
118
|
+
pipeCount: 0,
|
|
119
|
+
connectionCount: 0,
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
const result = await runBuild({
|
|
123
|
+
devModeOverride: "local", // Override to local
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
expect(result.success).toBe(true);
|
|
127
|
+
expect(result.branchInfo?.isLocal).toBe(true);
|
|
128
|
+
// Verify local APIs were called
|
|
129
|
+
expect(getLocalTokens).toHaveBeenCalled();
|
|
130
|
+
expect(getOrCreateLocalWorkspace).toHaveBeenCalled();
|
|
131
|
+
// Verify buildToTinybird was called with local URL
|
|
132
|
+
expect(buildToTinybird).toHaveBeenCalledWith(
|
|
133
|
+
expect.objectContaining({
|
|
134
|
+
baseUrl: "http://localhost:7181",
|
|
135
|
+
}),
|
|
136
|
+
expect.anything()
|
|
137
|
+
);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("uses branch mode when devModeOverride is 'branch'", async () => {
|
|
141
|
+
const { loadConfigAsync } = await import("../config.js");
|
|
142
|
+
const { buildFromInclude } = await import("../../generator/index.js");
|
|
143
|
+
const { getOrCreateBranch } = await import("../../api/branches.js");
|
|
144
|
+
const { buildToTinybird } = await import("../../api/build.js");
|
|
145
|
+
const { getWorkspace } = await import("../../api/workspaces.js");
|
|
146
|
+
const { getBranchDashboardUrl } = await import("../../api/dashboard.js");
|
|
147
|
+
|
|
148
|
+
// Config has devMode: "local" but we override with "branch"
|
|
149
|
+
vi.mocked(loadConfigAsync).mockResolvedValue({
|
|
150
|
+
include: ["test.ts"],
|
|
151
|
+
token: "p.test-token",
|
|
152
|
+
baseUrl: "https://api.tinybird.co",
|
|
153
|
+
configPath: "/test/tinybird.config.json",
|
|
154
|
+
devMode: "local", // Config says local
|
|
155
|
+
cwd: "/test",
|
|
156
|
+
gitBranch: "feature-test",
|
|
157
|
+
tinybirdBranch: "feature_test",
|
|
158
|
+
isMainBranch: false,
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
vi.mocked(buildFromInclude).mockResolvedValue({
|
|
162
|
+
resources: {
|
|
163
|
+
datasources: [],
|
|
164
|
+
pipes: [],
|
|
165
|
+
connections: [],
|
|
166
|
+
},
|
|
167
|
+
entities: {
|
|
168
|
+
datasources: {},
|
|
169
|
+
pipes: {},
|
|
170
|
+
connections: {},
|
|
171
|
+
rawDatasources: [],
|
|
172
|
+
rawPipes: [],
|
|
173
|
+
sourceFiles: [],
|
|
174
|
+
},
|
|
175
|
+
stats: {
|
|
176
|
+
datasourceCount: 0,
|
|
177
|
+
pipeCount: 0,
|
|
178
|
+
connectionCount: 0,
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
vi.mocked(getOrCreateBranch).mockResolvedValue({
|
|
183
|
+
id: "branch-id",
|
|
184
|
+
name: "feature_test",
|
|
185
|
+
token: "branch-token",
|
|
186
|
+
wasCreated: false,
|
|
187
|
+
created_at: "2024-01-01",
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
vi.mocked(getWorkspace).mockResolvedValue({
|
|
191
|
+
id: "ws-id",
|
|
192
|
+
name: "test-workspace",
|
|
193
|
+
user_id: "user-id",
|
|
194
|
+
user_email: "user@test.com",
|
|
195
|
+
scope: "USER",
|
|
196
|
+
main: null,
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
vi.mocked(getBranchDashboardUrl).mockReturnValue("https://app.tinybird.co/dashboard");
|
|
200
|
+
|
|
201
|
+
vi.mocked(buildToTinybird).mockResolvedValue({
|
|
202
|
+
success: true,
|
|
203
|
+
result: "success",
|
|
204
|
+
datasourceCount: 0,
|
|
205
|
+
pipeCount: 0,
|
|
206
|
+
connectionCount: 0,
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
const result = await runBuild({
|
|
210
|
+
devModeOverride: "branch", // Override to branch
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
expect(result.success).toBe(true);
|
|
214
|
+
expect(result.branchInfo?.isLocal).toBe(false);
|
|
215
|
+
// Verify branch APIs were called
|
|
216
|
+
expect(getOrCreateBranch).toHaveBeenCalled();
|
|
217
|
+
// Verify buildToTinybird was called with cloud URL
|
|
218
|
+
expect(buildToTinybird).toHaveBeenCalledWith(
|
|
219
|
+
expect.objectContaining({
|
|
220
|
+
baseUrl: "https://api.tinybird.co",
|
|
221
|
+
}),
|
|
222
|
+
expect.anything()
|
|
223
|
+
);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it("uses config devMode when no override is provided", async () => {
|
|
227
|
+
const { loadConfigAsync } = await import("../config.js");
|
|
228
|
+
const { buildFromInclude } = await import("../../generator/index.js");
|
|
229
|
+
const { getLocalTokens, getOrCreateLocalWorkspace, getLocalWorkspaceName } = await import("../../api/local.js");
|
|
230
|
+
const { buildToTinybird } = await import("../../api/build.js");
|
|
231
|
+
const { getWorkspace } = await import("../../api/workspaces.js");
|
|
232
|
+
const { getLocalDashboardUrl } = await import("../../api/dashboard.js");
|
|
233
|
+
|
|
234
|
+
// Config has devMode: "local" and no override
|
|
235
|
+
vi.mocked(loadConfigAsync).mockResolvedValue({
|
|
236
|
+
include: ["test.ts"],
|
|
237
|
+
token: "p.test-token",
|
|
238
|
+
baseUrl: "https://api.tinybird.co",
|
|
239
|
+
configPath: "/test/tinybird.config.json",
|
|
240
|
+
devMode: "local", // Config says local
|
|
241
|
+
cwd: "/test",
|
|
242
|
+
gitBranch: "feature-test",
|
|
243
|
+
tinybirdBranch: "feature_test",
|
|
244
|
+
isMainBranch: false,
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
vi.mocked(buildFromInclude).mockResolvedValue({
|
|
248
|
+
resources: {
|
|
249
|
+
datasources: [],
|
|
250
|
+
pipes: [],
|
|
251
|
+
connections: [],
|
|
252
|
+
},
|
|
253
|
+
entities: {
|
|
254
|
+
datasources: {},
|
|
255
|
+
pipes: {},
|
|
256
|
+
connections: {},
|
|
257
|
+
rawDatasources: [],
|
|
258
|
+
rawPipes: [],
|
|
259
|
+
sourceFiles: [],
|
|
260
|
+
},
|
|
261
|
+
stats: {
|
|
262
|
+
datasourceCount: 0,
|
|
263
|
+
pipeCount: 0,
|
|
264
|
+
connectionCount: 0,
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
vi.mocked(getLocalTokens).mockResolvedValue({
|
|
269
|
+
admin_token: "admin-token",
|
|
270
|
+
user_token: "user-token",
|
|
271
|
+
workspace_admin_token: "workspace-admin-token",
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
vi.mocked(getWorkspace).mockResolvedValue({
|
|
275
|
+
id: "ws-id",
|
|
276
|
+
name: "test-workspace",
|
|
277
|
+
user_id: "user-id",
|
|
278
|
+
user_email: "user@test.com",
|
|
279
|
+
scope: "USER",
|
|
280
|
+
main: null,
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
vi.mocked(getLocalWorkspaceName).mockReturnValue("feature_test_workspace");
|
|
284
|
+
|
|
285
|
+
vi.mocked(getOrCreateLocalWorkspace).mockResolvedValue({
|
|
286
|
+
workspace: { id: "local-ws-id", name: "feature_test_workspace", token: "local-token" },
|
|
287
|
+
wasCreated: false,
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
vi.mocked(getLocalDashboardUrl).mockReturnValue("http://localhost:7181/dashboard");
|
|
291
|
+
|
|
292
|
+
vi.mocked(buildToTinybird).mockResolvedValue({
|
|
293
|
+
success: true,
|
|
294
|
+
result: "success",
|
|
295
|
+
datasourceCount: 0,
|
|
296
|
+
pipeCount: 0,
|
|
297
|
+
connectionCount: 0,
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
const result = await runBuild({
|
|
301
|
+
// No devModeOverride - should use config's devMode: "local"
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
expect(result.success).toBe(true);
|
|
305
|
+
expect(result.branchInfo?.isLocal).toBe(true);
|
|
306
|
+
// Verify local APIs were called (because config says local)
|
|
307
|
+
expect(getLocalTokens).toHaveBeenCalled();
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Build command - generates and pushes resources to Tinybird branches
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { loadConfigAsync, LOCAL_BASE_URL, type ResolvedConfig, type DevMode } from "../config.js";
|
|
6
6
|
import { buildFromInclude, type BuildFromIncludeResult } from "../../generator/index.js";
|
|
7
7
|
import { buildToTinybird, type BuildApiResult } from "../../api/build.js";
|
|
8
8
|
import { getOrCreateBranch } from "../../api/branches.js";
|
|
@@ -79,7 +79,7 @@ export async function runBuild(options: BuildCommandOptions = {}): Promise<Build
|
|
|
79
79
|
// Load config
|
|
80
80
|
let config: ResolvedConfig;
|
|
81
81
|
try {
|
|
82
|
-
config =
|
|
82
|
+
config = await loadConfigAsync(cwd);
|
|
83
83
|
} catch (error) {
|
|
84
84
|
return {
|
|
85
85
|
success: false,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Clear command - clears a local workspace or branch by deleting and recreating it
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { loadConfigAsync, type ResolvedConfig, type DevMode } from "../config.js";
|
|
6
6
|
import {
|
|
7
7
|
getLocalTokens,
|
|
8
8
|
clearLocalWorkspace,
|
|
@@ -60,7 +60,7 @@ export async function runClear(
|
|
|
60
60
|
|
|
61
61
|
let config: ResolvedConfig;
|
|
62
62
|
try {
|
|
63
|
-
config =
|
|
63
|
+
config = await loadConfigAsync(cwd);
|
|
64
64
|
} catch (error) {
|
|
65
65
|
return {
|
|
66
66
|
success: false,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Deploy command - deploys resources to main Tinybird workspace
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { loadConfigAsync, type ResolvedConfig } from "../config.js";
|
|
6
6
|
import { buildFromInclude, type BuildFromIncludeResult } from "../../generator/index.js";
|
|
7
7
|
import { deployToMain, type DeployCallbacks } from "../../api/deploy.js";
|
|
8
8
|
import type { BuildApiResult } from "../../api/build.js";
|
|
@@ -52,7 +52,7 @@ export async function runDeploy(options: DeployCommandOptions = {}): Promise<Dep
|
|
|
52
52
|
// Load config
|
|
53
53
|
let config: ResolvedConfig;
|
|
54
54
|
try {
|
|
55
|
-
config =
|
|
55
|
+
config = await loadConfigAsync(cwd);
|
|
56
56
|
} catch (error) {
|
|
57
57
|
return {
|
|
58
58
|
success: false,
|
package/src/cli/commands/dev.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as path from "path";
|
|
6
6
|
import { watch } from "chokidar";
|
|
7
7
|
import {
|
|
8
|
-
|
|
8
|
+
loadConfigAsync,
|
|
9
9
|
configExists,
|
|
10
10
|
findConfigFile,
|
|
11
11
|
hasValidToken,
|
|
@@ -121,14 +121,14 @@ export async function runDev(
|
|
|
121
121
|
// Check if project is initialized
|
|
122
122
|
if (!configExists(cwd)) {
|
|
123
123
|
throw new Error(
|
|
124
|
-
"No tinybird
|
|
124
|
+
"No tinybird config found. Run 'npx tinybird init' to initialize a project."
|
|
125
125
|
);
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
// Load config first to determine devMode
|
|
129
129
|
let config: ResolvedConfig;
|
|
130
130
|
try {
|
|
131
|
-
config =
|
|
131
|
+
config = await loadConfigAsync(cwd);
|
|
132
132
|
} catch (error) {
|
|
133
133
|
throw error;
|
|
134
134
|
}
|
|
@@ -150,18 +150,18 @@ export async function runDev(
|
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
// Find the config file (may be in parent directory)
|
|
153
|
-
const
|
|
154
|
-
if (!
|
|
155
|
-
throw new Error("No tinybird
|
|
153
|
+
const configResult = findConfigFile(cwd);
|
|
154
|
+
if (!configResult) {
|
|
155
|
+
throw new Error("No tinybird config found. Run 'npx tinybird init' first.");
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
// Save token to .env.local (in same directory as
|
|
159
|
-
const configDir = path.dirname(
|
|
158
|
+
// Save token to .env.local (in same directory as config file)
|
|
159
|
+
const configDir = path.dirname(configResult.path);
|
|
160
160
|
saveTinybirdToken(configDir, authResult.token);
|
|
161
161
|
|
|
162
|
-
// Update baseUrl in
|
|
163
|
-
if (authResult.baseUrl) {
|
|
164
|
-
updateConfig(
|
|
162
|
+
// Update baseUrl in config file if it changed (only for JSON configs)
|
|
163
|
+
if (authResult.baseUrl && configResult.path.endsWith(".json")) {
|
|
164
|
+
updateConfig(configResult.path, {
|
|
165
165
|
baseUrl: authResult.baseUrl,
|
|
166
166
|
});
|
|
167
167
|
}
|
|
@@ -175,7 +175,7 @@ export async function runDev(
|
|
|
175
175
|
});
|
|
176
176
|
|
|
177
177
|
// Reload config after login
|
|
178
|
-
config =
|
|
178
|
+
config = await loadConfigAsync(cwd);
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
// Determine effective token and branch info based on devMode
|