Skip to content

Add lifecycle.depends_on to order resources without references - #7120

Open
denik wants to merge 11 commits into
mainfrom
denik/depends-on
Open

denik wants to merge 11 commits into
mainfrom
denik/depends-on

Conversation

@denik

@denik denik commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Changes

Add lifecycle.depends_on, a list of - node: <key> entries (foo or jobs.foo) that orders a resource after the listed ones on deploy and before them on destroy. Edges are saved in state like reference-derived ones, including by bundle migrate. A target that is skipped from the plan is ignored.

Builds on #7128 (Resources.ResolveKey). Used by #7132 to replace the references injected for implicit schema/catalog dependencies.

Tests

Acceptance tests for ordering, validation errors, and a config with depends_on migrating from Terraform.

This pull request and its description were written by Isaac.

@github-actions github-actions Bot added the DABs DABs related issues label Oct 20, 2026
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Commit: 9f38d4aa7 | Workflow run

Regression test report

Selected 4 changed tests (limit=20, 0 not selected)

7 tests: regression=7 unreleased=0 coverage=0 failing=0

test branch main (b158966) latest (v1.21.0)
TestAccept/bundle/lifecycle/depends-on-validation/DMS= ✅ ❌ ❌
TestAccept/bundle/lifecycle/depends-on-validation/DMS=true ✅ ❌ ❌
TestAccept/bundle/lifecycle/depends-on/DMS= ✅ ❌ ❌
TestAccept/bundle/lifecycle/depends-on/DMS=true ✅ ❌ ❌
TestAccept/bundle/migrate/auto/depends-on/DMS= ✅ ❌ ❌
TestAccept/bundle/refschema/DMS= ✅ ❌ ❌
TestAccept/bundle/refschema/DMS=true ✅ ❌ ❌
TestAccept/bundle/lifecycle/depends-on-validation/DMS=: branch ✅ | main (b158966) ❌ | latest (v1.21.0) ❌

main (b158966):

acceptance_test.go:1307: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1307
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1077
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:655
        	Error:      	Not equal: 
        	            	expected: "Error: invalid lifecycle.depends_on: resource \"a_job\" cannot depend on itself\n  at resources.jobs.a_job.lifecycle.depends_on[0].node\n  in databricks.yml:10:13\n\nError: invalid lifecycle.depends_on: no such resource: missing\n  at resources.jobs.a_job.lifecycle.depends_on[1].node\n  in databricks.yml:11:13\n\nError: invalid lifecycle.depends_on: no such resource: a.b.c\n  at resources.jobs.b_job.lifecycle.depends_on[0].node\n  in databricks.yml:16:13\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 3 errors\n"
        	            	actual  : "Warning: unknown field: depends_on\n  at resources.jobs.a_job.lifecycle\n  in databricks.yml:9:9\n\nWarning: unknown field: depends_on\n  at resources.jobs.b_job.lifecycle\n  in databricks.yml:15:9\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 2 warnings\n\nUnexpected success\n\nExit code: 1\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1,12 +1,8 @@
        	            	-Error: invalid lifecycle.depends_on: resource "a_job" cannot depend on itself
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[0].node
        	            	-  in databricks.yml:10:13
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.a_job.lifecycle
        	            	+  in databricks.yml:9:9
        	            	 
        	            	-Error: invalid lifecycle.depends_on: no such resource: missing
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[1].node
        	            	-  in databricks.yml:11:13
        	            	-
        	            	-Error: invalid lifecycle.depends_on: no such resource: a.b.c
        	            	-  at resources.jobs.b_job.lifecycle.depends_on[0].node
        	            	-  in databricks.yml:16:13
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.b_job.lifecycle
        	            	+  in databricks.yml:15:9
        	            	 
        	            	@@ -18,3 +14,7 @@
        	            	 
        	            	-Found 3 errors
        	            	+Found 2 warnings
        	            	 
        	            	+Unexpected success
        	            	+
        	            	+Exit code: 1
        	            	+
        	Test:       	TestAccept/bundle/lifecycle/depends-on-validation/DMS=
        	Messages:   	bundle/lifecycle/depends-on-validation/output.txt vs /tmp/TestAcceptbundlelifecycledepends-on-validationDMS=1772171345/002/output.txt

latest (v1.21.0):

acceptance_test.go:1307: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1307
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1077
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:655
        	Error:      	Not equal: 
        	            	expected: "Error: invalid lifecycle.depends_on: resource \"a_job\" cannot depend on itself\n  at resources.jobs.a_job.lifecycle.depends_on[0].node\n  in databricks.yml:10:13\n\nError: invalid lifecycle.depends_on: no such resource: missing\n  at resources.jobs.a_job.lifecycle.depends_on[1].node\n  in databricks.yml:11:13\n\nError: invalid lifecycle.depends_on: no such resource: a.b.c\n  at resources.jobs.b_job.lifecycle.depends_on[0].node\n  in databricks.yml:16:13\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 3 errors\n"
        	            	actual  : "Warning: unknown field: depends_on\n  at resources.jobs.a_job.lifecycle\n  in databricks.yml:9:9\n\nWarning: unknown field: depends_on\n  at resources.jobs.b_job.lifecycle\n  in databricks.yml:15:9\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 2 warnings\n\nUnexpected success\n\nExit code: 1\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1,12 +1,8 @@
        	            	-Error: invalid lifecycle.depends_on: resource "a_job" cannot depend on itself
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[0].node
        	            	-  in databricks.yml:10:13
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.a_job.lifecycle
        	            	+  in databricks.yml:9:9
        	            	 
        	            	-Error: invalid lifecycle.depends_on: no such resource: missing
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[1].node
        	            	-  in databricks.yml:11:13
        	            	-
        	            	-Error: invalid lifecycle.depends_on: no such resource: a.b.c
        	            	-  at resources.jobs.b_job.lifecycle.depends_on[0].node
        	            	-  in databricks.yml:16:13
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.b_job.lifecycle
        	            	+  in databricks.yml:15:9
        	            	 
        	            	@@ -18,3 +14,7 @@
        	            	 
        	            	-Found 3 errors
        	            	+Found 2 warnings
        	            	 
        	            	+Unexpected success
        	            	+
        	            	+Exit code: 1
        	            	+
        	Test:       	TestAccept/bundle/lifecycle/depends-on-validation/DMS=
        	Messages:   	bundle/lifecycle/depends-on-validation/output.txt vs /tmp/TestAcceptbundlelifecycledepends-on-validationDMS=3645753105/002/output.txt
TestAccept/bundle/lifecycle/depends-on-validation/DMS=true: branch ✅ | main (b158966) ❌ | latest (v1.21.0) ❌

main (b158966):

acceptance_test.go:1307: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1307
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1077
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:655
        	Error:      	Not equal: 
        	            	expected: "Error: invalid lifecycle.depends_on: resource \"a_job\" cannot depend on itself\n  at resources.jobs.a_job.lifecycle.depends_on[0].node\n  in databricks.yml:10:13\n\nError: invalid lifecycle.depends_on: no such resource: missing\n  at resources.jobs.a_job.lifecycle.depends_on[1].node\n  in databricks.yml:11:13\n\nError: invalid lifecycle.depends_on: no such resource: a.b.c\n  at resources.jobs.b_job.lifecycle.depends_on[0].node\n  in databricks.yml:16:13\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 3 errors\n"
        	            	actual  : "Warning: unknown field: depends_on\n  at resources.jobs.a_job.lifecycle\n  in databricks.yml:9:9\n\nWarning: unknown field: depends_on\n  at resources.jobs.b_job.lifecycle\n  in databricks.yml:15:9\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 2 warnings\n\nUnexpected success\n\nExit code: 1\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1,12 +1,8 @@
        	            	-Error: invalid lifecycle.depends_on: resource "a_job" cannot depend on itself
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[0].node
        	            	-  in databricks.yml:10:13
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.a_job.lifecycle
        	            	+  in databricks.yml:9:9
        	            	 
        	            	-Error: invalid lifecycle.depends_on: no such resource: missing
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[1].node
        	            	-  in databricks.yml:11:13
        	            	-
        	            	-Error: invalid lifecycle.depends_on: no such resource: a.b.c
        	            	-  at resources.jobs.b_job.lifecycle.depends_on[0].node
        	            	-  in databricks.yml:16:13
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.b_job.lifecycle
        	            	+  in databricks.yml:15:9
        	            	 
        	            	@@ -18,3 +14,7 @@
        	            	 
        	            	-Found 3 errors
        	            	+Found 2 warnings
        	            	 
        	            	+Unexpected success
        	            	+
        	            	+Exit code: 1
        	            	+
        	Test:       	TestAccept/bundle/lifecycle/depends-on-validation/DMS=true
        	Messages:   	bundle/lifecycle/depends-on-validation/output.txt vs /tmp/TestAcceptbundlelifecycledepends-on-validationDMS=true3159890128/002/output.txt

latest (v1.21.0):

acceptance_test.go:1307: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1307
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1077
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:655
        	Error:      	Not equal: 
        	            	expected: "Error: invalid lifecycle.depends_on: resource \"a_job\" cannot depend on itself\n  at resources.jobs.a_job.lifecycle.depends_on[0].node\n  in databricks.yml:10:13\n\nError: invalid lifecycle.depends_on: no such resource: missing\n  at resources.jobs.a_job.lifecycle.depends_on[1].node\n  in databricks.yml:11:13\n\nError: invalid lifecycle.depends_on: no such resource: a.b.c\n  at resources.jobs.b_job.lifecycle.depends_on[0].node\n  in databricks.yml:16:13\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 3 errors\n"
        	            	actual  : "Warning: unknown field: depends_on\n  at resources.jobs.a_job.lifecycle\n  in databricks.yml:9:9\n\nWarning: unknown field: depends_on\n  at resources.jobs.b_job.lifecycle\n  in databricks.yml:15:9\n\nName: test-bundle\nTarget: default\nWorkspace:\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default\n\nFound 2 warnings\n\nUnexpected success\n\nExit code: 1\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1,12 +1,8 @@
        	            	-Error: invalid lifecycle.depends_on: resource "a_job" cannot depend on itself
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[0].node
        	            	-  in databricks.yml:10:13
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.a_job.lifecycle
        	            	+  in databricks.yml:9:9
        	            	 
        	            	-Error: invalid lifecycle.depends_on: no such resource: missing
        	            	-  at resources.jobs.a_job.lifecycle.depends_on[1].node
        	            	-  in databricks.yml:11:13
        	            	-
        	            	-Error: invalid lifecycle.depends_on: no such resource: a.b.c
        	            	-  at resources.jobs.b_job.lifecycle.depends_on[0].node
        	            	-  in databricks.yml:16:13
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.b_job.lifecycle
        	            	+  in databricks.yml:15:9
        	            	 
        	            	@@ -18,3 +14,7 @@
        	            	 
        	            	-Found 3 errors
        	            	+Found 2 warnings
        	            	 
        	            	+Unexpected success
        	            	+
        	            	+Exit code: 1
        	            	+
        	Test:       	TestAccept/bundle/lifecycle/depends-on-validation/DMS=true
        	Messages:   	bundle/lifecycle/depends-on-validation/output.txt vs /tmp/TestAcceptbundlelifecycledepends-on-validationDMS=true1503887204/002/output.txt
TestAccept/bundle/lifecycle/depends-on/DMS=: branch ✅ | main (b158966) ❌ | latest (v1.21.0) ❌

main (b158966):

acceptance_test.go:1307: Diff:
        --- bundle/lifecycle/depends-on/output.txt
        +++ /tmp/TestAcceptbundlelifecycledepends-onDMS=397819137/002/output.txt
        @@ -1,23 +1,22 @@
         
         === Plan records the edges
         >>> [CLI] bundle plan -o json
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         {
        -  "resources.jobs.a_job": [
        -    {
        -      "node": "resources.jobs.z_job",
        -      "label": "depends_on"
        -    },
        -    {
        -      "node": "resources.pipelines.z_pipeline",
        -      "label": "depends_on"
        -    }
        -  ],
        +  "resources.jobs.a_job": null,
           "resources.jobs.z_job": null,
           "resources.pipelines.z_pipeline": null
         }
         
         === Deploy creates dependencies first
         >>> [CLI] bundle deploy
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
         Created jobs.a_job
         Created jobs.z_job
        @@ -26,10 +18,18 @@
         Resources: 3 created, 0 changed, 0 deleted, 0 unchanged
         
         >>> print_requests.py //jobs //pipelines
        -POST /api/2.2/jobs/create a_job
        +POST /api/2.0/pipelines z_pipeline
         
        -=== Destroy deletes dependents first
        +=== Destroy deletes dependents firstWarning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
        +
         >>> [CLI] bundle destroy --auto-approve
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         The following resources will be deleted:
           delete resources.jobs.a_job
           delete resources.jobs.z_job

latest (v1.21.0):

acceptance_test.go:1307: Diff:
        --- bundle/lifecycle/depends-on/output.txt
        +++ /tmp/TestAcceptbundlelifecycledepends-onDMS=1430298889/002/output.txt
        @@ -1,23 +1,22 @@
         
         === Plan records the edges
         >>> [CLI] bundle plan -o json
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         {
        -  "resources.jobs.a_job": [
        -    {
        -      "node": "resources.jobs.z_job",
        -      "label": "depends_on"
        -    },
        -    {
        -      "node": "resources.pipelines.z_pipeline",
        -      "label": "depends_on"
        -    }
        -  ],
        +  "resources.jobs.a_job": null,
           "resources.jobs.z_job": null,
           "resources.pipelines.z_pipeline": null
         }
         
         === Deploy creates dependencies first
         >>> [CLI] bundle deploy
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
         Created jobs.a_job
         Created jobs.z_job
        @@ -26,10 +18,18 @@
         Resources: 3 created, 0 changed, 0 deleted, 0 unchanged
         
         >>> print_requests.py //jobs //pipelines
        -POST /api/2.2/jobs/create a_job
        +POST /api/2.2/jobs/create z_job
         
        -=== Destroy deletes dependents first
        +=== Destroy deletes dependents firstWarning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
        +
         >>> [CLI] bundle destroy --auto-approve
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         The following resources will be deleted:
           delete resources.jobs.a_job
           delete resources.jobs.z_job
TestAccept/bundle/lifecycle/depends-on/DMS=true: branch ✅ | main (b158966) ❌ | latest (v1.21.0) ❌

main (b158966):

acceptance_test.go:1307: Diff:
        --- bundle/lifecycle/depends-on/output.txt
        +++ /tmp/TestAcceptbundlelifecycledepends-onDMS=true1632812456/002/output.txt
        @@ -1,23 +1,22 @@
         
         === Plan records the edges
         >>> [CLI] bundle plan -o json
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         {
        -  "resources.jobs.a_job": [
        -    {
        -      "node": "resources.jobs.z_job",
        -      "label": "depends_on"
        -    },
        -    {
        -      "node": "resources.pipelines.z_pipeline",
        -      "label": "depends_on"
        -    }
        -  ],
        +  "resources.jobs.a_job": null,
           "resources.jobs.z_job": null,
           "resources.pipelines.z_pipeline": null
         }
         
         === Deploy creates dependencies first
         >>> [CLI] bundle deploy
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
         Created jobs.a_job
         Created jobs.z_job
        @@ -26,10 +18,18 @@
         Resources: 3 created, 0 changed, 0 deleted, 0 unchanged
         
         >>> print_requests.py //jobs //pipelines
        -POST /api/2.2/jobs/create a_job
        +POST /api/2.0/pipelines z_pipeline
         
        -=== Destroy deletes dependents first
        +=== Destroy deletes dependents firstWarning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
        +
         >>> [CLI] bundle destroy --auto-approve
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         The following resources will be deleted:
           delete resources.jobs.a_job
           delete resources.jobs.z_job
        @@ -42,4 +40,5 @@
         All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
         
         Destroy: 3 deleted
        -a_job deleted first
        +
        +Exit code: 1

latest (v1.21.0):

acceptance_test.go:1307: Diff:
        --- bundle/lifecycle/depends-on/output.txt
        +++ /tmp/TestAcceptbundlelifecycledepends-onDMS=true3105230375/002/output.txt
        @@ -1,23 +1,22 @@
         
         === Plan records the edges
         >>> [CLI] bundle plan -o json
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         {
        -  "resources.jobs.a_job": [
        -    {
        -      "node": "resources.jobs.z_job",
        -      "label": "depends_on"
        -    },
        -    {
        -      "node": "resources.pipelines.z_pipeline",
        -      "label": "depends_on"
        -    }
        -  ],
        +  "resources.jobs.a_job": null,
           "resources.jobs.z_job": null,
           "resources.pipelines.z_pipeline": null
         }
         
         === Deploy creates dependencies first
         >>> [CLI] bundle deploy
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...
         Created jobs.a_job
         Created jobs.z_job
        @@ -28,8 +20,16 @@
         >>> print_requests.py //jobs //pipelines
         POST /api/2.2/jobs/create a_job
         
        -=== Destroy deletes dependents first
        +=== Destroy deletes dependents firstWarning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
        +
         >>> [CLI] bundle destroy --auto-approve
        +Warning: unknown field: depends_on
        +  at resources.jobs.a_job.lifecycle
        +  in databricks.yml:10:9
        +
         The following resources will be deleted:
           delete resources.jobs.a_job
           delete resources.jobs.z_job
        @@ -42,4 +41,5 @@
         All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/test-bundle/default
         
         Destroy: 3 deleted
        -a_job deleted first
        +
        +Exit code: 1
TestAccept/bundle/migrate/auto/depends-on/DMS=: branch ✅ | main (b158966) ❌ | latest (v1.21.0) ❌

main (b158966):

acceptance_test.go:1307: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1307
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1077
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:655
        	Error:      	Not equal: 
        	            	expected: "\n=== Replay a prior terraform deployment\n>>> replay_tfstate.py terraform-requests.json terraform.tfstate\n\n=== Deploy migrates to direct and honors lifecycle.depends_on\n>>> [CLI] bundle deploy\nNotice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...\nMigrated 1 resource to direct deployment engine.\nCreated jobs.other_job\nFiles: 1 uploaded, 0 deleted\nResources: 1 created, 0 changed, 0 deleted, 1 unchanged\n\n>>> print_migration_telemetry\ndirect_migrated_via_default true\n\n=== The edge is recorded in the plan\n>>> [CLI] bundle plan -o json\n{\n  \"resources.jobs.other_job\": [\n    {\n      \"node\": \"resources.jobs.test_job\",\n      \"label\": \"depends_on\"\n    }\n  ],\n  \"resources.jobs.test_job\": null\n}\n"
        	            	actual  : "\n=== Replay a prior terraform deployment\n>>> replay_tfstate.py terraform-requests.json terraform.tfstate\n\n=== Deploy migrates to direct and honors lifecycle.depends_on\n>>> [CLI] bundle deploy\nWarning: unknown field: depends_on\n  at resources.jobs.other_job.lifecycle\n  in databricks.yml:11:9\n\nNotice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...\nMigrated 1 resource to direct deployment engine.\nCreated jobs.other_job\nFiles: 1 uploaded, 0 deleted\nResources: 1 created, 0 changed, 0 deleted, 1 unchanged\n\n>>> print_migration_telemetry\ndirect_migrated_via_default true\n\n=== The edge is recorded in the plan\n>>> [CLI] bundle plan -o json\nWarning: unknown field: depends_on\n  at resources.jobs.other_job.lifecycle\n  in databricks.yml:11:9\n\n{\n  \"resources.jobs.other_job\": null,\n  \"resources.jobs.test_job\": null\n}\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -6,2 +6,6 @@
        	            	 >>> [CLI] bundle deploy
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.other_job.lifecycle
        	            	+  in databricks.yml:11:9
        	            	+
        	            	 Notice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).
        	            	@@ -18,9 +22,8 @@
        	            	 >>> [CLI] bundle plan -o json
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.other_job.lifecycle
        	            	+  in databricks.yml:11:9
        	            	+
        	            	 {
        	            	-  "resources.jobs.other_job": [
        	            	-    {
        	            	-      "node": "resources.jobs.test_job",
        	            	-      "label": "depends_on"
        	            	-    }
        	            	-  ],
        	            	+  "resources.jobs.other_job": null,
        	            	   "resources.jobs.test_job": null
        	Test:       	TestAccept/bundle/migrate/auto/depends-on/DMS=
        	Messages:   	bundle/migrate/auto/depends-on/output.txt vs /tmp/TestAcceptbundlemigrateautodepends-onDMS=4094872293/002/output.txt

latest (v1.21.0):

acceptance_test.go:1307: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1307
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1077
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:655
        	Error:      	Not equal: 
        	            	expected: "\n=== Replay a prior terraform deployment\n>>> replay_tfstate.py terraform-requests.json terraform.tfstate\n\n=== Deploy migrates to direct and honors lifecycle.depends_on\n>>> [CLI] bundle deploy\nNotice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...\nMigrated 1 resource to direct deployment engine.\nCreated jobs.other_job\nFiles: 1 uploaded, 0 deleted\nResources: 1 created, 0 changed, 0 deleted, 1 unchanged\n\n>>> print_migration_telemetry\ndirect_migrated_via_default true\n\n=== The edge is recorded in the plan\n>>> [CLI] bundle plan -o json\n{\n  \"resources.jobs.other_job\": [\n    {\n      \"node\": \"resources.jobs.test_job\",\n      \"label\": \"depends_on\"\n    }\n  ],\n  \"resources.jobs.test_job\": null\n}\n"
        	            	actual  : "\n=== Replay a prior terraform deployment\n>>> replay_tfstate.py terraform-requests.json terraform.tfstate\n\n=== Deploy migrates to direct and honors lifecycle.depends_on\n>>> [CLI] bundle deploy\nWarning: unknown field: depends_on\n  at resources.jobs.other_job.lifecycle\n  in databricks.yml:11:9\n\nNotice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).\nUploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files...\nMigrated 1 resource to direct deployment engine.\nCreated jobs.other_job\nFiles: 1 uploaded, 0 deleted\nResources: 1 created, 0 changed, 0 deleted, 1 unchanged\n\n>>> print_migration_telemetry\ndirect_migrated_via_default true\n\n=== The edge is recorded in the plan\n>>> [CLI] bundle plan -o json\nWarning: unknown field: depends_on\n  at resources.jobs.other_job.lifecycle\n  in databricks.yml:11:9\n\n{\n  \"resources.jobs.other_job\": null,\n  \"resources.jobs.test_job\": null\n}\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -6,2 +6,6 @@
        	            	 >>> [CLI] bundle deploy
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.other_job.lifecycle
        	            	+  in databricks.yml:11:9
        	            	+
        	            	 Notice: migrating your bundle to direct deployment engine (https://github.com/databricks/cli/issues/6765).
        	            	@@ -18,9 +22,8 @@
        	            	 >>> [CLI] bundle plan -o json
        	            	+Warning: unknown field: depends_on
        	            	+  at resources.jobs.other_job.lifecycle
        	            	+  in databricks.yml:11:9
        	            	+
        	            	 {
        	            	-  "resources.jobs.other_job": [
        	            	-    {
        	            	-      "node": "resources.jobs.test_job",
        	            	-      "label": "depends_on"
        	            	-    }
        	            	-  ],
        	            	+  "resources.jobs.other_job": null,
        	            	   "resources.jobs.test_job": null
        	Test:       	TestAccept/bundle/migrate/auto/depends-on/DMS=
        	Messages:   	bundle/migrate/auto/depends-on/output.txt vs /tmp/TestAcceptbundlemigrateautodepends-onDMS=435410360/002/output.txt
TestAccept/bundle/refschema/DMS=: branch ✅ | main (b158966) ❌ | latest (v1.21.0) ❌

main (b158966):

acceptance_test.go:1307: Diff:
        --- bundle/refschema/out.fields.txt
        +++ /tmp/TestAcceptbundlerefschemaDMS=916740887/001/out.fields.txt
        @@ -34,9 +34,6 @@
         resources.alerts.*.file_path	string	INPUT
         resources.alerts.*.id	string	ALL
         resources.alerts.*.lifecycle	resources.Lifecycle	INPUT
        -resources.alerts.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*].node	string	INPUT
         resources.alerts.*.lifecycle.prevent_destroy	bool	INPUT
         resources.alerts.*.lifecycle_state	sql.AlertLifecycleState	ALL
         resources.alerts.*.modified_status	string	INPUT
        @@ -158,9 +155,6 @@
         resources.apps.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.apps.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.apps.*.lifecycle	resources.Lifecycle	INPUT
        -resources.apps.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*].node	string	INPUT
         resources.apps.*.lifecycle.prevent_destroy	bool	INPUT
         resources.apps.*.lifecycle.started	*bool	ALL
         resources.apps.*.modified_status	string	INPUT
        @@ -280,9 +274,6 @@
         resources.catalogs.*.id	string	INPUT
         resources.catalogs.*.isolation_mode	catalog.CatalogIsolationMode	REMOTE
         resources.catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.catalogs.*.managed_encryption_settings	*catalog.EncryptionSettings	ALL
         resources.catalogs.*.managed_encryption_settings.azure_encryption_settings	*catalog.AzureEncryptionSettings	ALL
        @@ -340,9 +331,6 @@
         resources.cluster_policies.*.libraries[*].requirements	string	ALL
         resources.cluster_policies.*.libraries[*].whl	string	ALL
         resources.cluster_policies.*.lifecycle	resources.Lifecycle	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on[*].node	string	INPUT
         resources.cluster_policies.*.lifecycle.prevent_destroy	bool	INPUT
         resources.cluster_policies.*.max_clusters_per_user	int64	ALL
         resources.cluster_policies.*.modified_status	string	INPUT
        @@ -500,9 +488,6 @@
         resources.clusters.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.clusters.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.clusters.*.lifecycle	resources.Lifecycle	INPUT
        -resources.clusters.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.clusters.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.clusters.*.lifecycle.depends_on[*].node	string	INPUT
         resources.clusters.*.lifecycle.prevent_destroy	bool	INPUT
         resources.clusters.*.lifecycle.started	*bool	ALL
         resources.clusters.*.modified_status	string	INPUT
        @@ -669,9 +654,6 @@
         resources.dashboards.*.file_path	string	INPUT
         resources.dashboards.*.id	string	INPUT
         resources.dashboards.*.lifecycle	resources.Lifecycle	INPUT
        -resources.dashboards.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.dashboards.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.dashboards.*.lifecycle.depends_on[*].node	string	INPUT
         resources.dashboards.*.lifecycle.prevent_destroy	bool	INPUT
         resources.dashboards.*.lifecycle_state	dashboards.LifecycleState	ALL
         resources.dashboards.*.modified_status	string	INPUT
        @@ -693,9 +675,6 @@
         resources.database_catalogs.*.database_name	string	ALL
         resources.database_catalogs.*.id	string	INPUT
         resources.database_catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.database_catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.database_catalogs.*.modified_status	string	INPUT
         resources.database_catalogs.*.name	string	ALL
        @@ -730,9 +709,6 @@
         resources.database_instances.*.enable_readable_secondaries	bool	ALL
         resources.database_instances.*.id	string	INPUT
         resources.database_instances.*.lifecycle	resources.Lifecycle	INPUT
        -resources.database_instances.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.database_instances.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.database_instances.*.lifecycle.depends_on[*].node	string	INPUT
         resources.database_instances.*.lifecycle.prevent_destroy	bool	INPUT
         resources.database_instances.*.modified_status	string	INPUT
         resources.database_instances.*.name	string	ALL
        @@ -764,9 +740,6 @@
         resources.experiments.*.id	string	INPUT
         resources.experiments.*.last_update_time	int64	REMOTE
         resources.experiments.*.lifecycle	resources.Lifecycle	INPUT
        -resources.experiments.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.experiments.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.experiments.*.lifecycle.depends_on[*].node	string	INPUT
         resources.experiments.*.lifecycle.prevent_destroy	bool	INPUT
         resources.experiments.*.lifecycle_stage	string	REMOTE
         resources.experiments.*.modified_status	string	INPUT
        @@ -850,9 +823,6 @@
         resources.external_locations.*.id	string	INPUT
         resources.external_locations.*.isolation_mode	catalog.IsolationMode	REMOTE
         resources.external_locations.*.lifecycle	resources.Lifecycle	INPUT
        -resources.external_locations.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.external_locations.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.external_locations.*.lifecycle.depends_on[*].node	string	INPUT
         resources.external_locations.*.lifecycle.prevent_destroy	bool	INPUT
         resources.external_locations.*.metastore_id	string	REMOTE
         resources.external_locations.*.modified_status	string	INPUT
        @@ -874,9 +844,6 @@
         resources.genie_spaces.*.file_path	string	INPUT
         resources.genie_spaces.*.id	string	INPUT
         resources.genie_spaces.*.lifecycle	resources.Lifecycle	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on[*].node	string	INPUT
         resources.genie_spaces.*.lifecycle.prevent_destroy	bool	INPUT
         resources.genie_spaces.*.modified_status	string	INPUT
         resources.genie_spaces.*.parent_path	string	ALL
        @@ -921,9 +888,6 @@
         resources.instance_pools.*.instance_pool_id	string	REMOTE
         resources.instance_pools.*.instance_pool_name	string	ALL
         resources.instance_pools.*.lifecycle	resources.Lifecycle	INPUT
        -resources.instance_pools.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.instance_pools.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.instance_pools.*.lifecycle.depends_on[*].node	string	INPUT
         resources.instance_pools.*.lifecycle.prevent_destroy	bool	INPUT
         resources.instance_pools.*.max_capacity	int	ALL
         resources.instance_pools.*.min_idle_instances	int	ALL
        @@ -984,9 +948,6 @@
         resources.job_runs.*.lifecycle	*dresources.JobRunLifecycleState	STATE
         resources.job_runs.*.lifecycle	*resources.JobRunLifecycle	INPUT
         resources.job_runs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.job_runs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.job_runs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.job_runs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.job_runs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.job_runs.*.lifecycle.triggers	[]resources.JobRunTrigger	INPUT
         resources.job_runs.*.lifecycle.triggers[*]	resources.JobRunTrigger	INPUT
        @@ -1232,9 +1193,6 @@
         resources.jobs.*.job_clusters[*].serverless_compute_id	string	ALL
         resources.jobs.*.job_id	int64	REMOTE
         resources.jobs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.jobs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.jobs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.jobs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.jobs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.jobs.*.max_concurrent_runs	int	ALL
         resources.jobs.*.modified_status	string	INPUT
        @@ -2211,9 +2169,6 @@
         resources.mcp_services.*.config.source_connection.options.*	string	ALL
         resources.mcp_services.*.id	string	INPUT
         resources.mcp_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.mcp_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.mcp_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.mcp_services.*.lifecycle.depends_on[*].node	string	INPUT
         resources.mcp_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.mcp_services.*.mcp_service_id	string	ALL
         resources.mcp_services.*.modified_status	string	INPUT
        @@ -2346,9 +2301,6 @@
         resources.model_provider_services.*.config.targets[*].native_api_types[*]	string	ALL
         resources.model_provider_services.*.id	string	INPUT
         resources.model_provider_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on[*].node	string	INPUT
         resources.model_provider_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_provider_services.*.model_provider_service_id	string	ALL
         resources.model_provider_services.*.modified_status	string	INPUT
        @@ -2414,9 +2366,6 @@
         resources.model_services.*.config.routing.fallback.destinations[*].traffic_percentage	int	ALL
         resources.model_services.*.id	string	INPUT
         resources.model_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_services.*.lifecycle.depends_on[*].node	string	INPUT
         resources.model_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_services.*.model_service_id	string	ALL
         resources.model_services.*.modified_status	string	INPUT
        @@ -2891,9 +2840,6 @@
         resources.model_serving_endpoints.*.endpoint_id	string	REMOTE
         resources.model_serving_endpoints.*.id	string	INPUT
         resources.model_serving_endpoints.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on[*].node	string	INPUT
         resources.model_serving_endpoints.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_serving_endpoints.*.modified_status	string	INPUT
         resources.model_serving_endpoints.*.name	string	ALL
        @@ -2949,9 +2895,6 @@
         resources.models.*.latest_versions[*].user_id	string	REMOTE
         resources.models.*.latest_versions[*].version	string	REMOTE
         resources.models.*.lifecycle	resources.Lifecycle	INPUT
        -resources.models.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.models.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.models.*.lifecycle.depends_on[*].node	string	INPUT
         resources.models.*.lifecycle.prevent_destroy	bool	INPUT
         resources.models.*.model_id	string	REMOTE
         resources.models.*.modified_status	string	INPUT
        @@ -3762,9 +3705,6 @@
         resources.pipelines.*.libraries[*].notebook.path	string	ALL
         resources.pipelines.*.libraries[*].whl	string	ALL
         resources.pipelines.*.lifecycle	resources.Lifecycle	INPUT
        -resources.pipelines.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.pipelines.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.pipelines.*.lifecycle.depends_on[*].node	string	INPUT
... (184 more lines truncated, raise DATABRICKS_CLI_TEST_MAX_LOG to see more)

latest (v1.21.0):

acceptance_test.go:1307: Diff:
        --- bundle/refschema/out.fields.txt
        +++ /tmp/TestAcceptbundlerefschemaDMS=36137055/001/out.fields.txt
        @@ -34,9 +34,6 @@
         resources.alerts.*.file_path	string	INPUT
         resources.alerts.*.id	string	ALL
         resources.alerts.*.lifecycle	resources.Lifecycle	INPUT
        -resources.alerts.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*].node	string	INPUT
         resources.alerts.*.lifecycle.prevent_destroy	bool	INPUT
         resources.alerts.*.lifecycle_state	sql.AlertLifecycleState	ALL
         resources.alerts.*.modified_status	string	INPUT
        @@ -158,9 +155,6 @@
         resources.apps.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.apps.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.apps.*.lifecycle	resources.Lifecycle	INPUT
        -resources.apps.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*].node	string	INPUT
         resources.apps.*.lifecycle.prevent_destroy	bool	INPUT
         resources.apps.*.lifecycle.started	*bool	ALL
         resources.apps.*.modified_status	string	INPUT
        @@ -280,9 +274,6 @@
         resources.catalogs.*.id	string	INPUT
         resources.catalogs.*.isolation_mode	catalog.CatalogIsolationMode	REMOTE
         resources.catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.catalogs.*.managed_encryption_settings	*catalog.EncryptionSettings	ALL
         resources.catalogs.*.managed_encryption_settings.azure_encryption_settings	*catalog.AzureEncryptionSettings	ALL
        @@ -340,9 +331,6 @@
         resources.cluster_policies.*.libraries[*].requirements	string	ALL
         resources.cluster_policies.*.libraries[*].whl	string	ALL
         resources.cluster_policies.*.lifecycle	resources.Lifecycle	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.cluster_policies.*.lifecycle.depends_on[*].node	string	INPUT
         resources.cluster_policies.*.lifecycle.prevent_destroy	bool	INPUT
         resources.cluster_policies.*.max_clusters_per_user	int64	ALL
         resources.cluster_policies.*.modified_status	string	INPUT
        @@ -500,9 +488,6 @@
         resources.clusters.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.clusters.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.clusters.*.lifecycle	resources.Lifecycle	INPUT
        -resources.clusters.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.clusters.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.clusters.*.lifecycle.depends_on[*].node	string	INPUT
         resources.clusters.*.lifecycle.prevent_destroy	bool	INPUT
         resources.clusters.*.lifecycle.started	*bool	ALL
         resources.clusters.*.modified_status	string	INPUT
        @@ -669,9 +654,6 @@
         resources.dashboards.*.file_path	string	INPUT
         resources.dashboards.*.id	string	INPUT
         resources.dashboards.*.lifecycle	resources.Lifecycle	INPUT
        -resources.dashboards.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.dashboards.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.dashboards.*.lifecycle.depends_on[*].node	string	INPUT
         resources.dashboards.*.lifecycle.prevent_destroy	bool	INPUT
         resources.dashboards.*.lifecycle_state	dashboards.LifecycleState	ALL
         resources.dashboards.*.modified_status	string	INPUT
        @@ -693,9 +675,6 @@
         resources.database_catalogs.*.database_name	string	ALL
         resources.database_catalogs.*.id	string	INPUT
         resources.database_catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.database_catalogs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.database_catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.database_catalogs.*.modified_status	string	INPUT
         resources.database_catalogs.*.name	string	ALL
        @@ -730,9 +709,6 @@
         resources.database_instances.*.enable_readable_secondaries	bool	ALL
         resources.database_instances.*.id	string	INPUT
         resources.database_instances.*.lifecycle	resources.Lifecycle	INPUT
        -resources.database_instances.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.database_instances.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.database_instances.*.lifecycle.depends_on[*].node	string	INPUT
         resources.database_instances.*.lifecycle.prevent_destroy	bool	INPUT
         resources.database_instances.*.modified_status	string	INPUT
         resources.database_instances.*.name	string	ALL
        @@ -764,9 +740,6 @@
         resources.experiments.*.id	string	INPUT
         resources.experiments.*.last_update_time	int64	REMOTE
         resources.experiments.*.lifecycle	resources.Lifecycle	INPUT
        -resources.experiments.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.experiments.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.experiments.*.lifecycle.depends_on[*].node	string	INPUT
         resources.experiments.*.lifecycle.prevent_destroy	bool	INPUT
         resources.experiments.*.lifecycle_stage	string	REMOTE
         resources.experiments.*.modified_status	string	INPUT
        @@ -850,9 +823,6 @@
         resources.external_locations.*.id	string	INPUT
         resources.external_locations.*.isolation_mode	catalog.IsolationMode	REMOTE
         resources.external_locations.*.lifecycle	resources.Lifecycle	INPUT
        -resources.external_locations.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.external_locations.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.external_locations.*.lifecycle.depends_on[*].node	string	INPUT
         resources.external_locations.*.lifecycle.prevent_destroy	bool	INPUT
         resources.external_locations.*.metastore_id	string	REMOTE
         resources.external_locations.*.modified_status	string	INPUT
        @@ -874,9 +844,6 @@
         resources.genie_spaces.*.file_path	string	INPUT
         resources.genie_spaces.*.id	string	INPUT
         resources.genie_spaces.*.lifecycle	resources.Lifecycle	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.genie_spaces.*.lifecycle.depends_on[*].node	string	INPUT
         resources.genie_spaces.*.lifecycle.prevent_destroy	bool	INPUT
         resources.genie_spaces.*.modified_status	string	INPUT
         resources.genie_spaces.*.parent_path	string	ALL
        @@ -921,9 +888,6 @@
         resources.instance_pools.*.instance_pool_id	string	REMOTE
         resources.instance_pools.*.instance_pool_name	string	ALL
         resources.instance_pools.*.lifecycle	resources.Lifecycle	INPUT
        -resources.instance_pools.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.instance_pools.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.instance_pools.*.lifecycle.depends_on[*].node	string	INPUT
         resources.instance_pools.*.lifecycle.prevent_destroy	bool	INPUT
         resources.instance_pools.*.max_capacity	int	ALL
         resources.instance_pools.*.min_idle_instances	int	ALL
        @@ -984,9 +948,6 @@
         resources.job_runs.*.lifecycle	*dresources.JobRunLifecycleState	STATE
         resources.job_runs.*.lifecycle	*resources.JobRunLifecycle	INPUT
         resources.job_runs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.job_runs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.job_runs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.job_runs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.job_runs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.job_runs.*.lifecycle.triggers	[]resources.JobRunTrigger	INPUT
         resources.job_runs.*.lifecycle.triggers[*]	resources.JobRunTrigger	INPUT
        @@ -1232,9 +1193,6 @@
         resources.jobs.*.job_clusters[*].serverless_compute_id	string	ALL
         resources.jobs.*.job_id	int64	REMOTE
         resources.jobs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.jobs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.jobs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.jobs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.jobs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.jobs.*.max_concurrent_runs	int	ALL
         resources.jobs.*.modified_status	string	INPUT
        @@ -2211,9 +2169,6 @@
         resources.mcp_services.*.config.source_connection.options.*	string	ALL
         resources.mcp_services.*.id	string	INPUT
         resources.mcp_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.mcp_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.mcp_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.mcp_services.*.lifecycle.depends_on[*].node	string	INPUT
         resources.mcp_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.mcp_services.*.mcp_service_id	string	ALL
         resources.mcp_services.*.modified_status	string	INPUT
        @@ -2346,9 +2301,6 @@
         resources.model_provider_services.*.config.targets[*].native_api_types[*]	string	ALL
         resources.model_provider_services.*.id	string	INPUT
         resources.model_provider_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_provider_services.*.lifecycle.depends_on[*].node	string	INPUT
         resources.model_provider_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_provider_services.*.model_provider_service_id	string	ALL
         resources.model_provider_services.*.modified_status	string	INPUT
        @@ -2414,9 +2366,6 @@
         resources.model_services.*.config.routing.fallback.destinations[*].traffic_percentage	int	ALL
         resources.model_services.*.id	string	INPUT
         resources.model_services.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_services.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_services.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_services.*.lifecycle.depends_on[*].node	string	INPUT
         resources.model_services.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_services.*.model_service_id	string	ALL
         resources.model_services.*.modified_status	string	INPUT
        @@ -2891,9 +2840,6 @@
         resources.model_serving_endpoints.*.endpoint_id	string	REMOTE
         resources.model_serving_endpoints.*.id	string	INPUT
         resources.model_serving_endpoints.*.lifecycle	resources.Lifecycle	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.model_serving_endpoints.*.lifecycle.depends_on[*].node	string	INPUT
         resources.model_serving_endpoints.*.lifecycle.prevent_destroy	bool	INPUT
         resources.model_serving_endpoints.*.modified_status	string	INPUT
         resources.model_serving_endpoints.*.name	string	ALL
        @@ -2949,9 +2895,6 @@
         resources.models.*.latest_versions[*].user_id	string	REMOTE
         resources.models.*.latest_versions[*].version	string	REMOTE
         resources.models.*.lifecycle	resources.Lifecycle	INPUT
        -resources.models.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.models.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.models.*.lifecycle.depends_on[*].node	string	INPUT
         resources.models.*.lifecycle.prevent_destroy	bool	INPUT
         resources.models.*.model_id	string	REMOTE
         resources.models.*.modified_status	string	INPUT
        @@ -3762,9 +3705,6 @@
         resources.pipelines.*.libraries[*].notebook.path	string	ALL
         resources.pipelines.*.libraries[*].whl	string	ALL
         resources.pipelines.*.lifecycle	resources.Lifecycle	INPUT
        -resources.pipelines.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.pipelines.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.pipelines.*.lifecycle.depends_on[*].node	string	INPUT
... (184 more lines truncated, raise DATABRICKS_CLI_TEST_MAX_LOG to see more)
TestAccept/bundle/refschema/DMS=true: branch ✅ | main (b158966) ❌ | latest (v1.21.0) ❌

main (b158966):

acceptance_test.go:1307: Diff:
        --- bundle/refschema/out.fields.txt
        +++ /tmp/TestAcceptbundlerefschemaDMS=true973501474/001/out.fields.txt
        @@ -34,9 +34,6 @@
         resources.alerts.*.file_path	string	INPUT
         resources.alerts.*.id	string	ALL
         resources.alerts.*.lifecycle	resources.Lifecycle	INPUT
        -resources.alerts.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.alerts.*.lifecycle.depends_on[*].node	string	INPUT
         resources.alerts.*.lifecycle.prevent_destroy	bool	INPUT
         resources.alerts.*.lifecycle_state	sql.AlertLifecycleState	ALL
         resources.alerts.*.modified_status	string	INPUT
        @@ -158,9 +155,6 @@
         resources.apps.*.lifecycle	*dresources.StateLifecycle	REMOTE	STATE
         resources.apps.*.lifecycle	*resources.LifecycleWithStarted	INPUT
         resources.apps.*.lifecycle	resources.Lifecycle	INPUT
        -resources.apps.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.apps.*.lifecycle.depends_on[*].node	string	INPUT
         resources.apps.*.lifecycle.prevent_destroy	bool	INPUT
         resources.apps.*.lifecycle.started	*bool	ALL
         resources.apps.*.modified_status	string	INPUT
        @@ -280,9 +274,6 @@
         resources.catalogs.*.id	string	INPUT
         resources.catalogs.*.isolation_mode	catalog.CatalogIsolationMode	REMOTE
         resources.catalogs.*.lifecycle	resources.Lifecycle	INPUT
        -resources.catalogs.*.lifecycle.depends_on	[]resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*]	resources.DependsOn	INPUT
        -resources.catalogs.*.lifecycle.depends_on[*].node	string	INPUT
         resources.catalogs.*.lifecycle.prevent_destroy	bool	INPUT
         resources.catalogs.*.managed_encryption_settings	*catalog.EncryptionSettings	ALL
         resources.catalogs.*.managed_encryption_settings.azure_enc

_Report truncated, see the full report in the [run](https://github.com/databricks/cli/actions/runs/39434304325)._

@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 9f38d4a

Run: 39434428143

Env ✅​pass 🙈​skip Time
✅​ aws linux-2core-8gb 280 19 4:30
✅​ aws-windows-latest-4core-16gb 282 17 5:17
✅​ azure linux-2core-8gb 279 19 4:23
✅​ azure-windows-latest-4core-16gb 281 17 5:01
✅​ gcp linux-2core-8gb 280 19 4:21
✅​ gcp-windows-latest-4core-16gb 282 17 3:39
Top 3 slowest tests (at least 2 minutes):
duration env testname
5:11 aws-windows-latest-4core-16gb TestAccept
4:54 azure-windows-latest-4core-16gb TestAccept
3:34 gcp-windows-latest-4core-16gb TestAccept

@denik
denik force-pushed the denik/depends-on branch 2 times, most recently from 25ceaa6 to 9124e27 Compare October 20, 2026 13:07
denik and others added 2 commits October 20, 2026 15:31
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
denik and others added 8 commits October 20, 2026 15:44
Co-authored-by: Isaac <no-reply@databricks.com>
…njected references

Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
The injected ${resources.schemas.X.name} references also carry the deployed
name (e.g. the dev-mode prefix), so replacing them with depends_on breaks
dependents.

Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
@denik
denik changed the base branch from main to denik/resolve-key October 20, 2026 13:48
@denik
denik added this pull request to stack #7131 October 20, 2026 13:48
Co-authored-by: Isaac <no-reply@databricks.com>
@denik
denik marked this pull request as ready for review October 20, 2026 14:06
@denik
denik requested review from a team as code owners October 20, 2026 14:06
// DependsOn is a single lifecycle.depends_on entry.
type DependsOn struct {
// Key of the resource to depend on: "foo" or "jobs.foo".
Node string `json:"node"`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Node is an internal name that isn't part of the configuration anywhere (yet).

I think "resource" fits better because it depends on a resource. If we later add dependencies on other things we can call them by their name too.

Base automatically changed from denik/resolve-key to main October 21, 2026 09:44
@denik
denik requested a review from a team as a code owner October 21, 2026 09:44

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DABs DABs related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants