@databricks-solutions/lakebase-scm-utils 0.2.43 → 0.2.44
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/scripts/github/index.cjs +21 -4
- package/dist/scripts/github/index.js +21 -4
- package/dist/scripts/github/pr.cli.cjs +21 -4
- package/dist/scripts/github/pr.cli.js +21 -4
- package/dist/scripts/index.cjs +40 -10
- package/dist/scripts/index.js +40 -10
- package/dist/scripts/lakebase/branch.cli.cjs +21 -4
- package/dist/scripts/lakebase/branch.cli.js +21 -4
- package/dist/scripts/lakebase/ci-app-endpoint.cli.cjs +21 -4
- package/dist/scripts/lakebase/ci-app-endpoint.cli.js +21 -4
- package/dist/scripts/lakebase/ci-resolve-branch.cli.cjs +23 -6
- package/dist/scripts/lakebase/ci-resolve-branch.cli.js +23 -6
- package/dist/scripts/lakebase/collapse-heads.cli.cjs +23 -6
- package/dist/scripts/lakebase/collapse-heads.cli.js +23 -6
- package/dist/scripts/lakebase/cut-backup.cli.cjs +21 -4
- package/dist/scripts/lakebase/cut-backup.cli.js +21 -4
- package/dist/scripts/lakebase/cut-tier.cli.cjs +21 -4
- package/dist/scripts/lakebase/cut-tier.cli.js +21 -4
- package/dist/scripts/lakebase/detect-language.cli.cjs +23 -6
- package/dist/scripts/lakebase/detect-language.cli.js +23 -6
- package/dist/scripts/lakebase/doctor.cli.cjs +23 -6
- package/dist/scripts/lakebase/doctor.cli.js +23 -6
- package/dist/scripts/lakebase/get-connection.cli.cjs +23 -6
- package/dist/scripts/lakebase/get-connection.cli.js +23 -6
- package/dist/scripts/lakebase/index.cjs +40 -10
- package/dist/scripts/lakebase/index.js +40 -10
- package/dist/scripts/lakebase/infra-runner.cli.cjs +23 -6
- package/dist/scripts/lakebase/infra-runner.cli.js +23 -6
- package/dist/scripts/lakebase/new-migration.cli.cjs +23 -6
- package/dist/scripts/lakebase/new-migration.cli.js +23 -6
- package/dist/scripts/lakebase/schema-diff.cli.cjs +23 -6
- package/dist/scripts/lakebase/schema-diff.cli.js +23 -6
- package/dist/scripts/lakebase/schema-migrate.cli.cjs +23 -6
- package/dist/scripts/lakebase/schema-migrate.cli.js +23 -6
- package/dist/scripts/lakebase/scm-abandon-feature.cli.cjs +21 -4
- package/dist/scripts/lakebase/scm-abandon-feature.cli.js +21 -4
- package/dist/scripts/lakebase/scm-adopt-state.cli.cjs +21 -4
- package/dist/scripts/lakebase/scm-adopt-state.cli.js +21 -4
- package/dist/scripts/lakebase/scm-claim-feature.cli.cjs +23 -6
- package/dist/scripts/lakebase/scm-claim-feature.cli.js +23 -6
- package/dist/scripts/lakebase/scm-cleanup.cli.cjs +21 -4
- package/dist/scripts/lakebase/scm-cleanup.cli.js +21 -4
- package/dist/scripts/lakebase/scm-doctor.cli.cjs +23 -6
- package/dist/scripts/lakebase/scm-doctor.cli.js +23 -6
- package/dist/scripts/lakebase/scm-merge.cli.cjs +23 -6
- package/dist/scripts/lakebase/scm-merge.cli.js +23 -6
- package/dist/scripts/lakebase/scm-reconcile-tier.cli.cjs +23 -6
- package/dist/scripts/lakebase/scm-reconcile-tier.cli.js +23 -6
- package/dist/scripts/lakebase/scm-recover-orphans.cli.cjs +21 -4
- package/dist/scripts/lakebase/scm-recover-orphans.cli.js +21 -4
- package/dist/scripts/util/index.cjs +23 -6
- package/dist/scripts/util/index.js +23 -6
- package/package.json +1 -1
- package/scripts/lakebase/databricks-cli.ts +44 -4
- package/scripts/lakebase/runner-setup.ts +18 -2
- package/scripts/lakebase/secret-auth.ts +9 -2
- package/templates/project/common/scripts/run-tests.sh +10 -0
|
@@ -272,16 +272,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
272
272
|
}
|
|
273
273
|
async function runDatabricks(args, opts = {}) {
|
|
274
274
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
275
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
275
276
|
try {
|
|
276
|
-
|
|
277
|
-
env,
|
|
278
|
-
|
|
279
|
-
});
|
|
277
|
+
if (opts.input !== void 0) {
|
|
278
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
279
|
+
}
|
|
280
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
280
281
|
return stdout.toString();
|
|
281
282
|
} catch (err) {
|
|
282
283
|
throw classifyDatabricksError(err, argv, profile);
|
|
283
284
|
}
|
|
284
285
|
}
|
|
286
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
287
|
+
return new Promise((resolve, reject) => {
|
|
288
|
+
const child = (0, import_node_child_process2.execFile)("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
289
|
+
if (err) {
|
|
290
|
+
err.stdout = String(stdout ?? "");
|
|
291
|
+
err.stderr = String(stderr ?? "");
|
|
292
|
+
reject(err);
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
resolve(String(stdout ?? ""));
|
|
296
|
+
});
|
|
297
|
+
child.stdin?.on("error", () => {
|
|
298
|
+
});
|
|
299
|
+
child.stdin?.end(input);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
285
302
|
|
|
286
303
|
// scripts/lakebase/branch-id.ts
|
|
287
304
|
var UID_PATTERN = /^br-[a-z0-9-]+$/;
|
|
@@ -232,16 +232,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
232
232
|
}
|
|
233
233
|
async function runDatabricks(args, opts = {}) {
|
|
234
234
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
235
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
235
236
|
try {
|
|
236
|
-
|
|
237
|
-
env,
|
|
238
|
-
|
|
239
|
-
});
|
|
237
|
+
if (opts.input !== void 0) {
|
|
238
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
239
|
+
}
|
|
240
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
240
241
|
return stdout.toString();
|
|
241
242
|
} catch (err) {
|
|
242
243
|
throw classifyDatabricksError(err, argv, profile);
|
|
243
244
|
}
|
|
244
245
|
}
|
|
246
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
247
|
+
return new Promise((resolve, reject) => {
|
|
248
|
+
const child = execFile("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
249
|
+
if (err) {
|
|
250
|
+
err.stdout = String(stdout ?? "");
|
|
251
|
+
err.stderr = String(stderr ?? "");
|
|
252
|
+
reject(err);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
resolve(String(stdout ?? ""));
|
|
256
|
+
});
|
|
257
|
+
child.stdin?.on("error", () => {
|
|
258
|
+
});
|
|
259
|
+
child.stdin?.end(input);
|
|
260
|
+
});
|
|
261
|
+
}
|
|
245
262
|
|
|
246
263
|
// scripts/lakebase/branch-id.ts
|
|
247
264
|
var UID_PATTERN = /^br-[a-z0-9-]+$/;
|
|
@@ -79269,16 +79269,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
79269
79269
|
}
|
|
79270
79270
|
async function runDatabricks(args, opts = {}) {
|
|
79271
79271
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
79272
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
79272
79273
|
try {
|
|
79273
|
-
|
|
79274
|
-
env,
|
|
79275
|
-
|
|
79276
|
-
});
|
|
79274
|
+
if (opts.input !== void 0) {
|
|
79275
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
79276
|
+
}
|
|
79277
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
79277
79278
|
return stdout.toString();
|
|
79278
79279
|
} catch (err) {
|
|
79279
79280
|
throw classifyDatabricksError(err, argv, profile);
|
|
79280
79281
|
}
|
|
79281
79282
|
}
|
|
79283
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
79284
|
+
return new Promise((resolve3, reject) => {
|
|
79285
|
+
const child = (0, import_node_child_process2.execFile)("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
79286
|
+
if (err) {
|
|
79287
|
+
err.stdout = String(stdout ?? "");
|
|
79288
|
+
err.stderr = String(stderr ?? "");
|
|
79289
|
+
reject(err);
|
|
79290
|
+
return;
|
|
79291
|
+
}
|
|
79292
|
+
resolve3(String(stdout ?? ""));
|
|
79293
|
+
});
|
|
79294
|
+
child.stdin?.on("error", () => {
|
|
79295
|
+
});
|
|
79296
|
+
child.stdin?.end(input);
|
|
79297
|
+
});
|
|
79298
|
+
}
|
|
79282
79299
|
function runDatabricksSync(args, opts = {}) {
|
|
79283
79300
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
79284
79301
|
try {
|
|
@@ -88222,8 +88239,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
88222
88239
|
var cached;
|
|
88223
88240
|
function substrateSelfVersion() {
|
|
88224
88241
|
if (cached !== void 0) return cached;
|
|
88225
|
-
if ("0.2.
|
|
88226
|
-
cached = "0.2.
|
|
88242
|
+
if ("0.2.44".length > 0) {
|
|
88243
|
+
cached = "0.2.44";
|
|
88227
88244
|
return cached;
|
|
88228
88245
|
}
|
|
88229
88246
|
cached = "unknown";
|
|
@@ -1791,16 +1791,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
1791
1791
|
}
|
|
1792
1792
|
async function runDatabricks(args, opts = {}) {
|
|
1793
1793
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
1794
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
1794
1795
|
try {
|
|
1795
|
-
|
|
1796
|
-
env,
|
|
1797
|
-
|
|
1798
|
-
});
|
|
1796
|
+
if (opts.input !== void 0) {
|
|
1797
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
1798
|
+
}
|
|
1799
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
1799
1800
|
return stdout.toString();
|
|
1800
1801
|
} catch (err) {
|
|
1801
1802
|
throw classifyDatabricksError(err, argv, profile);
|
|
1802
1803
|
}
|
|
1803
1804
|
}
|
|
1805
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
1806
|
+
return new Promise((resolve3, reject) => {
|
|
1807
|
+
const child = execFile("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
1808
|
+
if (err) {
|
|
1809
|
+
err.stdout = String(stdout ?? "");
|
|
1810
|
+
err.stderr = String(stderr ?? "");
|
|
1811
|
+
reject(err);
|
|
1812
|
+
return;
|
|
1813
|
+
}
|
|
1814
|
+
resolve3(String(stdout ?? ""));
|
|
1815
|
+
});
|
|
1816
|
+
child.stdin?.on("error", () => {
|
|
1817
|
+
});
|
|
1818
|
+
child.stdin?.end(input);
|
|
1819
|
+
});
|
|
1820
|
+
}
|
|
1804
1821
|
function runDatabricksSync(args, opts = {}) {
|
|
1805
1822
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
1806
1823
|
try {
|
|
@@ -9375,8 +9392,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
9375
9392
|
var cached;
|
|
9376
9393
|
function substrateSelfVersion() {
|
|
9377
9394
|
if (cached !== void 0) return cached;
|
|
9378
|
-
if ("0.2.
|
|
9379
|
-
cached = "0.2.
|
|
9395
|
+
if ("0.2.44".length > 0) {
|
|
9396
|
+
cached = "0.2.44";
|
|
9380
9397
|
return cached;
|
|
9381
9398
|
}
|
|
9382
9399
|
cached = "unknown";
|
|
@@ -85791,16 +85791,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
85791
85791
|
}
|
|
85792
85792
|
async function runDatabricks(args, opts = {}) {
|
|
85793
85793
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
85794
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
85794
85795
|
try {
|
|
85795
|
-
|
|
85796
|
-
env,
|
|
85797
|
-
|
|
85798
|
-
});
|
|
85796
|
+
if (opts.input !== void 0) {
|
|
85797
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
85798
|
+
}
|
|
85799
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
85799
85800
|
return stdout.toString();
|
|
85800
85801
|
} catch (err) {
|
|
85801
85802
|
throw classifyDatabricksError(err, argv, profile);
|
|
85802
85803
|
}
|
|
85803
85804
|
}
|
|
85805
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
85806
|
+
return new Promise((resolve2, reject) => {
|
|
85807
|
+
const child = (0, import_node_child_process3.execFile)("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
85808
|
+
if (err) {
|
|
85809
|
+
err.stdout = String(stdout ?? "");
|
|
85810
|
+
err.stderr = String(stderr ?? "");
|
|
85811
|
+
reject(err);
|
|
85812
|
+
return;
|
|
85813
|
+
}
|
|
85814
|
+
resolve2(String(stdout ?? ""));
|
|
85815
|
+
});
|
|
85816
|
+
child.stdin?.on("error", () => {
|
|
85817
|
+
});
|
|
85818
|
+
child.stdin?.end(input);
|
|
85819
|
+
});
|
|
85820
|
+
}
|
|
85804
85821
|
function runDatabricksSync(args, opts = {}) {
|
|
85805
85822
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
85806
85823
|
try {
|
|
@@ -88205,8 +88222,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
88205
88222
|
var cached;
|
|
88206
88223
|
function substrateSelfVersion() {
|
|
88207
88224
|
if (cached !== void 0) return cached;
|
|
88208
|
-
if ("0.2.
|
|
88209
|
-
cached = "0.2.
|
|
88225
|
+
if ("0.2.44".length > 0) {
|
|
88226
|
+
cached = "0.2.44";
|
|
88210
88227
|
return cached;
|
|
88211
88228
|
}
|
|
88212
88229
|
cached = "unknown";
|
|
@@ -8313,16 +8313,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
8313
8313
|
}
|
|
8314
8314
|
async function runDatabricks(args, opts = {}) {
|
|
8315
8315
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
8316
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
8316
8317
|
try {
|
|
8317
|
-
|
|
8318
|
-
env,
|
|
8319
|
-
|
|
8320
|
-
});
|
|
8318
|
+
if (opts.input !== void 0) {
|
|
8319
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
8320
|
+
}
|
|
8321
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
8321
8322
|
return stdout.toString();
|
|
8322
8323
|
} catch (err) {
|
|
8323
8324
|
throw classifyDatabricksError(err, argv, profile);
|
|
8324
8325
|
}
|
|
8325
8326
|
}
|
|
8327
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
8328
|
+
return new Promise((resolve2, reject) => {
|
|
8329
|
+
const child = execFile("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
8330
|
+
if (err) {
|
|
8331
|
+
err.stdout = String(stdout ?? "");
|
|
8332
|
+
err.stderr = String(stderr ?? "");
|
|
8333
|
+
reject(err);
|
|
8334
|
+
return;
|
|
8335
|
+
}
|
|
8336
|
+
resolve2(String(stdout ?? ""));
|
|
8337
|
+
});
|
|
8338
|
+
child.stdin?.on("error", () => {
|
|
8339
|
+
});
|
|
8340
|
+
child.stdin?.end(input);
|
|
8341
|
+
});
|
|
8342
|
+
}
|
|
8326
8343
|
function runDatabricksSync(args, opts = {}) {
|
|
8327
8344
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
8328
8345
|
try {
|
|
@@ -9358,8 +9375,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
9358
9375
|
var cached;
|
|
9359
9376
|
function substrateSelfVersion() {
|
|
9360
9377
|
if (cached !== void 0) return cached;
|
|
9361
|
-
if ("0.2.
|
|
9362
|
-
cached = "0.2.
|
|
9378
|
+
if ("0.2.44".length > 0) {
|
|
9379
|
+
cached = "0.2.44";
|
|
9363
9380
|
return cached;
|
|
9364
9381
|
}
|
|
9365
9382
|
cached = "unknown";
|
|
@@ -77731,16 +77731,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
77731
77731
|
}
|
|
77732
77732
|
async function runDatabricks(args, opts = {}) {
|
|
77733
77733
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
77734
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
77734
77735
|
try {
|
|
77735
|
-
|
|
77736
|
-
env,
|
|
77737
|
-
|
|
77738
|
-
});
|
|
77736
|
+
if (opts.input !== void 0) {
|
|
77737
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
77738
|
+
}
|
|
77739
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
77739
77740
|
return stdout.toString();
|
|
77740
77741
|
} catch (err) {
|
|
77741
77742
|
throw classifyDatabricksError(err, argv, profile);
|
|
77742
77743
|
}
|
|
77743
77744
|
}
|
|
77745
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
77746
|
+
return new Promise((resolve2, reject) => {
|
|
77747
|
+
const child = (0, import_node_child_process2.execFile)("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
77748
|
+
if (err) {
|
|
77749
|
+
err.stdout = String(stdout ?? "");
|
|
77750
|
+
err.stderr = String(stderr ?? "");
|
|
77751
|
+
reject(err);
|
|
77752
|
+
return;
|
|
77753
|
+
}
|
|
77754
|
+
resolve2(String(stdout ?? ""));
|
|
77755
|
+
});
|
|
77756
|
+
child.stdin?.on("error", () => {
|
|
77757
|
+
});
|
|
77758
|
+
child.stdin?.end(input);
|
|
77759
|
+
});
|
|
77760
|
+
}
|
|
77744
77761
|
function runDatabricksSync(args, opts = {}) {
|
|
77745
77762
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
77746
77763
|
try {
|
|
@@ -79270,8 +79287,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
79270
79287
|
var cached;
|
|
79271
79288
|
function substrateSelfVersion() {
|
|
79272
79289
|
if (cached !== void 0) return cached;
|
|
79273
|
-
if ("0.2.
|
|
79274
|
-
cached = "0.2.
|
|
79290
|
+
if ("0.2.44".length > 0) {
|
|
79291
|
+
cached = "0.2.44";
|
|
79275
79292
|
return cached;
|
|
79276
79293
|
}
|
|
79277
79294
|
cached = "unknown";
|
|
@@ -208,16 +208,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
208
208
|
}
|
|
209
209
|
async function runDatabricks(args, opts = {}) {
|
|
210
210
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
211
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
211
212
|
try {
|
|
212
|
-
|
|
213
|
-
env,
|
|
214
|
-
|
|
215
|
-
});
|
|
213
|
+
if (opts.input !== void 0) {
|
|
214
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
215
|
+
}
|
|
216
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
216
217
|
return stdout.toString();
|
|
217
218
|
} catch (err) {
|
|
218
219
|
throw classifyDatabricksError(err, argv, profile);
|
|
219
220
|
}
|
|
220
221
|
}
|
|
222
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
223
|
+
return new Promise((resolve2, reject) => {
|
|
224
|
+
const child = execFile("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
225
|
+
if (err) {
|
|
226
|
+
err.stdout = String(stdout ?? "");
|
|
227
|
+
err.stderr = String(stderr ?? "");
|
|
228
|
+
reject(err);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
resolve2(String(stdout ?? ""));
|
|
232
|
+
});
|
|
233
|
+
child.stdin?.on("error", () => {
|
|
234
|
+
});
|
|
235
|
+
child.stdin?.end(input);
|
|
236
|
+
});
|
|
237
|
+
}
|
|
221
238
|
function runDatabricksSync(args, opts = {}) {
|
|
222
239
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
223
240
|
try {
|
|
@@ -371,8 +388,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
371
388
|
var cached;
|
|
372
389
|
function substrateSelfVersion() {
|
|
373
390
|
if (cached !== void 0) return cached;
|
|
374
|
-
if ("0.2.
|
|
375
|
-
cached = "0.2.
|
|
391
|
+
if ("0.2.44".length > 0) {
|
|
392
|
+
cached = "0.2.44";
|
|
376
393
|
return cached;
|
|
377
394
|
}
|
|
378
395
|
cached = "unknown";
|
|
@@ -77849,16 +77849,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
77849
77849
|
}
|
|
77850
77850
|
async function runDatabricks(args, opts = {}) {
|
|
77851
77851
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
77852
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
77852
77853
|
try {
|
|
77853
|
-
|
|
77854
|
-
env,
|
|
77855
|
-
|
|
77856
|
-
});
|
|
77854
|
+
if (opts.input !== void 0) {
|
|
77855
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
77856
|
+
}
|
|
77857
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
77857
77858
|
return stdout.toString();
|
|
77858
77859
|
} catch (err) {
|
|
77859
77860
|
throw classifyDatabricksError(err, argv, profile);
|
|
77860
77861
|
}
|
|
77861
77862
|
}
|
|
77863
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
77864
|
+
return new Promise((resolve2, reject) => {
|
|
77865
|
+
const child = (0, import_node_child_process2.execFile)("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
77866
|
+
if (err) {
|
|
77867
|
+
err.stdout = String(stdout ?? "");
|
|
77868
|
+
err.stderr = String(stderr ?? "");
|
|
77869
|
+
reject(err);
|
|
77870
|
+
return;
|
|
77871
|
+
}
|
|
77872
|
+
resolve2(String(stdout ?? ""));
|
|
77873
|
+
});
|
|
77874
|
+
child.stdin?.on("error", () => {
|
|
77875
|
+
});
|
|
77876
|
+
child.stdin?.end(input);
|
|
77877
|
+
});
|
|
77878
|
+
}
|
|
77862
77879
|
function runDatabricksSync(args, opts = {}) {
|
|
77863
77880
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
77864
77881
|
try {
|
|
@@ -321,16 +321,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
321
321
|
}
|
|
322
322
|
async function runDatabricks(args, opts = {}) {
|
|
323
323
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
324
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
324
325
|
try {
|
|
325
|
-
|
|
326
|
-
env,
|
|
327
|
-
|
|
328
|
-
});
|
|
326
|
+
if (opts.input !== void 0) {
|
|
327
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
328
|
+
}
|
|
329
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
329
330
|
return stdout.toString();
|
|
330
331
|
} catch (err) {
|
|
331
332
|
throw classifyDatabricksError(err, argv, profile);
|
|
332
333
|
}
|
|
333
334
|
}
|
|
335
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
336
|
+
return new Promise((resolve2, reject) => {
|
|
337
|
+
const child = execFile("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
338
|
+
if (err) {
|
|
339
|
+
err.stdout = String(stdout ?? "");
|
|
340
|
+
err.stderr = String(stderr ?? "");
|
|
341
|
+
reject(err);
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
resolve2(String(stdout ?? ""));
|
|
345
|
+
});
|
|
346
|
+
child.stdin?.on("error", () => {
|
|
347
|
+
});
|
|
348
|
+
child.stdin?.end(input);
|
|
349
|
+
});
|
|
350
|
+
}
|
|
334
351
|
function runDatabricksSync(args, opts = {}) {
|
|
335
352
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
336
353
|
try {
|
|
@@ -1659,8 +1659,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
1659
1659
|
var cached;
|
|
1660
1660
|
function substrateSelfVersion() {
|
|
1661
1661
|
if (cached !== void 0) return cached;
|
|
1662
|
-
if ("0.2.
|
|
1663
|
-
cached = "0.2.
|
|
1662
|
+
if ("0.2.44".length > 0) {
|
|
1663
|
+
cached = "0.2.44";
|
|
1664
1664
|
return cached;
|
|
1665
1665
|
}
|
|
1666
1666
|
cached = "unknown";
|
|
@@ -1928,16 +1928,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
1928
1928
|
}
|
|
1929
1929
|
async function runDatabricks(args, opts = {}) {
|
|
1930
1930
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
1931
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
1931
1932
|
try {
|
|
1932
|
-
|
|
1933
|
-
env,
|
|
1934
|
-
|
|
1935
|
-
});
|
|
1933
|
+
if (opts.input !== void 0) {
|
|
1934
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
1935
|
+
}
|
|
1936
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
1936
1937
|
return stdout.toString();
|
|
1937
1938
|
} catch (err) {
|
|
1938
1939
|
throw classifyDatabricksError(err, argv, profile);
|
|
1939
1940
|
}
|
|
1940
1941
|
}
|
|
1942
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
1943
|
+
return new Promise((resolve, reject) => {
|
|
1944
|
+
const child = (0, import_node_child_process2.execFile)("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
1945
|
+
if (err) {
|
|
1946
|
+
err.stdout = String(stdout ?? "");
|
|
1947
|
+
err.stderr = String(stderr ?? "");
|
|
1948
|
+
reject(err);
|
|
1949
|
+
return;
|
|
1950
|
+
}
|
|
1951
|
+
resolve(String(stdout ?? ""));
|
|
1952
|
+
});
|
|
1953
|
+
child.stdin?.on("error", () => {
|
|
1954
|
+
});
|
|
1955
|
+
child.stdin?.end(input);
|
|
1956
|
+
});
|
|
1957
|
+
}
|
|
1941
1958
|
|
|
1942
1959
|
// scripts/github/secrets.ts
|
|
1943
1960
|
init_cjs_shims();
|
|
@@ -1630,8 +1630,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
1630
1630
|
var cached;
|
|
1631
1631
|
function substrateSelfVersion() {
|
|
1632
1632
|
if (cached !== void 0) return cached;
|
|
1633
|
-
if ("0.2.
|
|
1634
|
-
cached = "0.2.
|
|
1633
|
+
if ("0.2.44".length > 0) {
|
|
1634
|
+
cached = "0.2.44";
|
|
1635
1635
|
return cached;
|
|
1636
1636
|
}
|
|
1637
1637
|
cached = "unknown";
|
|
@@ -1899,16 +1899,33 @@ stdout: ${stdout}` : killed || signal ? `
|
|
|
1899
1899
|
}
|
|
1900
1900
|
async function runDatabricks(args, opts = {}) {
|
|
1901
1901
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
1902
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
1902
1903
|
try {
|
|
1903
|
-
|
|
1904
|
-
env,
|
|
1905
|
-
|
|
1906
|
-
});
|
|
1904
|
+
if (opts.input !== void 0) {
|
|
1905
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
1906
|
+
}
|
|
1907
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
1907
1908
|
return stdout.toString();
|
|
1908
1909
|
} catch (err) {
|
|
1909
1910
|
throw classifyDatabricksError(err, argv, profile);
|
|
1910
1911
|
}
|
|
1911
1912
|
}
|
|
1913
|
+
function execDatabricksWithStdin(argv, input, env, timeout) {
|
|
1914
|
+
return new Promise((resolve, reject) => {
|
|
1915
|
+
const child = execFile("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
1916
|
+
if (err) {
|
|
1917
|
+
err.stdout = String(stdout ?? "");
|
|
1918
|
+
err.stderr = String(stderr ?? "");
|
|
1919
|
+
reject(err);
|
|
1920
|
+
return;
|
|
1921
|
+
}
|
|
1922
|
+
resolve(String(stdout ?? ""));
|
|
1923
|
+
});
|
|
1924
|
+
child.stdin?.on("error", () => {
|
|
1925
|
+
});
|
|
1926
|
+
child.stdin?.end(input);
|
|
1927
|
+
});
|
|
1928
|
+
}
|
|
1912
1929
|
|
|
1913
1930
|
// scripts/github/secrets.ts
|
|
1914
1931
|
init_esm_shims();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@databricks-solutions/lakebase-scm-utils",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.44",
|
|
4
4
|
"description": "Lakebase SCM + substrate engine: database branching, paired-branch SCM workflows, connection/credential minting, schema migration, project scaffold + deploy primitives, and the git/github utility layer. Extracted from consort for portable, standalone consumption by lakebase-scm-extension and the SFTDD orchestration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -36,6 +36,11 @@ export interface DatabricksCliOptions {
|
|
|
36
36
|
* subcommand. Set this for version/help probes so they work regardless of
|
|
37
37
|
* DATABRICKS_CONFIG_PROFILE. */
|
|
38
38
|
noProfile?: boolean;
|
|
39
|
+
/** Data to feed on the child's STDIN (async path only). Used to keep a
|
|
40
|
+
* credential OFF the command line: pass the secret in a `--json @/dev/stdin`
|
|
41
|
+
* body here instead of as a `--string-value <cred>` argv element, so it never
|
|
42
|
+
* appears in the process table / `ps`. */
|
|
43
|
+
input?: string;
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
/** A `databricks` CLI call failed. Message: `databricks <args> failed: <msg>\nstderr: <stderr>`. */
|
|
@@ -203,17 +208,52 @@ export function classifyDatabricksError(err: unknown, argv: string[], profile: s
|
|
|
203
208
|
/** Run the `databricks` CLI (async), returning stdout. */
|
|
204
209
|
export async function runDatabricks(args: string[], opts: DatabricksCliOptions = {}): Promise<string> {
|
|
205
210
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
211
|
+
const timeout = opts.timeout ?? KIT_TIMEOUTS.cliDefault;
|
|
206
212
|
try {
|
|
207
|
-
|
|
208
|
-
env,
|
|
209
|
-
|
|
210
|
-
});
|
|
213
|
+
if (opts.input !== undefined) {
|
|
214
|
+
return await execDatabricksWithStdin(argv, opts.input, env, timeout);
|
|
215
|
+
}
|
|
216
|
+
const { stdout } = await execFileP("databricks", argv, { env, timeout });
|
|
211
217
|
return stdout.toString();
|
|
212
218
|
} catch (err) {
|
|
213
219
|
throw classifyDatabricksError(err, argv, profile);
|
|
214
220
|
}
|
|
215
221
|
}
|
|
216
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Run `databricks` feeding `input` on STDIN, so a credential can travel in a
|
|
225
|
+
* `--json @/dev/stdin` body instead of a `--string-value <cred>` argv element
|
|
226
|
+
* that leaks into the process table. Buffers stdout/stderr and shapes
|
|
227
|
+
* the result like execFileP so classifyDatabricksError reads it uniformly.
|
|
228
|
+
*
|
|
229
|
+
* The stdin write is GUARDED: a child that exits/rejects the body before we finish
|
|
230
|
+
* writing raises EPIPE on the pipe, which is an UNHANDLED 'error' (crash) unless we
|
|
231
|
+
* listen for it. We swallow the pipe error and let the child's own exit code + stderr
|
|
232
|
+
* be the verdict (guard the write against EPIPE).
|
|
233
|
+
*/
|
|
234
|
+
function execDatabricksWithStdin(
|
|
235
|
+
argv: string[],
|
|
236
|
+
input: string,
|
|
237
|
+
env: NodeJS.ProcessEnv,
|
|
238
|
+
timeout: number,
|
|
239
|
+
): Promise<string> {
|
|
240
|
+
return new Promise((resolve, reject) => {
|
|
241
|
+
const child = execFile("databricks", argv, { env, timeout }, (err, stdout, stderr) => {
|
|
242
|
+
if (err) {
|
|
243
|
+
(err as { stdout?: string; stderr?: string }).stdout = String(stdout ?? "");
|
|
244
|
+
(err as { stdout?: string; stderr?: string }).stderr = String(stderr ?? "");
|
|
245
|
+
reject(err);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
resolve(String(stdout ?? ""));
|
|
249
|
+
});
|
|
250
|
+
// Guard the pipe: without this an EPIPE (child gone before we finish) is an
|
|
251
|
+
// uncaught exception; the child's exit/stderr is the real verdict.
|
|
252
|
+
child.stdin?.on("error", () => {});
|
|
253
|
+
child.stdin?.end(input);
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
217
257
|
/** Run the `databricks` CLI (sync), returning stdout. */
|
|
218
258
|
export function runDatabricksSync(args: string[], opts: DatabricksCliOptions = {}): string {
|
|
219
259
|
const { argv, env, profile } = buildInvocation(args, opts);
|
|
@@ -271,8 +271,24 @@ export async function setupRunner(args: SetupRunnerArgs): Promise<RunnerInfo> {
|
|
|
271
271
|
if (needsConfig) {
|
|
272
272
|
report("Registering runner with GitHub...");
|
|
273
273
|
const regToken = await createRegistrationToken(args.fullRepoName);
|
|
274
|
-
|
|
275
|
-
|
|
274
|
+
// Invoke config.sh with an argv array (execFileSync), NOT a shell-interpolated
|
|
275
|
+
// string (execSync). config.sh is GitHub's runner binary and only accepts the
|
|
276
|
+
// registration token as `--token <tok>`, so the token is unavoidably on its argv
|
|
277
|
+
// (a full off-`ps` fix would need the JIT-runner API — disproportionate for a
|
|
278
|
+
// SHORT-LIVED (~1h) reg token). But dropping the `/bin/sh -c` wrapper removes the
|
|
279
|
+
// extra shell process that also carried the token, closes the shell-trace /
|
|
280
|
+
// process-accounting exposure, and eliminates any shell-injection surface on the
|
|
281
|
+
// interpolated url/name.
|
|
282
|
+
cp.execFileSync(
|
|
283
|
+
"./config.sh",
|
|
284
|
+
[
|
|
285
|
+
"--url", `https://github.com/${args.fullRepoName}`,
|
|
286
|
+
"--token", regToken,
|
|
287
|
+
"--name", name,
|
|
288
|
+
"--labels", "self-hosted",
|
|
289
|
+
"--unattended",
|
|
290
|
+
"--replace",
|
|
291
|
+
],
|
|
276
292
|
{ cwd: dir, timeout: KIT_TIMEOUTS.cliLong }
|
|
277
293
|
);
|
|
278
294
|
}
|