@databricks-solutions/lakebase-scm-utils 0.3.6 → 0.3.7
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/index.cjs +40 -21
- package/dist/scripts/index.d.cts +1 -1
- package/dist/scripts/index.d.ts +1 -1
- package/dist/scripts/index.js +39 -21
- package/dist/scripts/lakebase/ci-resolve-branch.cli.cjs +2 -2
- package/dist/scripts/lakebase/ci-resolve-branch.cli.js +2 -2
- package/dist/scripts/lakebase/collapse-heads.cli.cjs +2 -2
- package/dist/scripts/lakebase/collapse-heads.cli.js +2 -2
- package/dist/scripts/lakebase/detect-language.cli.cjs +2 -2
- package/dist/scripts/lakebase/detect-language.cli.js +2 -2
- package/dist/scripts/lakebase/doctor.cli.cjs +2 -2
- package/dist/scripts/lakebase/doctor.cli.js +2 -2
- package/dist/scripts/lakebase/get-connection.cli.cjs +2 -2
- package/dist/scripts/lakebase/get-connection.cli.js +2 -2
- package/dist/scripts/lakebase/index.cjs +40 -21
- package/dist/scripts/lakebase/index.d.cts +13 -4
- package/dist/scripts/lakebase/index.d.ts +13 -4
- package/dist/scripts/lakebase/index.js +39 -21
- package/dist/scripts/lakebase/infra-runner.cli.cjs +2 -2
- package/dist/scripts/lakebase/infra-runner.cli.js +2 -2
- package/dist/scripts/lakebase/new-migration.cli.cjs +2 -2
- package/dist/scripts/lakebase/new-migration.cli.js +2 -2
- package/dist/scripts/lakebase/schema-diff.cli.cjs +2 -2
- package/dist/scripts/lakebase/schema-diff.cli.js +2 -2
- package/dist/scripts/lakebase/schema-migrate.cli.cjs +2 -2
- package/dist/scripts/lakebase/schema-migrate.cli.js +2 -2
- package/dist/scripts/lakebase/scm-abandon-feature.cli.cjs +37 -22
- package/dist/scripts/lakebase/scm-abandon-feature.cli.js +34 -22
- package/dist/scripts/lakebase/scm-claim-feature.cli.cjs +2 -2
- package/dist/scripts/lakebase/scm-claim-feature.cli.js +2 -2
- package/dist/scripts/lakebase/scm-doctor.cli.cjs +36 -21
- package/dist/scripts/lakebase/scm-doctor.cli.js +36 -21
- package/dist/scripts/lakebase/scm-merge.cli.cjs +2 -2
- package/dist/scripts/lakebase/scm-merge.cli.js +2 -2
- package/dist/scripts/lakebase/scm-park-feature.cli.cjs +586 -0
- package/dist/scripts/lakebase/scm-park-feature.cli.d.cts +4 -0
- package/dist/scripts/lakebase/scm-park-feature.cli.d.ts +4 -0
- package/dist/scripts/lakebase/scm-park-feature.cli.js +546 -0
- package/dist/scripts/lakebase/scm-reconcile-tier.cli.cjs +2 -2
- package/dist/scripts/lakebase/scm-reconcile-tier.cli.js +2 -2
- package/dist/scripts/util/index.cjs +2 -2
- package/dist/scripts/util/index.js +2 -2
- package/package.json +2 -1
- package/scripts/lakebase/scm-abandon-feature.cli.ts +3 -3
- package/scripts/lakebase/scm-abandon-feature.ts +19 -83
- package/scripts/lakebase/scm-park-feature.cli.ts +150 -0
- package/scripts/lakebase/scm-park-feature.ts +71 -0
- package/scripts/lakebase/scm-release-claim.ts +146 -0
|
@@ -88240,8 +88240,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
88240
88240
|
var cached;
|
|
88241
88241
|
function substrateSelfVersion() {
|
|
88242
88242
|
if (cached !== void 0) return cached;
|
|
88243
|
-
if ("0.3.
|
|
88244
|
-
cached = "0.3.
|
|
88243
|
+
if ("0.3.7".length > 0) {
|
|
88244
|
+
cached = "0.3.7";
|
|
88245
88245
|
return cached;
|
|
88246
88246
|
}
|
|
88247
88247
|
cached = "unknown";
|
|
@@ -88892,44 +88892,46 @@ function parentForTopology(t2, defaultLeaf) {
|
|
|
88892
88892
|
|
|
88893
88893
|
// scripts/lakebase/scm-abandon-feature.ts
|
|
88894
88894
|
init_cjs_shims();
|
|
88895
|
-
|
|
88895
|
+
|
|
88896
|
+
// scripts/lakebase/scm-release-claim.ts
|
|
88897
|
+
init_cjs_shims();
|
|
88898
|
+
var ScmReleaseError = class extends Error {
|
|
88896
88899
|
constructor(message, code) {
|
|
88897
88900
|
super(message);
|
|
88898
88901
|
this.code = code;
|
|
88899
|
-
this.name = "
|
|
88902
|
+
this.name = "ScmReleaseError";
|
|
88900
88903
|
}
|
|
88901
88904
|
code;
|
|
88902
88905
|
};
|
|
88903
|
-
async function
|
|
88906
|
+
async function prepareClaimRelease(args, verb) {
|
|
88904
88907
|
const current = readWorkflowState(args.projectDir);
|
|
88905
88908
|
if (!current) {
|
|
88906
|
-
throw new
|
|
88909
|
+
throw new ScmReleaseError(
|
|
88907
88910
|
`No SCM workflow state found at ${args.projectDir}/.lakebase/workflow-state.json.`,
|
|
88908
88911
|
"no-state-file"
|
|
88909
88912
|
);
|
|
88910
88913
|
}
|
|
88911
88914
|
if (current.state !== "feature-claimed") {
|
|
88912
|
-
throw new
|
|
88913
|
-
|
|
88915
|
+
throw new ScmReleaseError(
|
|
88916
|
+
`${verb} refuses state "${current.state}". Only feature-claimed is ${verb}able; later states must complete or be reverted via gh.`,
|
|
88914
88917
|
"bad-precondition"
|
|
88915
88918
|
);
|
|
88916
88919
|
}
|
|
88917
88920
|
if (!current.feature_id || !current.branch || !current.parent_branch || !current.lakebase_branch_uid) {
|
|
88918
|
-
throw new
|
|
88919
|
-
|
|
88921
|
+
throw new ScmReleaseError(
|
|
88922
|
+
`feature-claimed row is missing required invariants. Cannot ${verb} safely; consider re-adopting state first.`,
|
|
88920
88923
|
"missing-claim-fields"
|
|
88921
88924
|
);
|
|
88922
88925
|
}
|
|
88923
88926
|
if (!args.force) {
|
|
88924
88927
|
const dirty = await isDirty({ cwd: args.projectDir });
|
|
88925
88928
|
if (dirty) {
|
|
88926
|
-
throw new
|
|
88927
|
-
|
|
88929
|
+
throw new ScmReleaseError(
|
|
88930
|
+
`Working tree has uncommitted changes; refusing to ${verb} (switching HEAD off the feature branch would strand them). Commit / stash / discard first, or pass --force.`,
|
|
88928
88931
|
"dirty-working-tree"
|
|
88929
88932
|
);
|
|
88930
88933
|
}
|
|
88931
88934
|
}
|
|
88932
|
-
const instance = args.instance ?? current.project_id;
|
|
88933
88935
|
const switchTo = args.switchTo ?? current.parent_branch;
|
|
88934
88936
|
const warnings = [];
|
|
88935
88937
|
const headBranch = await getCurrentBranch({ cwd: args.projectDir });
|
|
@@ -88941,16 +88943,13 @@ async function abandonFeatureBranch(args) {
|
|
|
88941
88943
|
});
|
|
88942
88944
|
} catch (err) {
|
|
88943
88945
|
warnings.push(
|
|
88944
|
-
`git checkout ${switchTo} failed: ${err instanceof Error ? err.message : String(err)}. Local branch
|
|
88946
|
+
`git checkout ${switchTo} failed: ${err instanceof Error ? err.message : String(err)}. Local branch state may be left on the feature branch.`
|
|
88945
88947
|
);
|
|
88946
88948
|
}
|
|
88947
88949
|
}
|
|
88948
|
-
|
|
88949
|
-
|
|
88950
|
-
|
|
88951
|
-
cwd: args.projectDir
|
|
88952
|
-
});
|
|
88953
|
-
warnings.push(...del.warnings);
|
|
88950
|
+
return { current, switchTo, warnings };
|
|
88951
|
+
}
|
|
88952
|
+
function resetToScaffoldComplete(projectDir, current) {
|
|
88954
88953
|
const reset = {
|
|
88955
88954
|
$schema: current.$schema,
|
|
88956
88955
|
version: 1,
|
|
@@ -88958,7 +88957,23 @@ async function abandonFeatureBranch(args) {
|
|
|
88958
88957
|
tier_topology: current.tier_topology,
|
|
88959
88958
|
project_id: current.project_id
|
|
88960
88959
|
};
|
|
88961
|
-
writeWorkflowState(
|
|
88960
|
+
writeWorkflowState(projectDir, reset);
|
|
88961
|
+
return reset;
|
|
88962
|
+
}
|
|
88963
|
+
|
|
88964
|
+
// scripts/lakebase/scm-abandon-feature.ts
|
|
88965
|
+
async function abandonFeatureBranch(args) {
|
|
88966
|
+
const { current, warnings } = await prepareClaimRelease(
|
|
88967
|
+
{ projectDir: args.projectDir, force: args.force, switchTo: args.switchTo },
|
|
88968
|
+
"abandon"
|
|
88969
|
+
);
|
|
88970
|
+
const del = await deletePairedBranch({
|
|
88971
|
+
instance: args.instance ?? current.project_id,
|
|
88972
|
+
branch: current.branch,
|
|
88973
|
+
cwd: args.projectDir
|
|
88974
|
+
});
|
|
88975
|
+
warnings.push(...del.warnings);
|
|
88976
|
+
const reset = resetToScaffoldComplete(args.projectDir, current);
|
|
88962
88977
|
return {
|
|
88963
88978
|
state: reset,
|
|
88964
88979
|
lakebaseDeleted: del.lakebaseDeleted,
|
|
@@ -9393,8 +9393,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
9393
9393
|
var cached;
|
|
9394
9394
|
function substrateSelfVersion() {
|
|
9395
9395
|
if (cached !== void 0) return cached;
|
|
9396
|
-
if ("0.3.
|
|
9397
|
-
cached = "0.3.
|
|
9396
|
+
if ("0.3.7".length > 0) {
|
|
9397
|
+
cached = "0.3.7";
|
|
9398
9398
|
return cached;
|
|
9399
9399
|
}
|
|
9400
9400
|
cached = "unknown";
|
|
@@ -10045,44 +10045,46 @@ function parentForTopology(t, defaultLeaf) {
|
|
|
10045
10045
|
|
|
10046
10046
|
// scripts/lakebase/scm-abandon-feature.ts
|
|
10047
10047
|
init_esm_shims();
|
|
10048
|
-
|
|
10048
|
+
|
|
10049
|
+
// scripts/lakebase/scm-release-claim.ts
|
|
10050
|
+
init_esm_shims();
|
|
10051
|
+
var ScmReleaseError = class extends Error {
|
|
10049
10052
|
constructor(message, code) {
|
|
10050
10053
|
super(message);
|
|
10051
10054
|
this.code = code;
|
|
10052
|
-
this.name = "
|
|
10055
|
+
this.name = "ScmReleaseError";
|
|
10053
10056
|
}
|
|
10054
10057
|
code;
|
|
10055
10058
|
};
|
|
10056
|
-
async function
|
|
10059
|
+
async function prepareClaimRelease(args, verb) {
|
|
10057
10060
|
const current = readWorkflowState(args.projectDir);
|
|
10058
10061
|
if (!current) {
|
|
10059
|
-
throw new
|
|
10062
|
+
throw new ScmReleaseError(
|
|
10060
10063
|
`No SCM workflow state found at ${args.projectDir}/.lakebase/workflow-state.json.`,
|
|
10061
10064
|
"no-state-file"
|
|
10062
10065
|
);
|
|
10063
10066
|
}
|
|
10064
10067
|
if (current.state !== "feature-claimed") {
|
|
10065
|
-
throw new
|
|
10066
|
-
|
|
10068
|
+
throw new ScmReleaseError(
|
|
10069
|
+
`${verb} refuses state "${current.state}". Only feature-claimed is ${verb}able; later states must complete or be reverted via gh.`,
|
|
10067
10070
|
"bad-precondition"
|
|
10068
10071
|
);
|
|
10069
10072
|
}
|
|
10070
10073
|
if (!current.feature_id || !current.branch || !current.parent_branch || !current.lakebase_branch_uid) {
|
|
10071
|
-
throw new
|
|
10072
|
-
|
|
10074
|
+
throw new ScmReleaseError(
|
|
10075
|
+
`feature-claimed row is missing required invariants. Cannot ${verb} safely; consider re-adopting state first.`,
|
|
10073
10076
|
"missing-claim-fields"
|
|
10074
10077
|
);
|
|
10075
10078
|
}
|
|
10076
10079
|
if (!args.force) {
|
|
10077
10080
|
const dirty = await isDirty({ cwd: args.projectDir });
|
|
10078
10081
|
if (dirty) {
|
|
10079
|
-
throw new
|
|
10080
|
-
|
|
10082
|
+
throw new ScmReleaseError(
|
|
10083
|
+
`Working tree has uncommitted changes; refusing to ${verb} (switching HEAD off the feature branch would strand them). Commit / stash / discard first, or pass --force.`,
|
|
10081
10084
|
"dirty-working-tree"
|
|
10082
10085
|
);
|
|
10083
10086
|
}
|
|
10084
10087
|
}
|
|
10085
|
-
const instance = args.instance ?? current.project_id;
|
|
10086
10088
|
const switchTo = args.switchTo ?? current.parent_branch;
|
|
10087
10089
|
const warnings = [];
|
|
10088
10090
|
const headBranch = await getCurrentBranch({ cwd: args.projectDir });
|
|
@@ -10094,16 +10096,13 @@ async function abandonFeatureBranch(args) {
|
|
|
10094
10096
|
});
|
|
10095
10097
|
} catch (err) {
|
|
10096
10098
|
warnings.push(
|
|
10097
|
-
`git checkout ${switchTo} failed: ${err instanceof Error ? err.message : String(err)}. Local branch
|
|
10099
|
+
`git checkout ${switchTo} failed: ${err instanceof Error ? err.message : String(err)}. Local branch state may be left on the feature branch.`
|
|
10098
10100
|
);
|
|
10099
10101
|
}
|
|
10100
10102
|
}
|
|
10101
|
-
|
|
10102
|
-
|
|
10103
|
-
|
|
10104
|
-
cwd: args.projectDir
|
|
10105
|
-
});
|
|
10106
|
-
warnings.push(...del.warnings);
|
|
10103
|
+
return { current, switchTo, warnings };
|
|
10104
|
+
}
|
|
10105
|
+
function resetToScaffoldComplete(projectDir, current) {
|
|
10107
10106
|
const reset = {
|
|
10108
10107
|
$schema: current.$schema,
|
|
10109
10108
|
version: 1,
|
|
@@ -10111,7 +10110,23 @@ async function abandonFeatureBranch(args) {
|
|
|
10111
10110
|
tier_topology: current.tier_topology,
|
|
10112
10111
|
project_id: current.project_id
|
|
10113
10112
|
};
|
|
10114
|
-
writeWorkflowState(
|
|
10113
|
+
writeWorkflowState(projectDir, reset);
|
|
10114
|
+
return reset;
|
|
10115
|
+
}
|
|
10116
|
+
|
|
10117
|
+
// scripts/lakebase/scm-abandon-feature.ts
|
|
10118
|
+
async function abandonFeatureBranch(args) {
|
|
10119
|
+
const { current, warnings } = await prepareClaimRelease(
|
|
10120
|
+
{ projectDir: args.projectDir, force: args.force, switchTo: args.switchTo },
|
|
10121
|
+
"abandon"
|
|
10122
|
+
);
|
|
10123
|
+
const del = await deletePairedBranch({
|
|
10124
|
+
instance: args.instance ?? current.project_id,
|
|
10125
|
+
branch: current.branch,
|
|
10126
|
+
cwd: args.projectDir
|
|
10127
|
+
});
|
|
10128
|
+
warnings.push(...del.warnings);
|
|
10129
|
+
const reset = resetToScaffoldComplete(args.projectDir, current);
|
|
10115
10130
|
return {
|
|
10116
10131
|
state: reset,
|
|
10117
10132
|
lakebaseDeleted: del.lakebaseDeleted,
|
|
@@ -88825,8 +88825,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
88825
88825
|
var cached;
|
|
88826
88826
|
function substrateSelfVersion() {
|
|
88827
88827
|
if (cached !== void 0) return cached;
|
|
88828
|
-
if ("0.3.
|
|
88829
|
-
cached = "0.3.
|
|
88828
|
+
if ("0.3.7".length > 0) {
|
|
88829
|
+
cached = "0.3.7";
|
|
88830
88830
|
return cached;
|
|
88831
88831
|
}
|
|
88832
88832
|
cached = "unknown";
|
|
@@ -9978,8 +9978,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
|
|
|
9978
9978
|
var cached;
|
|
9979
9979
|
function substrateSelfVersion() {
|
|
9980
9980
|
if (cached !== void 0) return cached;
|
|
9981
|
-
if ("0.3.
|
|
9982
|
-
cached = "0.3.
|
|
9981
|
+
if ("0.3.7".length > 0) {
|
|
9982
|
+
cached = "0.3.7";
|
|
9983
9983
|
return cached;
|
|
9984
9984
|
}
|
|
9985
9985
|
cached = "unknown";
|