@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.
Files changed (48) hide show
  1. package/dist/scripts/index.cjs +40 -21
  2. package/dist/scripts/index.d.cts +1 -1
  3. package/dist/scripts/index.d.ts +1 -1
  4. package/dist/scripts/index.js +39 -21
  5. package/dist/scripts/lakebase/ci-resolve-branch.cli.cjs +2 -2
  6. package/dist/scripts/lakebase/ci-resolve-branch.cli.js +2 -2
  7. package/dist/scripts/lakebase/collapse-heads.cli.cjs +2 -2
  8. package/dist/scripts/lakebase/collapse-heads.cli.js +2 -2
  9. package/dist/scripts/lakebase/detect-language.cli.cjs +2 -2
  10. package/dist/scripts/lakebase/detect-language.cli.js +2 -2
  11. package/dist/scripts/lakebase/doctor.cli.cjs +2 -2
  12. package/dist/scripts/lakebase/doctor.cli.js +2 -2
  13. package/dist/scripts/lakebase/get-connection.cli.cjs +2 -2
  14. package/dist/scripts/lakebase/get-connection.cli.js +2 -2
  15. package/dist/scripts/lakebase/index.cjs +40 -21
  16. package/dist/scripts/lakebase/index.d.cts +13 -4
  17. package/dist/scripts/lakebase/index.d.ts +13 -4
  18. package/dist/scripts/lakebase/index.js +39 -21
  19. package/dist/scripts/lakebase/infra-runner.cli.cjs +2 -2
  20. package/dist/scripts/lakebase/infra-runner.cli.js +2 -2
  21. package/dist/scripts/lakebase/new-migration.cli.cjs +2 -2
  22. package/dist/scripts/lakebase/new-migration.cli.js +2 -2
  23. package/dist/scripts/lakebase/schema-diff.cli.cjs +2 -2
  24. package/dist/scripts/lakebase/schema-diff.cli.js +2 -2
  25. package/dist/scripts/lakebase/schema-migrate.cli.cjs +2 -2
  26. package/dist/scripts/lakebase/schema-migrate.cli.js +2 -2
  27. package/dist/scripts/lakebase/scm-abandon-feature.cli.cjs +37 -22
  28. package/dist/scripts/lakebase/scm-abandon-feature.cli.js +34 -22
  29. package/dist/scripts/lakebase/scm-claim-feature.cli.cjs +2 -2
  30. package/dist/scripts/lakebase/scm-claim-feature.cli.js +2 -2
  31. package/dist/scripts/lakebase/scm-doctor.cli.cjs +36 -21
  32. package/dist/scripts/lakebase/scm-doctor.cli.js +36 -21
  33. package/dist/scripts/lakebase/scm-merge.cli.cjs +2 -2
  34. package/dist/scripts/lakebase/scm-merge.cli.js +2 -2
  35. package/dist/scripts/lakebase/scm-park-feature.cli.cjs +586 -0
  36. package/dist/scripts/lakebase/scm-park-feature.cli.d.cts +4 -0
  37. package/dist/scripts/lakebase/scm-park-feature.cli.d.ts +4 -0
  38. package/dist/scripts/lakebase/scm-park-feature.cli.js +546 -0
  39. package/dist/scripts/lakebase/scm-reconcile-tier.cli.cjs +2 -2
  40. package/dist/scripts/lakebase/scm-reconcile-tier.cli.js +2 -2
  41. package/dist/scripts/util/index.cjs +2 -2
  42. package/dist/scripts/util/index.js +2 -2
  43. package/package.json +2 -1
  44. package/scripts/lakebase/scm-abandon-feature.cli.ts +3 -3
  45. package/scripts/lakebase/scm-abandon-feature.ts +19 -83
  46. package/scripts/lakebase/scm-park-feature.cli.ts +150 -0
  47. package/scripts/lakebase/scm-park-feature.ts +71 -0
  48. 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.6".length > 0) {
88244
- cached = "0.3.6";
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
- var ScmAbandonError = class extends Error {
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 = "ScmAbandonError";
88902
+ this.name = "ScmReleaseError";
88900
88903
  }
88901
88904
  code;
88902
88905
  };
88903
- async function abandonFeatureBranch(args) {
88906
+ async function prepareClaimRelease(args, verb) {
88904
88907
  const current = readWorkflowState(args.projectDir);
88905
88908
  if (!current) {
88906
- throw new ScmAbandonError(
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 ScmAbandonError(
88913
- `abandon refuses state "${current.state}". Only feature-claimed is abandonable; later states must complete or be reverted via gh.`,
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 ScmAbandonError(
88919
- "feature-claimed row is missing required invariants. Cannot abandon safely; consider re-adopting state first.",
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 ScmAbandonError(
88927
- "Working tree has uncommitted changes; refusing to abandon (the branch delete would lose them). Commit / stash / discard first, or pass --force.",
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 delete may be skipped.`
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
- const del = await deletePairedBranch({
88949
- instance,
88950
- branch: current.branch,
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(args.projectDir, reset);
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.6".length > 0) {
9397
- cached = "0.3.6";
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
- var ScmAbandonError = class extends Error {
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 = "ScmAbandonError";
10055
+ this.name = "ScmReleaseError";
10053
10056
  }
10054
10057
  code;
10055
10058
  };
10056
- async function abandonFeatureBranch(args) {
10059
+ async function prepareClaimRelease(args, verb) {
10057
10060
  const current = readWorkflowState(args.projectDir);
10058
10061
  if (!current) {
10059
- throw new ScmAbandonError(
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 ScmAbandonError(
10066
- `abandon refuses state "${current.state}". Only feature-claimed is abandonable; later states must complete or be reverted via gh.`,
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 ScmAbandonError(
10072
- "feature-claimed row is missing required invariants. Cannot abandon safely; consider re-adopting state first.",
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 ScmAbandonError(
10080
- "Working tree has uncommitted changes; refusing to abandon (the branch delete would lose them). Commit / stash / discard first, or pass --force.",
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 delete may be skipped.`
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
- const del = await deletePairedBranch({
10102
- instance,
10103
- branch: current.branch,
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(args.projectDir, reset);
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.6".length > 0) {
88829
- cached = "0.3.6";
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.6".length > 0) {
9982
- cached = "0.3.6";
9981
+ if ("0.3.7".length > 0) {
9982
+ cached = "0.3.7";
9983
9983
  return cached;
9984
9984
  }
9985
9985
  cached = "unknown";