From aa5cdb2d8e7e925af32939997f690cfb6026fd61 Mon Sep 17 00:00:00 2001 From: Jan Rose Date: Sun, 12 Jul 2026 23:49:48 +0200 Subject: [PATCH 1/8] Make bundle command error more actionable if run without databricks.yml --- acceptance/bundle/run/inline-script/no-bundle/output.txt | 2 +- acceptance/bundle/run/inline-script/no-separator/output.txt | 2 +- bundle/root.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/acceptance/bundle/run/inline-script/no-bundle/output.txt b/acceptance/bundle/run/inline-script/no-bundle/output.txt index 870f682634f..4c41b8e366d 100644 --- a/acceptance/bundle/run/inline-script/no-bundle/output.txt +++ b/acceptance/bundle/run/inline-script/no-bundle/output.txt @@ -1,6 +1,6 @@ >>> [CLI] bundle run -- echo hello -Error: unable to locate bundle root: databricks.yml not found +Error: unable to locate bundle root: databricks.yml not found. Run 'databricks bundle init' to create a bundle, or run this command from a directory that already contains one Exit code: 1 diff --git a/acceptance/bundle/run/inline-script/no-separator/output.txt b/acceptance/bundle/run/inline-script/no-separator/output.txt index 7a35cab72e4..937988ce833 100644 --- a/acceptance/bundle/run/inline-script/no-separator/output.txt +++ b/acceptance/bundle/run/inline-script/no-separator/output.txt @@ -1,6 +1,6 @@ >>> [CLI] bundle run echo hello -Error: unable to locate bundle root: databricks.yml not found +Error: unable to locate bundle root: databricks.yml not found. Run 'databricks bundle init' to create a bundle, or run this command from a directory that already contains one Exit code: 1 diff --git a/bundle/root.go b/bundle/root.go index 9ea9a8c13fe..9f6f2c5f6bb 100644 --- a/bundle/root.go +++ b/bundle/root.go @@ -45,7 +45,7 @@ func getRootWithTraversal() (string, error) { } } - return "", fmt.Errorf(`unable to locate bundle root: %s not found`, config.FileNames[0]) + return "", fmt.Errorf(`unable to locate bundle root: %s not found. Run 'databricks bundle init' to create a bundle, or run this command from a directory that already contains one`, config.FileNames[0]) } // mustGetRoot returns a bundle root or an error if one cannot be found. From 3e1e3946a480f9f319cb29aff0d7261833d650f5 Mon Sep 17 00:00:00 2001 From: Jan Rose Date: Sun, 12 Jul 2026 23:50:30 +0200 Subject: [PATCH 2/8] Add skeleton template --- acceptance/bundle/help/bundle-init/output.txt | 1 + .../bundle/templates/skeleton/input.json | 3 +++ .../bundle/templates/skeleton/out.test.toml | 3 +++ .../bundle/templates/skeleton/output.txt | 26 +++++++++++++++++++ .../output/my_skeleton/databricks.yml | 16 ++++++++++++ .../output/my_skeleton/resources/.gitkeep | 2 ++ acceptance/bundle/templates/skeleton/script | 12 +++++++++ libs/template/template.go | 7 +++++ libs/template/template_test.go | 3 +++ .../skeleton/databricks_template_schema.json | 14 ++++++++++ .../{{.project_name}}/databricks.yml.tmpl | 16 ++++++++++++ .../{{.project_name}}/resources/.gitkeep | 2 ++ 12 files changed, 105 insertions(+) create mode 100644 acceptance/bundle/templates/skeleton/input.json create mode 100644 acceptance/bundle/templates/skeleton/out.test.toml create mode 100644 acceptance/bundle/templates/skeleton/output.txt create mode 100644 acceptance/bundle/templates/skeleton/output/my_skeleton/databricks.yml create mode 100644 acceptance/bundle/templates/skeleton/output/my_skeleton/resources/.gitkeep create mode 100644 acceptance/bundle/templates/skeleton/script create mode 100644 libs/template/templates/skeleton/databricks_template_schema.json create mode 100644 libs/template/templates/skeleton/template/{{.project_name}}/databricks.yml.tmpl create mode 100644 libs/template/templates/skeleton/template/{{.project_name}}/resources/.gitkeep diff --git a/acceptance/bundle/help/bundle-init/output.txt b/acceptance/bundle/help/bundle-init/output.txt index dad5e198e4c..aedee05b4f9 100644 --- a/acceptance/bundle/help/bundle-init/output.txt +++ b/acceptance/bundle/help/bundle-init/output.txt @@ -6,6 +6,7 @@ TEMPLATE_PATH optionally specifies which template to use. It can be one of the f - default-python: The default Python template for Notebooks and Lakeflow - default-sql: The default SQL template for .sql files that run with Databricks SQL - default-minimal: The minimal template, for advanced users +- skeleton: A bare bundle with just a databricks.yml and an empty resources directory - default-scala: The default Scala template for JAR jobs - dbt-sql: The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks) - mlops-stacks: The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks) diff --git a/acceptance/bundle/templates/skeleton/input.json b/acceptance/bundle/templates/skeleton/input.json new file mode 100644 index 00000000000..6734f26069d --- /dev/null +++ b/acceptance/bundle/templates/skeleton/input.json @@ -0,0 +1,3 @@ +{ + "project_name": "my_skeleton" +} diff --git a/acceptance/bundle/templates/skeleton/out.test.toml b/acceptance/bundle/templates/skeleton/out.test.toml new file mode 100644 index 00000000000..f784a183258 --- /dev/null +++ b/acceptance/bundle/templates/skeleton/out.test.toml @@ -0,0 +1,3 @@ +Local = true +Cloud = false +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct"] diff --git a/acceptance/bundle/templates/skeleton/output.txt b/acceptance/bundle/templates/skeleton/output.txt new file mode 100644 index 00000000000..6d89a27bc13 --- /dev/null +++ b/acceptance/bundle/templates/skeleton/output.txt @@ -0,0 +1,26 @@ + +>>> [CLI] bundle init skeleton --config-file ./input.json --output-dir output + +Welcome to the skeleton template for Declarative Automation Bundles! + +This template creates a bare-bones bundle with just a databricks.yml and an empty +resources/ directory, ready for you to add your own jobs, pipelines, and other resources. + +A workspace was selected based on your current profile. For information about how to +change this, see https://docs.databricks.com/dev-tools/cli/profiles.html. +workspace_host: [DATABRICKS_URL] + +✨ Your new project has been created in the 'my_skeleton' directory! + +Add resource definitions under my_skeleton/resources/, then deploy with: + cd my_skeleton + databricks bundle deploy + +>>> [CLI] bundle validate -t dev +Name: my_skeleton +Target: dev +Workspace: + User: [USERNAME] + Path: /Workspace/Users/[USERNAME]/.bundle/my_skeleton/dev + +Validation OK! diff --git a/acceptance/bundle/templates/skeleton/output/my_skeleton/databricks.yml b/acceptance/bundle/templates/skeleton/output/my_skeleton/databricks.yml new file mode 100644 index 00000000000..33d2c8c3414 --- /dev/null +++ b/acceptance/bundle/templates/skeleton/output/my_skeleton/databricks.yml @@ -0,0 +1,16 @@ +# This is a Databricks asset bundle definition for my_skeleton. +# See https://docs.databricks.com/dev-tools/bundles/index.html for documentation. +bundle: + name: my_skeleton + +include: + - resources/*.yml + +targets: + # The 'dev' target is the default target. It uses 'mode: development' to create + # development copies: deployed resources get prefixed with '[dev my_user_name]' + # and any schedules and triggers are paused by default. + # See https://docs.databricks.com/dev-tools/bundles/deployment-modes.html. + dev: + mode: development + default: true diff --git a/acceptance/bundle/templates/skeleton/output/my_skeleton/resources/.gitkeep b/acceptance/bundle/templates/skeleton/output/my_skeleton/resources/.gitkeep new file mode 100644 index 00000000000..5b0d6b6f74b --- /dev/null +++ b/acceptance/bundle/templates/skeleton/output/my_skeleton/resources/.gitkeep @@ -0,0 +1,2 @@ + +This folder is reserved for Declarative Automation Bundles resource definitions. diff --git a/acceptance/bundle/templates/skeleton/script b/acceptance/bundle/templates/skeleton/script new file mode 100644 index 00000000000..031348292aa --- /dev/null +++ b/acceptance/bundle/templates/skeleton/script @@ -0,0 +1,12 @@ +trace $CLI bundle init skeleton --config-file ./input.json --output-dir output + +cd output/my_skeleton + +# Verify that the empty resources directory is preserved +[ -d "resources" ] || exit 1 + +trace $CLI bundle validate -t dev + +rm -r .databricks + +cd ../../ diff --git a/libs/template/template.go b/libs/template/template.go index b8448936bea..736f1bb7c0b 100644 --- a/libs/template/template.go +++ b/libs/template/template.go @@ -26,6 +26,7 @@ type TemplateName string const ( DefaultPython TemplateName = "default-python" DefaultMinimal TemplateName = "default-minimal" + Skeleton TemplateName = "skeleton" DefaultScala TemplateName = "default-scala" ExperimentalDefaultPython TemplateName = "experimental-default-python-vnext" DefaultSql TemplateName = "default-sql" @@ -59,6 +60,12 @@ var databricksTemplates = []Template{ Reader: &builtinReader{name: string(DefaultMinimal)}, Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: DefaultMinimal}}, }, + { + name: Skeleton, + description: "A bare bundle with just a databricks.yml and an empty resources directory", + Reader: &builtinReader{name: string(Skeleton)}, + Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: Skeleton}}, + }, { name: DefaultScala, description: "The default Scala template for JAR jobs", diff --git a/libs/template/template_test.go b/libs/template/template_test.go index 4692f0acb2a..c3319703bbc 100644 --- a/libs/template/template_test.go +++ b/libs/template/template_test.go @@ -11,6 +11,7 @@ func TestTemplateHelpDescriptions(t *testing.T) { expected := `- default-python: The default Python template for Notebooks and Lakeflow - default-sql: The default SQL template for .sql files that run with Databricks SQL - default-minimal: The minimal template, for advanced users +- skeleton: A bare bundle with just a databricks.yml and an empty resources directory - default-scala: The default Scala template for JAR jobs - dbt-sql: The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks) - mlops-stacks: The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks) @@ -23,6 +24,7 @@ func TestTemplateOptions(t *testing.T) { {Name: "default-python", Id: "The default Python template for Notebooks and Lakeflow"}, {Name: "default-sql", Id: "The default SQL template for .sql files that run with Databricks SQL"}, {Name: "default-minimal", Id: "The minimal template, for advanced users"}, + {Name: "skeleton", Id: "A bare bundle with just a databricks.yml and an empty resources directory"}, {Name: "default-scala", Id: "The default Scala template for JAR jobs"}, {Name: "dbt-sql", Id: "The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks)"}, {Name: "mlops-stacks", Id: "The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks)"}, @@ -58,6 +60,7 @@ func TestTemplateGetDatabricksTemplate(t *testing.T) { names := []TemplateName{ DefaultPython, DefaultMinimal, + Skeleton, DefaultScala, DefaultSql, DbtSql, diff --git a/libs/template/templates/skeleton/databricks_template_schema.json b/libs/template/templates/skeleton/databricks_template_schema.json new file mode 100644 index 00000000000..6d0a73e6f5c --- /dev/null +++ b/libs/template/templates/skeleton/databricks_template_schema.json @@ -0,0 +1,14 @@ +{ + "welcome_message": "\nWelcome to the skeleton template for Declarative Automation Bundles!\n\nThis template creates a bare-bones bundle with just a databricks.yml and an empty\nresources/ directory, ready for you to add your own jobs, pipelines, and other resources.\n\nA workspace was selected based on your current profile. For information about how to\nchange this, see https://docs.databricks.com/dev-tools/cli/profiles.html.\nworkspace_host: {{workspace_host}}", + "properties": { + "project_name": { + "type": "string", + "default": "my_bundle", + "description": "\nUnique name for this project.\nproject_name", + "order": 1, + "pattern": "^[A-Za-z0-9_]+$", + "pattern_match_failure_message": "Name must consist of letters, numbers, and underscores." + } + }, + "success_message": "\n✨ Your new project has been created in the '{{.project_name}}' directory!\n\nAdd resource definitions under {{.project_name}}/resources/, then deploy with:\n cd {{.project_name}}\n databricks bundle deploy" +} diff --git a/libs/template/templates/skeleton/template/{{.project_name}}/databricks.yml.tmpl b/libs/template/templates/skeleton/template/{{.project_name}}/databricks.yml.tmpl new file mode 100644 index 00000000000..b9e16dfda85 --- /dev/null +++ b/libs/template/templates/skeleton/template/{{.project_name}}/databricks.yml.tmpl @@ -0,0 +1,16 @@ +# This is a Databricks asset bundle definition for {{.project_name}}. +# See https://docs.databricks.com/dev-tools/bundles/index.html for documentation. +bundle: + name: {{.project_name}} + +include: + - resources/*.yml + +targets: + # The 'dev' target is the default target. It uses 'mode: development' to create + # development copies: deployed resources get prefixed with '[dev my_user_name]' + # and any schedules and triggers are paused by default. + # See https://docs.databricks.com/dev-tools/bundles/deployment-modes.html. + dev: + mode: development + default: true diff --git a/libs/template/templates/skeleton/template/{{.project_name}}/resources/.gitkeep b/libs/template/templates/skeleton/template/{{.project_name}}/resources/.gitkeep new file mode 100644 index 00000000000..5b0d6b6f74b --- /dev/null +++ b/libs/template/templates/skeleton/template/{{.project_name}}/resources/.gitkeep @@ -0,0 +1,2 @@ + +This folder is reserved for Declarative Automation Bundles resource definitions. From 8ebebb241edd7e8fa637ba343409b644c21e8869 Mon Sep 17 00:00:00 2001 From: Jan Rose Date: Sun, 12 Jul 2026 23:50:43 +0200 Subject: [PATCH 3/8] Add nextchanges entry --- .nextchanges/bundles/skeleton-template.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 .nextchanges/bundles/skeleton-template.md diff --git a/.nextchanges/bundles/skeleton-template.md b/.nextchanges/bundles/skeleton-template.md new file mode 100644 index 00000000000..b43e5fe9a2b --- /dev/null +++ b/.nextchanges/bundles/skeleton-template.md @@ -0,0 +1 @@ +Added a `skeleton` bundle template that scaffolds a bare `databricks.yml` and an empty `resources/` directory. Use it with `databricks bundle init skeleton` to start a new bundle without any sample code. From c67b8cbf40dc1b73f70223b312d90e0647c81ca5 Mon Sep 17 00:00:00 2001 From: Jan Rose Date: Wed, 15 Jul 2026 14:11:35 +0200 Subject: [PATCH 4/8] rename skeleton to empty Co-authored-by: Isaac --- .nextchanges/bundles/empty-template.md | 1 + .nextchanges/bundles/skeleton-template.md | 1 - acceptance/bundle/help/bundle-init/output.txt | 2 +- acceptance/bundle/templates/empty/input.json | 3 +++ .../templates/{skeleton => empty}/out.test.toml | 0 .../templates/{skeleton => empty}/output.txt | 14 +++++++------- .../output/my_empty}/databricks.yml | 4 ++-- .../output/my_empty}/resources/.gitkeep | 0 .../bundle/templates/{skeleton => empty}/script | 4 ++-- acceptance/bundle/templates/skeleton/input.json | 3 --- libs/template/template.go | 8 ++++---- libs/template/template_test.go | 6 +++--- .../databricks_template_schema.json | 2 +- .../template/{{.project_name}}/databricks.yml.tmpl | 0 .../template/{{.project_name}}/resources/.gitkeep | 0 15 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 .nextchanges/bundles/empty-template.md delete mode 100644 .nextchanges/bundles/skeleton-template.md create mode 100644 acceptance/bundle/templates/empty/input.json rename acceptance/bundle/templates/{skeleton => empty}/out.test.toml (100%) rename acceptance/bundle/templates/{skeleton => empty}/output.txt (55%) rename acceptance/bundle/templates/{skeleton/output/my_skeleton => empty/output/my_empty}/databricks.yml (85%) rename acceptance/bundle/templates/{skeleton/output/my_skeleton => empty/output/my_empty}/resources/.gitkeep (100%) rename acceptance/bundle/templates/{skeleton => empty}/script (60%) delete mode 100644 acceptance/bundle/templates/skeleton/input.json rename libs/template/templates/{skeleton => empty}/databricks_template_schema.json (56%) rename libs/template/templates/{skeleton => empty}/template/{{.project_name}}/databricks.yml.tmpl (100%) rename libs/template/templates/{skeleton => empty}/template/{{.project_name}}/resources/.gitkeep (100%) diff --git a/.nextchanges/bundles/empty-template.md b/.nextchanges/bundles/empty-template.md new file mode 100644 index 00000000000..96a01a08b2f --- /dev/null +++ b/.nextchanges/bundles/empty-template.md @@ -0,0 +1 @@ +Added an `empty` bundle template that scaffolds a bare `databricks.yml` and an empty `resources/` directory. Use it with `databricks bundle init empty` to start a new bundle without any sample code. diff --git a/.nextchanges/bundles/skeleton-template.md b/.nextchanges/bundles/skeleton-template.md deleted file mode 100644 index b43e5fe9a2b..00000000000 --- a/.nextchanges/bundles/skeleton-template.md +++ /dev/null @@ -1 +0,0 @@ -Added a `skeleton` bundle template that scaffolds a bare `databricks.yml` and an empty `resources/` directory. Use it with `databricks bundle init skeleton` to start a new bundle without any sample code. diff --git a/acceptance/bundle/help/bundle-init/output.txt b/acceptance/bundle/help/bundle-init/output.txt index aedee05b4f9..5c6a03ccd3a 100644 --- a/acceptance/bundle/help/bundle-init/output.txt +++ b/acceptance/bundle/help/bundle-init/output.txt @@ -6,7 +6,7 @@ TEMPLATE_PATH optionally specifies which template to use. It can be one of the f - default-python: The default Python template for Notebooks and Lakeflow - default-sql: The default SQL template for .sql files that run with Databricks SQL - default-minimal: The minimal template, for advanced users -- skeleton: A bare bundle with just a databricks.yml and an empty resources directory +- empty: A bare bundle with just a databricks.yml and an empty resources directory - default-scala: The default Scala template for JAR jobs - dbt-sql: The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks) - mlops-stacks: The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks) diff --git a/acceptance/bundle/templates/empty/input.json b/acceptance/bundle/templates/empty/input.json new file mode 100644 index 00000000000..adf5147b079 --- /dev/null +++ b/acceptance/bundle/templates/empty/input.json @@ -0,0 +1,3 @@ +{ + "project_name": "my_empty" +} diff --git a/acceptance/bundle/templates/skeleton/out.test.toml b/acceptance/bundle/templates/empty/out.test.toml similarity index 100% rename from acceptance/bundle/templates/skeleton/out.test.toml rename to acceptance/bundle/templates/empty/out.test.toml diff --git a/acceptance/bundle/templates/skeleton/output.txt b/acceptance/bundle/templates/empty/output.txt similarity index 55% rename from acceptance/bundle/templates/skeleton/output.txt rename to acceptance/bundle/templates/empty/output.txt index 6d89a27bc13..997e3f829f3 100644 --- a/acceptance/bundle/templates/skeleton/output.txt +++ b/acceptance/bundle/templates/empty/output.txt @@ -1,7 +1,7 @@ ->>> [CLI] bundle init skeleton --config-file ./input.json --output-dir output +>>> [CLI] bundle init empty --config-file ./input.json --output-dir output -Welcome to the skeleton template for Declarative Automation Bundles! +Welcome to the empty template for Declarative Automation Bundles! This template creates a bare-bones bundle with just a databricks.yml and an empty resources/ directory, ready for you to add your own jobs, pipelines, and other resources. @@ -10,17 +10,17 @@ A workspace was selected based on your current profile. For information about ho change this, see https://docs.databricks.com/dev-tools/cli/profiles.html. workspace_host: [DATABRICKS_URL] -✨ Your new project has been created in the 'my_skeleton' directory! +✨ Your new project has been created in the 'my_empty' directory! -Add resource definitions under my_skeleton/resources/, then deploy with: - cd my_skeleton +Add resource definitions under my_empty/resources/, then deploy with: + cd my_empty databricks bundle deploy >>> [CLI] bundle validate -t dev -Name: my_skeleton +Name: my_empty Target: dev Workspace: User: [USERNAME] - Path: /Workspace/Users/[USERNAME]/.bundle/my_skeleton/dev + Path: /Workspace/Users/[USERNAME]/.bundle/my_empty/dev Validation OK! diff --git a/acceptance/bundle/templates/skeleton/output/my_skeleton/databricks.yml b/acceptance/bundle/templates/empty/output/my_empty/databricks.yml similarity index 85% rename from acceptance/bundle/templates/skeleton/output/my_skeleton/databricks.yml rename to acceptance/bundle/templates/empty/output/my_empty/databricks.yml index 33d2c8c3414..57d4637fbde 100644 --- a/acceptance/bundle/templates/skeleton/output/my_skeleton/databricks.yml +++ b/acceptance/bundle/templates/empty/output/my_empty/databricks.yml @@ -1,7 +1,7 @@ -# This is a Databricks asset bundle definition for my_skeleton. +# This is a Databricks asset bundle definition for my_empty. # See https://docs.databricks.com/dev-tools/bundles/index.html for documentation. bundle: - name: my_skeleton + name: my_empty include: - resources/*.yml diff --git a/acceptance/bundle/templates/skeleton/output/my_skeleton/resources/.gitkeep b/acceptance/bundle/templates/empty/output/my_empty/resources/.gitkeep similarity index 100% rename from acceptance/bundle/templates/skeleton/output/my_skeleton/resources/.gitkeep rename to acceptance/bundle/templates/empty/output/my_empty/resources/.gitkeep diff --git a/acceptance/bundle/templates/skeleton/script b/acceptance/bundle/templates/empty/script similarity index 60% rename from acceptance/bundle/templates/skeleton/script rename to acceptance/bundle/templates/empty/script index 031348292aa..7fd72eda55a 100644 --- a/acceptance/bundle/templates/skeleton/script +++ b/acceptance/bundle/templates/empty/script @@ -1,6 +1,6 @@ -trace $CLI bundle init skeleton --config-file ./input.json --output-dir output +trace $CLI bundle init empty --config-file ./input.json --output-dir output -cd output/my_skeleton +cd output/my_empty # Verify that the empty resources directory is preserved [ -d "resources" ] || exit 1 diff --git a/acceptance/bundle/templates/skeleton/input.json b/acceptance/bundle/templates/skeleton/input.json deleted file mode 100644 index 6734f26069d..00000000000 --- a/acceptance/bundle/templates/skeleton/input.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "project_name": "my_skeleton" -} diff --git a/libs/template/template.go b/libs/template/template.go index 736f1bb7c0b..edd3456691a 100644 --- a/libs/template/template.go +++ b/libs/template/template.go @@ -26,7 +26,7 @@ type TemplateName string const ( DefaultPython TemplateName = "default-python" DefaultMinimal TemplateName = "default-minimal" - Skeleton TemplateName = "skeleton" + Empty TemplateName = "empty" DefaultScala TemplateName = "default-scala" ExperimentalDefaultPython TemplateName = "experimental-default-python-vnext" DefaultSql TemplateName = "default-sql" @@ -61,10 +61,10 @@ var databricksTemplates = []Template{ Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: DefaultMinimal}}, }, { - name: Skeleton, + name: Empty, description: "A bare bundle with just a databricks.yml and an empty resources directory", - Reader: &builtinReader{name: string(Skeleton)}, - Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: Skeleton}}, + Reader: &builtinReader{name: string(Empty)}, + Writer: &writerWithFullTelemetry{defaultWriter: defaultWriter{name: Empty}}, }, { name: DefaultScala, diff --git a/libs/template/template_test.go b/libs/template/template_test.go index c3319703bbc..6d2fc8d563f 100644 --- a/libs/template/template_test.go +++ b/libs/template/template_test.go @@ -11,7 +11,7 @@ func TestTemplateHelpDescriptions(t *testing.T) { expected := `- default-python: The default Python template for Notebooks and Lakeflow - default-sql: The default SQL template for .sql files that run with Databricks SQL - default-minimal: The minimal template, for advanced users -- skeleton: A bare bundle with just a databricks.yml and an empty resources directory +- empty: A bare bundle with just a databricks.yml and an empty resources directory - default-scala: The default Scala template for JAR jobs - dbt-sql: The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks) - mlops-stacks: The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks) @@ -24,7 +24,7 @@ func TestTemplateOptions(t *testing.T) { {Name: "default-python", Id: "The default Python template for Notebooks and Lakeflow"}, {Name: "default-sql", Id: "The default SQL template for .sql files that run with Databricks SQL"}, {Name: "default-minimal", Id: "The minimal template, for advanced users"}, - {Name: "skeleton", Id: "A bare bundle with just a databricks.yml and an empty resources directory"}, + {Name: "empty", Id: "A bare bundle with just a databricks.yml and an empty resources directory"}, {Name: "default-scala", Id: "The default Scala template for JAR jobs"}, {Name: "dbt-sql", Id: "The dbt SQL template (databricks.com/blog/delivering-cost-effective-data-real-time-dbt-and-databricks)"}, {Name: "mlops-stacks", Id: "The Databricks MLOps Stacks template (github.com/databricks/mlops-stacks)"}, @@ -60,7 +60,7 @@ func TestTemplateGetDatabricksTemplate(t *testing.T) { names := []TemplateName{ DefaultPython, DefaultMinimal, - Skeleton, + Empty, DefaultScala, DefaultSql, DbtSql, diff --git a/libs/template/templates/skeleton/databricks_template_schema.json b/libs/template/templates/empty/databricks_template_schema.json similarity index 56% rename from libs/template/templates/skeleton/databricks_template_schema.json rename to libs/template/templates/empty/databricks_template_schema.json index 6d0a73e6f5c..f7d4de28d35 100644 --- a/libs/template/templates/skeleton/databricks_template_schema.json +++ b/libs/template/templates/empty/databricks_template_schema.json @@ -1,5 +1,5 @@ { - "welcome_message": "\nWelcome to the skeleton template for Declarative Automation Bundles!\n\nThis template creates a bare-bones bundle with just a databricks.yml and an empty\nresources/ directory, ready for you to add your own jobs, pipelines, and other resources.\n\nA workspace was selected based on your current profile. For information about how to\nchange this, see https://docs.databricks.com/dev-tools/cli/profiles.html.\nworkspace_host: {{workspace_host}}", + "welcome_message": "\nWelcome to the empty template for Declarative Automation Bundles!\n\nThis template creates a bare-bones bundle with just a databricks.yml and an empty\nresources/ directory, ready for you to add your own jobs, pipelines, and other resources.\n\nA workspace was selected based on your current profile. For information about how to\nchange this, see https://docs.databricks.com/dev-tools/cli/profiles.html.\nworkspace_host: {{workspace_host}}", "properties": { "project_name": { "type": "string", diff --git a/libs/template/templates/skeleton/template/{{.project_name}}/databricks.yml.tmpl b/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl similarity index 100% rename from libs/template/templates/skeleton/template/{{.project_name}}/databricks.yml.tmpl rename to libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl diff --git a/libs/template/templates/skeleton/template/{{.project_name}}/resources/.gitkeep b/libs/template/templates/empty/template/{{.project_name}}/resources/.gitkeep similarity index 100% rename from libs/template/templates/skeleton/template/{{.project_name}}/resources/.gitkeep rename to libs/template/templates/empty/template/{{.project_name}}/resources/.gitkeep From 6ba12be8ab9a8dbf95209e106cbbf29d9b4749ea Mon Sep 17 00:00:00 2001 From: Jan N Rose Date: Wed, 15 Jul 2026 14:14:45 +0200 Subject: [PATCH 5/8] add PR link to changelog --- .nextchanges/bundles/empty-template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nextchanges/bundles/empty-template.md b/.nextchanges/bundles/empty-template.md index 96a01a08b2f..4b960b751a4 100644 --- a/.nextchanges/bundles/empty-template.md +++ b/.nextchanges/bundles/empty-template.md @@ -1 +1 @@ -Added an `empty` bundle template that scaffolds a bare `databricks.yml` and an empty `resources/` directory. Use it with `databricks bundle init empty` to start a new bundle without any sample code. +Added an `empty` bundle template that scaffolds a bare `databricks.yml` and an empty `resources/` directory. Use it with `databricks bundle init empty` to start a new bundle without any sample code ([#5899](https://github.com/databricks/cli/pull/5899)). From 1c9cb9c8d618c8f33fee463ae1f8709855273076 Mon Sep 17 00:00:00 2001 From: Jan Rose Date: Wed, 15 Jul 2026 15:05:17 +0200 Subject: [PATCH 6/8] Address review: add .gitignore to template and unwrap welcome message Co-authored-by: Isaac --- acceptance/bundle/templates/empty/output.txt | 6 ++---- .../bundle/templates/empty/output/my_empty/.gitignore | 1 + .../templates/empty/databricks_template_schema.json | 2 +- .../templates/empty/template/{{.project_name}}/.gitignore | 1 + 4 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 acceptance/bundle/templates/empty/output/my_empty/.gitignore create mode 100644 libs/template/templates/empty/template/{{.project_name}}/.gitignore diff --git a/acceptance/bundle/templates/empty/output.txt b/acceptance/bundle/templates/empty/output.txt index 997e3f829f3..8f8f79474a3 100644 --- a/acceptance/bundle/templates/empty/output.txt +++ b/acceptance/bundle/templates/empty/output.txt @@ -3,11 +3,9 @@ Welcome to the empty template for Declarative Automation Bundles! -This template creates a bare-bones bundle with just a databricks.yml and an empty -resources/ directory, ready for you to add your own jobs, pipelines, and other resources. +This template creates a bare-bones bundle with just a databricks.yml and an empty resources/ directory, ready for you to add your own jobs, pipelines, and other resources. -A workspace was selected based on your current profile. For information about how to -change this, see https://docs.databricks.com/dev-tools/cli/profiles.html. +A workspace was selected based on your current profile. For information about how to change this, see https://docs.databricks.com/dev-tools/cli/profiles.html. workspace_host: [DATABRICKS_URL] ✨ Your new project has been created in the 'my_empty' directory! diff --git a/acceptance/bundle/templates/empty/output/my_empty/.gitignore b/acceptance/bundle/templates/empty/output/my_empty/.gitignore new file mode 100644 index 00000000000..590f86d986c --- /dev/null +++ b/acceptance/bundle/templates/empty/output/my_empty/.gitignore @@ -0,0 +1 @@ +.databricks/ diff --git a/libs/template/templates/empty/databricks_template_schema.json b/libs/template/templates/empty/databricks_template_schema.json index f7d4de28d35..c404d2128b2 100644 --- a/libs/template/templates/empty/databricks_template_schema.json +++ b/libs/template/templates/empty/databricks_template_schema.json @@ -1,5 +1,5 @@ { - "welcome_message": "\nWelcome to the empty template for Declarative Automation Bundles!\n\nThis template creates a bare-bones bundle with just a databricks.yml and an empty\nresources/ directory, ready for you to add your own jobs, pipelines, and other resources.\n\nA workspace was selected based on your current profile. For information about how to\nchange this, see https://docs.databricks.com/dev-tools/cli/profiles.html.\nworkspace_host: {{workspace_host}}", + "welcome_message": "\nWelcome to the empty template for Declarative Automation Bundles!\n\nThis template creates a bare-bones bundle with just a databricks.yml and an empty resources/ directory, ready for you to add your own jobs, pipelines, and other resources.\n\nA workspace was selected based on your current profile. For information about how to change this, see https://docs.databricks.com/dev-tools/cli/profiles.html.\nworkspace_host: {{workspace_host}}", "properties": { "project_name": { "type": "string", diff --git a/libs/template/templates/empty/template/{{.project_name}}/.gitignore b/libs/template/templates/empty/template/{{.project_name}}/.gitignore new file mode 100644 index 00000000000..590f86d986c --- /dev/null +++ b/libs/template/templates/empty/template/{{.project_name}}/.gitignore @@ -0,0 +1 @@ +.databricks/ From 00216dde670a08a873f7ff7a2deaddb8d82d8d0e Mon Sep 17 00:00:00 2001 From: Jan Rose Date: Wed, 15 Jul 2026 15:10:00 +0200 Subject: [PATCH 7/8] DAB rename --- .../empty/template/{{.project_name}}/databricks.yml.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl b/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl index b9e16dfda85..2bdaf950cdf 100644 --- a/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl +++ b/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl @@ -1,4 +1,4 @@ -# This is a Databricks asset bundle definition for {{.project_name}}. +# This is a Declarative Automation Bundle definition for {{.project_name}}. # See https://docs.databricks.com/dev-tools/bundles/index.html for documentation. bundle: name: {{.project_name}} From 684935efeb0c4c544b806a5b695988b328cf7d49 Mon Sep 17 00:00:00 2001 From: Jan Rose Date: Wed, 15 Jul 2026 15:18:10 +0200 Subject: [PATCH 8/8] Set workspace host in dev target for consistency with other templates Co-authored-by: Isaac --- acceptance/bundle/templates/empty/output.txt | 1 + .../bundle/templates/empty/output/my_empty/databricks.yml | 4 +++- .../empty/template/{{.project_name}}/databricks.yml.tmpl | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/acceptance/bundle/templates/empty/output.txt b/acceptance/bundle/templates/empty/output.txt index 8f8f79474a3..5f34d97de14 100644 --- a/acceptance/bundle/templates/empty/output.txt +++ b/acceptance/bundle/templates/empty/output.txt @@ -18,6 +18,7 @@ Add resource definitions under my_empty/resources/, then deploy with: Name: my_empty Target: dev Workspace: + Host: [DATABRICKS_URL] User: [USERNAME] Path: /Workspace/Users/[USERNAME]/.bundle/my_empty/dev diff --git a/acceptance/bundle/templates/empty/output/my_empty/databricks.yml b/acceptance/bundle/templates/empty/output/my_empty/databricks.yml index 57d4637fbde..f63a3690efc 100644 --- a/acceptance/bundle/templates/empty/output/my_empty/databricks.yml +++ b/acceptance/bundle/templates/empty/output/my_empty/databricks.yml @@ -1,4 +1,4 @@ -# This is a Databricks asset bundle definition for my_empty. +# This is a Declarative Automation Bundle definition for my_empty. # See https://docs.databricks.com/dev-tools/bundles/index.html for documentation. bundle: name: my_empty @@ -14,3 +14,5 @@ targets: dev: mode: development default: true + workspace: + host: [DATABRICKS_URL] diff --git a/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl b/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl index 2bdaf950cdf..ec87bbe5e30 100644 --- a/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl +++ b/libs/template/templates/empty/template/{{.project_name}}/databricks.yml.tmpl @@ -14,3 +14,5 @@ targets: dev: mode: development default: true + workspace: + host: {{workspace_host}}