@tinybirdco/sdk 0.0.20 → 0.0.21
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/dashboard.d.ts +74 -0
- package/dist/api/dashboard.d.ts.map +1 -0
- package/dist/api/dashboard.js +102 -0
- package/dist/api/dashboard.js.map +1 -0
- package/dist/api/dashboard.test.d.ts +2 -0
- package/dist/api/dashboard.test.d.ts.map +1 -0
- package/dist/api/dashboard.test.js +91 -0
- package/dist/api/dashboard.test.js.map +1 -0
- package/dist/cli/commands/branch.d.ts +2 -0
- package/dist/cli/commands/branch.d.ts.map +1 -1
- package/dist/cli/commands/branch.js +12 -1
- package/dist/cli/commands/branch.js.map +1 -1
- package/dist/cli/commands/build.d.ts +17 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +25 -0
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/dev.d.ts +2 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +19 -3
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/index.js +23 -24
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +20 -0
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +37 -0
- package/dist/cli/output.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/api/dashboard.test.ts +115 -0
- package/src/api/dashboard.ts +121 -0
- package/src/cli/commands/branch.ts +15 -1
- package/src/cli/commands/build.ts +46 -0
- package/src/cli/commands/dev.ts +47 -7
- package/src/cli/index.ts +25 -27
- package/src/cli/output.ts +54 -0
- package/src/index.ts +9 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tinybird Dashboard URL utilities
|
|
3
|
+
*
|
|
4
|
+
* Generates dashboard links for workspaces and branches
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Region information extracted from API URL
|
|
8
|
+
*/
|
|
9
|
+
export interface RegionInfo {
|
|
10
|
+
/** Cloud provider: "gcp" or "aws" */
|
|
11
|
+
provider: string;
|
|
12
|
+
/** Region identifier (e.g., "europe-west3", "us-east4", "us-west-2") */
|
|
13
|
+
region: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parse an API URL to extract region information
|
|
17
|
+
*
|
|
18
|
+
* @param apiUrl - The Tinybird API base URL (e.g., "https://api.tinybird.co")
|
|
19
|
+
* @returns Region info or null if the URL doesn't match a known region
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* parseApiUrl("https://api.tinybird.co")
|
|
24
|
+
* // => { provider: "gcp", region: "europe-west3" }
|
|
25
|
+
*
|
|
26
|
+
* parseApiUrl("https://api.us-west-2.aws.tinybird.co")
|
|
27
|
+
* // => { provider: "aws", region: "us-west-2" }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseApiUrl(apiUrl: string): RegionInfo | null;
|
|
31
|
+
/**
|
|
32
|
+
* Generate a Tinybird dashboard URL for a workspace
|
|
33
|
+
*
|
|
34
|
+
* @param apiUrl - The Tinybird API base URL
|
|
35
|
+
* @param workspaceName - The workspace name
|
|
36
|
+
* @returns Dashboard URL or null if the API URL is not recognized
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* getDashboardUrl("https://api.tinybird.co", "my_workspace")
|
|
41
|
+
* // => "https://cloud.tinybird.co/gcp/europe-west3/my_workspace"
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function getDashboardUrl(apiUrl: string, workspaceName: string): string | null;
|
|
45
|
+
/**
|
|
46
|
+
* Generate a Tinybird dashboard URL for a branch
|
|
47
|
+
*
|
|
48
|
+
* @param apiUrl - The Tinybird API base URL
|
|
49
|
+
* @param workspaceName - The workspace name
|
|
50
|
+
* @param branchName - The branch name
|
|
51
|
+
* @returns Dashboard URL or null if the API URL is not recognized
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* getBranchDashboardUrl("https://api.tinybird.co", "my_workspace", "feature_branch")
|
|
56
|
+
* // => "https://cloud.tinybird.co/gcp/europe-west3/my_workspace~feature_branch"
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function getBranchDashboardUrl(apiUrl: string, workspaceName: string, branchName: string): string | null;
|
|
60
|
+
/**
|
|
61
|
+
* Generate a local Tinybird dashboard URL
|
|
62
|
+
*
|
|
63
|
+
* @param workspaceName - The local workspace name
|
|
64
|
+
* @param port - The local Tinybird port (default: 7181)
|
|
65
|
+
* @returns Local dashboard URL
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* getLocalDashboardUrl("my_local_workspace")
|
|
70
|
+
* // => "https://cloud.tinybird.co/local/7181/my_local_workspace"
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function getLocalDashboardUrl(workspaceName: string, port?: number): string;
|
|
74
|
+
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/api/dashboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;CAChB;AAiBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAQ7D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAOf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,MAAM,CAE/E"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tinybird Dashboard URL utilities
|
|
3
|
+
*
|
|
4
|
+
* Generates dashboard links for workspaces and branches
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Mapping of API hostnames to region information
|
|
8
|
+
*
|
|
9
|
+
* Based on https://www.tinybird.co/docs/api-reference#current-tinybird-regions
|
|
10
|
+
*/
|
|
11
|
+
const API_REGION_MAP = {
|
|
12
|
+
// GCP Regions
|
|
13
|
+
"api.tinybird.co": { provider: "gcp", region: "europe-west3" },
|
|
14
|
+
"api.us-east.tinybird.co": { provider: "gcp", region: "us-east4" },
|
|
15
|
+
// AWS Regions
|
|
16
|
+
"api.eu-central-1.aws.tinybird.co": { provider: "aws", region: "eu-central-1" },
|
|
17
|
+
"api.us-east-1.aws.tinybird.co": { provider: "aws", region: "us-east-1" },
|
|
18
|
+
"api.us-west-2.aws.tinybird.co": { provider: "aws", region: "us-west-2" },
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Parse an API URL to extract region information
|
|
22
|
+
*
|
|
23
|
+
* @param apiUrl - The Tinybird API base URL (e.g., "https://api.tinybird.co")
|
|
24
|
+
* @returns Region info or null if the URL doesn't match a known region
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* parseApiUrl("https://api.tinybird.co")
|
|
29
|
+
* // => { provider: "gcp", region: "europe-west3" }
|
|
30
|
+
*
|
|
31
|
+
* parseApiUrl("https://api.us-west-2.aws.tinybird.co")
|
|
32
|
+
* // => { provider: "aws", region: "us-west-2" }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function parseApiUrl(apiUrl) {
|
|
36
|
+
try {
|
|
37
|
+
const url = new URL(apiUrl);
|
|
38
|
+
const hostname = url.hostname;
|
|
39
|
+
return API_REGION_MAP[hostname] ?? null;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Generate a Tinybird dashboard URL for a workspace
|
|
47
|
+
*
|
|
48
|
+
* @param apiUrl - The Tinybird API base URL
|
|
49
|
+
* @param workspaceName - The workspace name
|
|
50
|
+
* @returns Dashboard URL or null if the API URL is not recognized
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts
|
|
54
|
+
* getDashboardUrl("https://api.tinybird.co", "my_workspace")
|
|
55
|
+
* // => "https://cloud.tinybird.co/gcp/europe-west3/my_workspace"
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export function getDashboardUrl(apiUrl, workspaceName) {
|
|
59
|
+
const regionInfo = parseApiUrl(apiUrl);
|
|
60
|
+
if (!regionInfo) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return `https://cloud.tinybird.co/${regionInfo.provider}/${regionInfo.region}/${workspaceName}`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate a Tinybird dashboard URL for a branch
|
|
67
|
+
*
|
|
68
|
+
* @param apiUrl - The Tinybird API base URL
|
|
69
|
+
* @param workspaceName - The workspace name
|
|
70
|
+
* @param branchName - The branch name
|
|
71
|
+
* @returns Dashboard URL or null if the API URL is not recognized
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* getBranchDashboardUrl("https://api.tinybird.co", "my_workspace", "feature_branch")
|
|
76
|
+
* // => "https://cloud.tinybird.co/gcp/europe-west3/my_workspace~feature_branch"
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export function getBranchDashboardUrl(apiUrl, workspaceName, branchName) {
|
|
80
|
+
const regionInfo = parseApiUrl(apiUrl);
|
|
81
|
+
if (!regionInfo) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return `https://cloud.tinybird.co/${regionInfo.provider}/${regionInfo.region}/${workspaceName}~${branchName}`;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Generate a local Tinybird dashboard URL
|
|
88
|
+
*
|
|
89
|
+
* @param workspaceName - The local workspace name
|
|
90
|
+
* @param port - The local Tinybird port (default: 7181)
|
|
91
|
+
* @returns Local dashboard URL
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* getLocalDashboardUrl("my_local_workspace")
|
|
96
|
+
* // => "https://cloud.tinybird.co/local/7181/my_local_workspace"
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export function getLocalDashboardUrl(workspaceName, port = 7181) {
|
|
100
|
+
return `https://cloud.tinybird.co/local/${port}/${workspaceName}`;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/api/dashboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;;;GAIG;AACH,MAAM,cAAc,GAA+B;IACjD,cAAc;IACd,iBAAiB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;IAC9D,yBAAyB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE;IAClE,cAAc;IACd,kCAAkC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;IAC/E,+BAA+B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE;IACzE,+BAA+B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE;CAC1E,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,aAAqB;IACnE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,6BAA6B,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;AAClG,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,aAAqB,EACrB,UAAkB;IAElB,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,6BAA6B,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;AAChH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,aAAqB,EAAE,IAAI,GAAG,IAAI;IACrE,OAAO,mCAAmC,IAAI,IAAI,aAAa,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.test.d.ts","sourceRoot":"","sources":["../../src/api/dashboard.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { parseApiUrl, getDashboardUrl, getBranchDashboardUrl, getLocalDashboardUrl, } from "./dashboard.js";
|
|
3
|
+
describe("parseApiUrl", () => {
|
|
4
|
+
it("parses EU GCP region", () => {
|
|
5
|
+
const result = parseApiUrl("https://api.tinybird.co");
|
|
6
|
+
expect(result).toEqual({ provider: "gcp", region: "europe-west3" });
|
|
7
|
+
});
|
|
8
|
+
it("parses US East GCP region", () => {
|
|
9
|
+
const result = parseApiUrl("https://api.us-east.tinybird.co");
|
|
10
|
+
expect(result).toEqual({ provider: "gcp", region: "us-east4" });
|
|
11
|
+
});
|
|
12
|
+
it("parses EU Central AWS region", () => {
|
|
13
|
+
const result = parseApiUrl("https://api.eu-central-1.aws.tinybird.co");
|
|
14
|
+
expect(result).toEqual({ provider: "aws", region: "eu-central-1" });
|
|
15
|
+
});
|
|
16
|
+
it("parses US East AWS region", () => {
|
|
17
|
+
const result = parseApiUrl("https://api.us-east-1.aws.tinybird.co");
|
|
18
|
+
expect(result).toEqual({ provider: "aws", region: "us-east-1" });
|
|
19
|
+
});
|
|
20
|
+
it("parses US West AWS region", () => {
|
|
21
|
+
const result = parseApiUrl("https://api.us-west-2.aws.tinybird.co");
|
|
22
|
+
expect(result).toEqual({ provider: "aws", region: "us-west-2" });
|
|
23
|
+
});
|
|
24
|
+
it("returns null for unknown regions", () => {
|
|
25
|
+
const result = parseApiUrl("https://api.unknown.tinybird.co");
|
|
26
|
+
expect(result).toBeNull();
|
|
27
|
+
});
|
|
28
|
+
it("returns null for invalid URLs", () => {
|
|
29
|
+
const result = parseApiUrl("not-a-url");
|
|
30
|
+
expect(result).toBeNull();
|
|
31
|
+
});
|
|
32
|
+
it("returns null for localhost", () => {
|
|
33
|
+
const result = parseApiUrl("http://localhost:7181");
|
|
34
|
+
expect(result).toBeNull();
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe("getDashboardUrl", () => {
|
|
38
|
+
it("generates EU GCP workspace URL", () => {
|
|
39
|
+
const result = getDashboardUrl("https://api.tinybird.co", "my_workspace");
|
|
40
|
+
expect(result).toBe("https://cloud.tinybird.co/gcp/europe-west3/my_workspace");
|
|
41
|
+
});
|
|
42
|
+
it("generates US East GCP workspace URL", () => {
|
|
43
|
+
const result = getDashboardUrl("https://api.us-east.tinybird.co", "my_workspace");
|
|
44
|
+
expect(result).toBe("https://cloud.tinybird.co/gcp/us-east4/my_workspace");
|
|
45
|
+
});
|
|
46
|
+
it("generates AWS workspace URL", () => {
|
|
47
|
+
const result = getDashboardUrl("https://api.us-west-2.aws.tinybird.co", "my_workspace");
|
|
48
|
+
expect(result).toBe("https://cloud.tinybird.co/aws/us-west-2/my_workspace");
|
|
49
|
+
});
|
|
50
|
+
it("returns null for unknown regions", () => {
|
|
51
|
+
const result = getDashboardUrl("https://api.unknown.tinybird.co", "my_workspace");
|
|
52
|
+
expect(result).toBeNull();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe("getBranchDashboardUrl", () => {
|
|
56
|
+
it("generates EU GCP branch URL", () => {
|
|
57
|
+
const result = getBranchDashboardUrl("https://api.tinybird.co", "my_workspace", "feature_branch");
|
|
58
|
+
expect(result).toBe("https://cloud.tinybird.co/gcp/europe-west3/my_workspace~feature_branch");
|
|
59
|
+
});
|
|
60
|
+
it("generates US East GCP branch URL", () => {
|
|
61
|
+
const result = getBranchDashboardUrl("https://api.us-east.tinybird.co", "my_workspace", "feature_branch");
|
|
62
|
+
expect(result).toBe("https://cloud.tinybird.co/gcp/us-east4/my_workspace~feature_branch");
|
|
63
|
+
});
|
|
64
|
+
it("generates AWS branch URL", () => {
|
|
65
|
+
const result = getBranchDashboardUrl("https://api.us-west-2.aws.tinybird.co", "my_workspace", "my_feature");
|
|
66
|
+
expect(result).toBe("https://cloud.tinybird.co/aws/us-west-2/my_workspace~my_feature");
|
|
67
|
+
});
|
|
68
|
+
it("returns null for unknown regions", () => {
|
|
69
|
+
const result = getBranchDashboardUrl("https://api.unknown.tinybird.co", "my_workspace", "branch");
|
|
70
|
+
expect(result).toBeNull();
|
|
71
|
+
});
|
|
72
|
+
it("handles branch names with underscores", () => {
|
|
73
|
+
const result = getBranchDashboardUrl("https://api.tinybird.co", "my_workspace", "feature_with_underscores");
|
|
74
|
+
expect(result).toBe("https://cloud.tinybird.co/gcp/europe-west3/my_workspace~feature_with_underscores");
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe("getLocalDashboardUrl", () => {
|
|
78
|
+
it("generates local dashboard URL with default port", () => {
|
|
79
|
+
const result = getLocalDashboardUrl("my_local_workspace");
|
|
80
|
+
expect(result).toBe("https://cloud.tinybird.co/local/7181/my_local_workspace");
|
|
81
|
+
});
|
|
82
|
+
it("generates local dashboard URL with custom port", () => {
|
|
83
|
+
const result = getLocalDashboardUrl("my_local_workspace", 8080);
|
|
84
|
+
expect(result).toBe("https://cloud.tinybird.co/local/8080/my_local_workspace");
|
|
85
|
+
});
|
|
86
|
+
it("handles workspace names with underscores", () => {
|
|
87
|
+
const result = getLocalDashboardUrl("dublin_feature_branch");
|
|
88
|
+
expect(result).toBe("https://cloud.tinybird.co/local/7181/dublin_feature_branch");
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=dashboard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.test.js","sourceRoot":"","sources":["../../src/api/dashboard.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,8 @@ export interface BranchStatusResult {
|
|
|
36
36
|
tinybirdBranch?: TinybirdBranch;
|
|
37
37
|
/** Whether a cached token exists */
|
|
38
38
|
hasCachedToken: boolean;
|
|
39
|
+
/** Dashboard URL for the branch */
|
|
40
|
+
dashboardUrl?: string;
|
|
39
41
|
/** Error message if failed */
|
|
40
42
|
error?: string;
|
|
41
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/branch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAIL,KAAK,cAAc,EAEpB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/branch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAIL,KAAK,cAAc,EAEpB,MAAM,uBAAuB,CAAC;AAS/B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,uCAAuC;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,oCAAoC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA6B3B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAyG7B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA0C7B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkC1E"}
|
|
@@ -5,6 +5,7 @@ import { loadConfig } from "../config.js";
|
|
|
5
5
|
import { listBranches, getBranch, deleteBranch, BranchApiError, } from "../../api/branches.js";
|
|
6
6
|
import { getWorkspace } from "../../api/workspaces.js";
|
|
7
7
|
import { getBranchToken, removeBranch as removeCachedBranch, listCachedBranches, } from "../branch-store.js";
|
|
8
|
+
import { getBranchDashboardUrl } from "../../api/dashboard.js";
|
|
8
9
|
/**
|
|
9
10
|
* List all Tinybird branches
|
|
10
11
|
*
|
|
@@ -65,14 +66,16 @@ export async function runBranchStatus(options = {}) {
|
|
|
65
66
|
const gitBranch = config.gitBranch;
|
|
66
67
|
const tinybirdBranchName = config.tinybirdBranch; // Sanitized name
|
|
67
68
|
const isMainBranch = config.isMainBranch;
|
|
68
|
-
// Fetch the workspace
|
|
69
|
+
// Fetch the workspace from the API
|
|
69
70
|
let workspaceId;
|
|
71
|
+
let workspaceName;
|
|
70
72
|
try {
|
|
71
73
|
const workspace = await getWorkspace({
|
|
72
74
|
baseUrl: config.baseUrl,
|
|
73
75
|
token: config.token,
|
|
74
76
|
});
|
|
75
77
|
workspaceId = workspace.id;
|
|
78
|
+
workspaceName = workspace.name;
|
|
76
79
|
}
|
|
77
80
|
catch (error) {
|
|
78
81
|
return {
|
|
@@ -84,6 +87,10 @@ export async function runBranchStatus(options = {}) {
|
|
|
84
87
|
error: error.message,
|
|
85
88
|
};
|
|
86
89
|
}
|
|
90
|
+
// Generate dashboard URL for the branch
|
|
91
|
+
const dashboardUrl = tinybirdBranchName
|
|
92
|
+
? getBranchDashboardUrl(config.baseUrl, workspaceName, tinybirdBranchName) ?? undefined
|
|
93
|
+
: undefined;
|
|
87
94
|
// Check for cached token (use sanitized name)
|
|
88
95
|
const cachedBranch = tinybirdBranchName ? getBranchToken(workspaceId, tinybirdBranchName) : null;
|
|
89
96
|
const hasCachedToken = cachedBranch !== null;
|
|
@@ -95,6 +102,7 @@ export async function runBranchStatus(options = {}) {
|
|
|
95
102
|
tinybirdBranchName,
|
|
96
103
|
isMainBranch,
|
|
97
104
|
hasCachedToken,
|
|
105
|
+
dashboardUrl,
|
|
98
106
|
};
|
|
99
107
|
}
|
|
100
108
|
// Try to get the Tinybird branch info (use sanitized name)
|
|
@@ -110,6 +118,7 @@ export async function runBranchStatus(options = {}) {
|
|
|
110
118
|
isMainBranch,
|
|
111
119
|
tinybirdBranch,
|
|
112
120
|
hasCachedToken,
|
|
121
|
+
dashboardUrl,
|
|
113
122
|
};
|
|
114
123
|
}
|
|
115
124
|
catch (error) {
|
|
@@ -121,6 +130,7 @@ export async function runBranchStatus(options = {}) {
|
|
|
121
130
|
tinybirdBranchName,
|
|
122
131
|
isMainBranch,
|
|
123
132
|
hasCachedToken,
|
|
133
|
+
dashboardUrl,
|
|
124
134
|
};
|
|
125
135
|
}
|
|
126
136
|
return {
|
|
@@ -129,6 +139,7 @@ export async function runBranchStatus(options = {}) {
|
|
|
129
139
|
tinybirdBranchName,
|
|
130
140
|
isMainBranch,
|
|
131
141
|
hasCachedToken,
|
|
142
|
+
dashboardUrl,
|
|
132
143
|
error: error.message,
|
|
133
144
|
};
|
|
134
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../src/cli/commands/branch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAuB,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,YAAY,EACZ,SAAS,EACT,YAAY,EAEZ,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,cAAc,EACd,YAAY,IAAI,kBAAkB,EAClC,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../src/cli/commands/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,21 @@ export interface BuildCommandOptions {
|
|
|
17
17
|
/** Override the devMode from config */
|
|
18
18
|
devModeOverride?: DevMode;
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Branch info included in build result
|
|
22
|
+
*/
|
|
23
|
+
export interface BuildBranchInfo {
|
|
24
|
+
/** Git branch name */
|
|
25
|
+
gitBranch: string | null;
|
|
26
|
+
/** Tinybird branch name */
|
|
27
|
+
tinybirdBranch: string | null;
|
|
28
|
+
/** Whether the branch was newly created */
|
|
29
|
+
wasCreated: boolean;
|
|
30
|
+
/** Dashboard URL for the branch */
|
|
31
|
+
dashboardUrl?: string;
|
|
32
|
+
/** Whether using local mode */
|
|
33
|
+
isLocal: boolean;
|
|
34
|
+
}
|
|
20
35
|
/**
|
|
21
36
|
* Build command result
|
|
22
37
|
*/
|
|
@@ -27,6 +42,8 @@ export interface BuildCommandResult {
|
|
|
27
42
|
build?: BuildFromIncludeResult;
|
|
28
43
|
/** Build API result (if not dry run) */
|
|
29
44
|
deploy?: BuildApiResult;
|
|
45
|
+
/** Branch info (when building to a branch) */
|
|
46
|
+
branchInfo?: BuildBranchInfo;
|
|
30
47
|
/** Error message if failed */
|
|
31
48
|
error?: string;
|
|
32
49
|
/** Duration in milliseconds */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAmD,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAmD,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAW1E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2CAA2C;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,wCAAwC;IACxC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAwN7F"}
|
|
@@ -6,6 +6,8 @@ import { buildFromInclude } from "../../generator/index.js";
|
|
|
6
6
|
import { buildToTinybird } from "../../api/build.js";
|
|
7
7
|
import { getOrCreateBranch } from "../../api/branches.js";
|
|
8
8
|
import { getLocalTokens, getOrCreateLocalWorkspace, getLocalWorkspaceName, LocalNotRunningError, } from "../../api/local.js";
|
|
9
|
+
import { getWorkspace } from "../../api/workspaces.js";
|
|
10
|
+
import { getBranchDashboardUrl, getLocalDashboardUrl } from "../../api/dashboard.js";
|
|
9
11
|
/**
|
|
10
12
|
* Run the build command
|
|
11
13
|
*
|
|
@@ -60,6 +62,7 @@ export async function runBuild(options = {}) {
|
|
|
60
62
|
console.log(`[debug] devMode: ${devMode}`);
|
|
61
63
|
}
|
|
62
64
|
let deployResult;
|
|
65
|
+
let branchInfo;
|
|
63
66
|
// Handle local mode
|
|
64
67
|
if (devMode === "local") {
|
|
65
68
|
try {
|
|
@@ -77,6 +80,13 @@ export async function runBuild(options = {}) {
|
|
|
77
80
|
if (debug) {
|
|
78
81
|
console.log(`[debug] Workspace ${wasCreated ? "created" : "found"}: ${workspace.name}`);
|
|
79
82
|
}
|
|
83
|
+
branchInfo = {
|
|
84
|
+
gitBranch: config.gitBranch,
|
|
85
|
+
tinybirdBranch: workspaceName,
|
|
86
|
+
wasCreated,
|
|
87
|
+
dashboardUrl: getLocalDashboardUrl(workspaceName),
|
|
88
|
+
isLocal: true,
|
|
89
|
+
};
|
|
80
90
|
// Always use /v1/build for local (no deploy endpoint)
|
|
81
91
|
deployResult = await buildToTinybird({
|
|
82
92
|
baseUrl: LOCAL_BASE_URL,
|
|
@@ -141,6 +151,19 @@ export async function runBuild(options = {}) {
|
|
|
141
151
|
if (debug) {
|
|
142
152
|
console.log(`[debug] Using branch token for branch: ${config.tinybirdBranch}`);
|
|
143
153
|
}
|
|
154
|
+
// Get workspace name for dashboard URL
|
|
155
|
+
const workspace = await getWorkspace({
|
|
156
|
+
baseUrl: config.baseUrl,
|
|
157
|
+
token: config.token,
|
|
158
|
+
});
|
|
159
|
+
const dashboardUrl = getBranchDashboardUrl(config.baseUrl, workspace.name, config.tinybirdBranch) ?? undefined;
|
|
160
|
+
branchInfo = {
|
|
161
|
+
gitBranch: config.gitBranch,
|
|
162
|
+
tinybirdBranch: config.tinybirdBranch,
|
|
163
|
+
wasCreated: tinybirdBranch.wasCreated ?? false,
|
|
164
|
+
dashboardUrl,
|
|
165
|
+
isLocal: false,
|
|
166
|
+
};
|
|
144
167
|
}
|
|
145
168
|
catch (error) {
|
|
146
169
|
return {
|
|
@@ -172,6 +195,7 @@ export async function runBuild(options = {}) {
|
|
|
172
195
|
success: false,
|
|
173
196
|
build: buildResult,
|
|
174
197
|
deploy: deployResult,
|
|
198
|
+
branchInfo,
|
|
175
199
|
error: deployResult.error,
|
|
176
200
|
durationMs: Date.now() - startTime,
|
|
177
201
|
};
|
|
@@ -180,6 +204,7 @@ export async function runBuild(options = {}) {
|
|
|
180
204
|
success: true,
|
|
181
205
|
build: buildResult,
|
|
182
206
|
deploy: deployResult,
|
|
207
|
+
branchInfo,
|
|
183
208
|
durationMs: Date.now() - startTime,
|
|
184
209
|
};
|
|
185
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAqC,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAA+B,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAuB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,8 @@ export interface BranchReadyInfo {
|
|
|
54
54
|
isLocal?: boolean;
|
|
55
55
|
/** Local workspace info (only in local mode) */
|
|
56
56
|
localWorkspace?: LocalWorkspace;
|
|
57
|
+
/** Dashboard URL for the branch (only in branch mode) */
|
|
58
|
+
dashboardUrl?: string;
|
|
57
59
|
}
|
|
58
60
|
/**
|
|
59
61
|
* Dev command controller
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,OAAO,EACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAY,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG/E,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAI5B;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,oCAAoC;IACpC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACvD,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,+CAA+C;IAC/C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,kDAAkD;IAClD,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC5C,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC9D,uCAAuC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uCAAuC;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC3C,mCAAmC;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,MAAM,CAC1B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC,CA8SxB"}
|
package/dist/cli/commands/dev.js
CHANGED
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import * as path from "path";
|
|
5
5
|
import { watch } from "chokidar";
|
|
6
|
-
import { loadConfig, configExists, findConfigFile, hasValidToken, updateConfig, LOCAL_BASE_URL } from "../config.js";
|
|
6
|
+
import { loadConfig, configExists, findConfigFile, hasValidToken, updateConfig, LOCAL_BASE_URL, } from "../config.js";
|
|
7
7
|
import { runBuild } from "./build.js";
|
|
8
8
|
import { getOrCreateBranch } from "../../api/branches.js";
|
|
9
9
|
import { browserLogin } from "../auth.js";
|
|
10
10
|
import { saveTinybirdToken } from "../env.js";
|
|
11
11
|
import { validatePipeSchemas, } from "../utils/schema-validation.js";
|
|
12
12
|
import { getLocalTokens, getOrCreateLocalWorkspace, getLocalWorkspaceName, } from "../../api/local.js";
|
|
13
|
+
import { getWorkspace } from "../../api/workspaces.js";
|
|
14
|
+
import { getBranchDashboardUrl, getLocalDashboardUrl } from "../../api/dashboard.js";
|
|
13
15
|
/**
|
|
14
16
|
* Run the dev command
|
|
15
17
|
*
|
|
@@ -43,7 +45,8 @@ export async function runDev(options = {}) {
|
|
|
43
45
|
console.log("No authentication found. Starting login flow...\n");
|
|
44
46
|
const authResult = await browserLogin();
|
|
45
47
|
if (!authResult.success || !authResult.token) {
|
|
46
|
-
throw new Error(authResult.error ??
|
|
48
|
+
throw new Error(authResult.error ??
|
|
49
|
+
"Login failed. Run 'npx tinybird login' to authenticate.");
|
|
47
50
|
}
|
|
48
51
|
// Find the config file (may be in parent directory)
|
|
49
52
|
const configPath = findConfigFile(cwd);
|
|
@@ -88,6 +91,7 @@ export async function runDev(options = {}) {
|
|
|
88
91
|
isLocal: true,
|
|
89
92
|
localWorkspace: workspace,
|
|
90
93
|
wasCreated,
|
|
94
|
+
dashboardUrl: getLocalDashboardUrl(workspace.name),
|
|
91
95
|
};
|
|
92
96
|
}
|
|
93
97
|
else {
|
|
@@ -110,11 +114,19 @@ export async function runDev(options = {}) {
|
|
|
110
114
|
`This may be an API issue.`);
|
|
111
115
|
}
|
|
112
116
|
effectiveToken = tinybirdBranch.token;
|
|
117
|
+
// Get workspace name for dashboard URL
|
|
118
|
+
const workspace = await getWorkspace({
|
|
119
|
+
baseUrl: config.baseUrl,
|
|
120
|
+
token: config.token,
|
|
121
|
+
});
|
|
122
|
+
const dashboardUrl = getBranchDashboardUrl(config.baseUrl, workspace.name, branchName) ??
|
|
123
|
+
undefined;
|
|
113
124
|
branchInfo = {
|
|
114
125
|
gitBranch: config.gitBranch, // Original git branch name for display
|
|
115
126
|
isMainBranch: false,
|
|
116
127
|
tinybirdBranch,
|
|
117
128
|
wasCreated: tinybirdBranch.wasCreated ?? false,
|
|
129
|
+
dashboardUrl,
|
|
118
130
|
};
|
|
119
131
|
}
|
|
120
132
|
}
|
|
@@ -136,7 +148,11 @@ export async function runDev(options = {}) {
|
|
|
136
148
|
async function doBuild() {
|
|
137
149
|
if (isBuilding) {
|
|
138
150
|
pendingBuild = true;
|
|
139
|
-
return {
|
|
151
|
+
return {
|
|
152
|
+
success: false,
|
|
153
|
+
error: "Build already in progress",
|
|
154
|
+
durationMs: 0,
|
|
155
|
+
};
|
|
140
156
|
}
|
|
141
157
|
isBuilding = true;
|
|
142
158
|
options.onBuildStart?.();
|