Skip to content

Use .workspace.URL for the host in built-in templates - #7350

Draft
pavloKozlov wants to merge 4 commits into
workspace-context-template-datafrom
workspace-context-builtin-templates
Draft

pavloKozlov wants to merge 4 commits into
workspace-context-template-datafrom
workspace-context-builtin-templates

Conversation

@pavloKozlov

@pavloKozlov pavloKozlov commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #7349.

Changes

Built-in templates write host: "{{.workspace.URL}}" instead of {{workspace_host}}, and their welcome messages show the same URL. With a profile that sets workspace_id, the host gets ?w=<id>. Other profiles keep the same host as before, now quoted so the YAML stays valid for any URL. In dbt-sql, the dbt profile default uses .workspace.Hostname. It has no port, which is the same as before for Databricks hosts. No built-in template uses workspace_host now.

Why

On a host shared by several workspaces, the bundle needs the workspace ID in the host to deploy to the right workspace. dbt jobs get their host from Databricks, so the new bundle host doesn't reach dbt.

Tests

A new acceptance test creates a bundle with a profile without workspace_id and with one that has it, then validates it with strict profile matching and deploys it. Another one checks that a config file with an extra workspace key still works. The other template outputs change only by the added quotes and the welcome message label.

This pull request and its description were written by Isaac.

@pavloKozlov
pavloKozlov force-pushed the workspace-context-builtin-templates branch from abf32b2 to d6dcf5e Compare November 4, 2026 15:30
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Commit: c6c9291d8 | Workflow run

Regression test report

Selected 20 changed tests (limit=20, 8 not selected)

24 tests: regression=22 unreleased=0 coverage=2 failing=0

test branch main (c0e1859) latest (v1.24.0)
TestAccept/bundle/strict_profile_match/host/DMS= ✅ ✅ ✅
TestAccept/bundle/strict_profile_match/host/DMS=true ✅ ✅ ✅
TestAccept/bundle/templates-machinery/workspace_variable/input/DMS= ✅ ❌ ❌
TestAccept/bundle/templates-machinery/workspace_variable/input/DMS=true ✅ ❌ ❌
TestAccept/bundle/templates-machinery/workspace_variable/runtime/DMS= ✅ ❌ ❌
TestAccept/bundle/templates-machinery/workspace_variable/runtime/DMS=true ✅ ❌ ❌
TestAccept/bundle/templates/dbt-sql-classic/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/dbt-sql/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-minimal/extra-workspace-input/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-minimal/profiles/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-minimal/python/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-minimal/skip/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-minimal/sql/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-python/classic/DMS=/READPLAN= ✅ ❌ ❌
TestAccept/bundle/templates/default-python/classic/DMS=/READPLAN=1 ✅ ❌ ❌
TestAccept/bundle/templates/default-python/serverless-customcatalog/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-python/serverless/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-scala-classic/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-scala/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-sql-catalog-dash/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/default-sql/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/deployment-history/DMS=true ✅ ❌ ❌
TestAccept/bundle/templates/lakeflow-integrations/DMS= ✅ ❌ ❌
TestAccept/bundle/templates/lakeflow-pipelines/python/DMS= ✅ ❌ ❌
TestAccept/bundle/templates-machinery/workspace_variable/input/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates-machinery/workspace_variable/input/output.txt
        +++ /tmp/TestAcceptbundletemplates-machineryworkspace_variableinputD1508247988/002/output.txt
        @@ -97,12 +97,12 @@
         
         >>> [CLI] bundle debug render-template-schema ./undeclared --input-file input.value.json
         {
        -  "welcome_message": "workspace: {localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}",
        +  "welcome_message": "workspace: team-dev",
           "success_message": null,
           "properties": {}
         }
         
         >>> [CLI] bundle init ./undeclared --config-file input.value.json
        -workspace: {localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}
        -✨ Successfully initialized template
        -workspace: {localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}
        +Error: variable "workspace" not defined
        +
        +Exit code: 1

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates-machinery/workspace_variable/input/DMS=true: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates-machinery/workspace_variable/input/output.txt
        +++ /tmp/TestAcceptbundletemplates-machineryworkspace_variableinputD1193215296/002/output.txt
        @@ -97,12 +97,12 @@
         
         >>> [CLI] bundle debug render-template-schema ./undeclared --input-file input.value.json
         {
        -  "welcome_message": "workspace: {localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}",
        +  "welcome_message": "workspace: team-dev",
           "success_message": null,
           "properties": {}
         }
         
         >>> [CLI] bundle init ./undeclared --config-file input.value.json
        -workspace: {localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}
        -✨ Successfully initialized template
        -workspace: {localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}
        +Error: variable "workspace" not defined
        +
        +Exit code: 1

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates-machinery/workspace_variable/runtime/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates-machinery/workspace_variable/runtime/output.txt
        +++ /tmp/TestAcceptbundletemplates-machineryworkspace_variableruntime420919443/002/output.txt
        @@ -2,196 +2,6 @@
         === Profile workspace_classic
         
         >>> [CLI] bundle debug render-template-schema ./urls --profile workspace_classic
        -{
        -  "welcome_message": "Initializing for [DATABRICKS_URL]",
        -  "success_message": "Open [DATABRICKS_URL]/jobs?view=list#top",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[DATABRICKS_URL]/jobs"
        -    },
        -    "path": {
        -      "description": "Path to open on 127.0.0.1",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        +Error: property path: failed to render template "Path to open on {{ .workspace.Hostname }}": template: base:1:29: executing "base" at <.workspace.Hostname>: nil pointer evaluating interface {}.Hostname
         
        ->>> [CLI] bundle init ./urls --profile workspace_classic
        -Initializing for [DATABRICKS_URL]
        -Open [DATABRICKS_URL]/jobs?view=list#top
        -workspace_host: [DATABRICKS_URL]
        -Hostname: 127.0.0.1
        -URL: [DATABRICKS_URL]
        -URL "/jobs": [DATABRICKS_URL]/jobs
        -URL "/jobs?view=list#top": [DATABRICKS_URL]/jobs?view=list#top
        -jobs_url: [DATABRICKS_URL]/jobs
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:[DATABRICKS_URL]/jobs path:/jobs?view=list#top workspace:{127.0.0.1 [DATABRICKS_URL] [WORKSPACE_ID] }]
        -
        -=== Profile workspace_classic_id
        -
        ->>> [CLI] bundle debug render-template-schema ./urls --profile workspace_classic_id
        -{
        -  "welcome_message": "Initializing for [DATABRICKS_URL]?w=[WORKSPACE_ID]",
        -  "success_message": "Open [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[DATABRICKS_URL]/jobs?w=[WORKSPACE_ID]"
        -    },
        -    "path": {
        -      "description": "Path to open on 127.0.0.1",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        -
        ->>> [CLI] bundle init ./urls --profile workspace_classic_id
        -Initializing for [DATABRICKS_URL]?w=[WORKSPACE_ID]
        -Open [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top
        -workspace_host: [DATABRICKS_URL]
        -Hostname: 127.0.0.1
        -URL: [DATABRICKS_URL]?w=[WORKSPACE_ID]
        -URL "/jobs": [DATABRICKS_URL]/jobs?w=[WORKSPACE_ID]
        -URL "/jobs?view=list#top": [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top
        -jobs_url: [DATABRICKS_URL]/jobs?w=[WORKSPACE_ID]
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:[DATABRICKS_URL]/jobs?w=[WORKSPACE_ID] path:/jobs?view=list#top workspace:{127.0.0.1 [DATABRICKS_URL] [WORKSPACE_ID] [WORKSPACE_ID]}]
        -
        -=== Profile workspace_custom_host
        -
        ->>> [CLI] bundle debug render-template-schema ./urls --profile workspace_custom_host
        -{
        -  "welcome_message": "Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]",
        -  "success_message": "Open [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]"
        -    },
        -    "path": {
        -      "description": "Path to open on localhost",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        -
        ->>> [CLI] bundle init ./urls --profile workspace_custom_host
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Open [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top
        -workspace_host: [CUSTOM_HOST]
        -Hostname: localhost
        -URL: [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -URL "/jobs": [CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]
        -URL "/jobs?view=list#top": [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top
        -jobs_url: [CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:[CUSTOM_HOST]/jobs?w=[WORKSPACE_ID] path:/jobs?view=list#top workspace:{localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}]
        -
        -=== Profile no_workspace_id
        -
        ->>> [CLI] bundle debug render-template-schema ./urls --profile no_workspace_id
        -{
        -  "welcome_message": "Initializing for [DATABRICKS_URL]",
        -  "success_message": "Open [DATABRICKS_URL]/jobs?view=list#top",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[DATABRICKS_URL]/jobs"
        -    },
        -    "path": {
        -      "description": "Path to open on 127.0.0.1",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        -
        ->>> [CLI] bundle init ./urls --profile no_workspace_id
        -Initializing for [DATABRICKS_URL]
        -Open [DATABRICKS_URL]/jobs?view=list#top
        -workspace_host: [DATABRICKS_URL]
        -Hostname: 127.0.0.1
        -URL: [DATABRICKS_URL]
        -URL "/jobs": [DATABRICKS_URL]/jobs
        -URL "/jobs?view=list#top": [DATABRICKS_URL]/jobs?view=list#top
        -jobs_url: [DATABRICKS_URL]/jobs
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:[DATABRICKS_URL]/jobs path:/jobs?view=list#top workspace:{127.0.0.1 [DATABRICKS_URL]  }]
        -
        -=== Rerender and init with edited inputs
        -
        ->>> [CLI] bundle debug render-template-schema ./urls --profile workspace_custom_host --input-file input.edited.json
        -{
        -  "welcome_message": "Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]",
        -  "success_message": "Open [CUSTOM_HOST]/pipelines?tab=all&w=[WORKSPACE_ID]",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]"
        -    },
        -    "path": {
        -      "description": "Path to open on localhost",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        -
        ->>> [CLI] bundle init ./urls --profile workspace_custom_host --config-file input.edited.json
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Open [CUSTOM_HOST]/pipelines?tab=all&w=[WORKSPACE_ID]
        -workspace_host: [CUSTOM_HOST]
        -Hostname: localhost
        -URL: [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -URL "/jobs": [CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]
        -URL "/pipelines?tab=all": [CUSTOM_HOST]/pipelines?tab=all&w=[WORKSPACE_ID]
        -jobs_url: https://example.test/my-jobs
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:https://example.test/my-jobs path:/pipelines?tab=all workspace:{localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}]
        -
        -=== Invalid URL paths
        -
        ->>> musterr [CLI] bundle init ./urls --profile workspace_custom_host --config-file input.absolute-url.json
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Error: failed to compute file content for urls.txt.tmpl. template: :6:25: executing "" at <$ws.URL>: error calling URL: workspace URL path "https://other.test/jobs" must be relative to the workspace host
        -
        ->>> musterr [CLI] bundle init ./urls --profile workspace_custom_host --config-file input.workspace-selector.json
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Error: failed to compute file content for urls.txt.tmpl. template: :6:25: executing "" at <$ws.URL>: error calling URL: workspace URL path "/jobs?o=123" must not set the "o" query parameter, the workspace is selected by the profile
        -
        ->>> musterr [CLI] bundle init ./urls --profile workspace_custom_host --config-file input.semicolon.json
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Error: failed to compute file content for urls.txt.tmpl. template: :6:25: executing "" at <$ws.URL>: error calling URL: failed to parse query of workspace URL path "/jobs?w=999;x=1": invalid semicolon separator in query
        -
        -=== Workspace ID from environment variables
        -
        ->>> DATABRICKS_CONFIG_FILE=/dev/null DATABRICKS_HOST=[CUSTOM_HOST] DATABRICKS_WORKSPACE_ID=[WORKSPACE_ID] [CLI] bundle init ./urls
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Open [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top
        -URL: [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -URL "/jobs": [CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]
        -URL "/jobs?view=list#top": [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top
        -
        -=== Workspace ID from the bundle in the working directory
        -
        ->>> [CLI] bundle init ../urls
        -Initializing for [DATABRICKS_URL]?w=[WORKSPACE_ID]
        -Open [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top
        -URL: [DATABRICKS_URL]?w=[WORKSPACE_ID]
        -URL "/jobs": [DATABRICKS_URL]/jobs?w=[WORKSPACE_ID]
        -URL "/jobs?view=list#top": [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top
        -
        -=== ID
        -
        ->>> [CLI] bundle init ./id --profile workspace_classic
        -✨ Successfully initialized template
        -ID: [WORKSPACE_ID]
        -
        ->>> [CLI] bundle init ./id --profile workspace_custom_host
        -✨ Successfully initialized template
        -ID: [WORKSPACE_ID]
        -
        ->>> musterr [CLI] bundle init ./id --profile no_workspace_id
        -Error: failed to compute file content for id.txt.tmpl. template: :1:17: executing "" at <.workspace.ID>: error calling ID: cannot determine workspace ID, please set workspace_id in the configuration profile or the DATABRICKS_WORKSPACE_ID environment variable
        -
... (2 more lines truncated, raise DATABRICKS_CLI_TEST_MAX_LOG to see more)

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates-machinery/workspace_variable/runtime/DMS=true: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates-machinery/workspace_variable/runtime/output.txt
        +++ /tmp/TestAcceptbundletemplates-machineryworkspace_variableruntime445686647/002/output.txt
        @@ -2,196 +2,6 @@
         === Profile workspace_classic
         
         >>> [CLI] bundle debug render-template-schema ./urls --profile workspace_classic
        -{
        -  "welcome_message": "Initializing for [DATABRICKS_URL]",
        -  "success_message": "Open [DATABRICKS_URL]/jobs?view=list#top",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[DATABRICKS_URL]/jobs"
        -    },
        -    "path": {
        -      "description": "Path to open on 127.0.0.1",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        +Error: property path: failed to render template "Path to open on {{ .workspace.Hostname }}": template: base:1:29: executing "base" at <.workspace.Hostname>: nil pointer evaluating interface {}.Hostname
         
        ->>> [CLI] bundle init ./urls --profile workspace_classic
        -Initializing for [DATABRICKS_URL]
        -Open [DATABRICKS_URL]/jobs?view=list#top
        -workspace_host: [DATABRICKS_URL]
        -Hostname: 127.0.0.1
        -URL: [DATABRICKS_URL]
        -URL "/jobs": [DATABRICKS_URL]/jobs
        -URL "/jobs?view=list#top": [DATABRICKS_URL]/jobs?view=list#top
        -jobs_url: [DATABRICKS_URL]/jobs
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:[DATABRICKS_URL]/jobs path:/jobs?view=list#top workspace:{127.0.0.1 [DATABRICKS_URL] [WORKSPACE_ID] }]
        -
        -=== Profile workspace_classic_id
        -
        ->>> [CLI] bundle debug render-template-schema ./urls --profile workspace_classic_id
        -{
        -  "welcome_message": "Initializing for [DATABRICKS_URL]?w=[WORKSPACE_ID]",
        -  "success_message": "Open [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[DATABRICKS_URL]/jobs?w=[WORKSPACE_ID]"
        -    },
        -    "path": {
        -      "description": "Path to open on 127.0.0.1",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        -
        ->>> [CLI] bundle init ./urls --profile workspace_classic_id
        -Initializing for [DATABRICKS_URL]?w=[WORKSPACE_ID]
        -Open [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top
        -workspace_host: [DATABRICKS_URL]
        -Hostname: 127.0.0.1
        -URL: [DATABRICKS_URL]?w=[WORKSPACE_ID]
        -URL "/jobs": [DATABRICKS_URL]/jobs?w=[WORKSPACE_ID]
        -URL "/jobs?view=list#top": [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top
        -jobs_url: [DATABRICKS_URL]/jobs?w=[WORKSPACE_ID]
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:[DATABRICKS_URL]/jobs?w=[WORKSPACE_ID] path:/jobs?view=list#top workspace:{127.0.0.1 [DATABRICKS_URL] [WORKSPACE_ID] [WORKSPACE_ID]}]
        -
        -=== Profile workspace_custom_host
        -
        ->>> [CLI] bundle debug render-template-schema ./urls --profile workspace_custom_host
        -{
        -  "welcome_message": "Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]",
        -  "success_message": "Open [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]"
        -    },
        -    "path": {
        -      "description": "Path to open on localhost",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        -
        ->>> [CLI] bundle init ./urls --profile workspace_custom_host
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Open [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top
        -workspace_host: [CUSTOM_HOST]
        -Hostname: localhost
        -URL: [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -URL "/jobs": [CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]
        -URL "/jobs?view=list#top": [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top
        -jobs_url: [CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:[CUSTOM_HOST]/jobs?w=[WORKSPACE_ID] path:/jobs?view=list#top workspace:{localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}]
        -
        -=== Profile no_workspace_id
        -
        ->>> [CLI] bundle debug render-template-schema ./urls --profile no_workspace_id
        -{
        -  "welcome_message": "Initializing for [DATABRICKS_URL]",
        -  "success_message": "Open [DATABRICKS_URL]/jobs?view=list#top",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[DATABRICKS_URL]/jobs"
        -    },
        -    "path": {
        -      "description": "Path to open on 127.0.0.1",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        -
        ->>> [CLI] bundle init ./urls --profile no_workspace_id
        -Initializing for [DATABRICKS_URL]
        -Open [DATABRICKS_URL]/jobs?view=list#top
        -workspace_host: [DATABRICKS_URL]
        -Hostname: 127.0.0.1
        -URL: [DATABRICKS_URL]
        -URL "/jobs": [DATABRICKS_URL]/jobs
        -URL "/jobs?view=list#top": [DATABRICKS_URL]/jobs?view=list#top
        -jobs_url: [DATABRICKS_URL]/jobs
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:[DATABRICKS_URL]/jobs path:/jobs?view=list#top workspace:{127.0.0.1 [DATABRICKS_URL]  }]
        -
        -=== Rerender and init with edited inputs
        -
        ->>> [CLI] bundle debug render-template-schema ./urls --profile workspace_custom_host --input-file input.edited.json
        -{
        -  "welcome_message": "Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]",
        -  "success_message": "Open [CUSTOM_HOST]/pipelines?tab=all&w=[WORKSPACE_ID]",
        -  "properties": {
        -    "jobs_url": {
        -      "description": "Jobs page",
        -      "default": "[CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]"
        -    },
        -    "path": {
        -      "description": "Path to open on localhost",
        -      "default": "/jobs?view=list#top"
        -    }
        -  }
        -}
        -
        ->>> [CLI] bundle init ./urls --profile workspace_custom_host --config-file input.edited.json
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Open [CUSTOM_HOST]/pipelines?tab=all&w=[WORKSPACE_ID]
        -workspace_host: [CUSTOM_HOST]
        -Hostname: localhost
        -URL: [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -URL "/jobs": [CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]
        -URL "/pipelines?tab=all": [CUSTOM_HOST]/pipelines?tab=all&w=[WORKSPACE_ID]
        -jobs_url: https://example.test/my-jobs
        -Root keys: jobs_url path workspace
        -Root data: map[jobs_url:https://example.test/my-jobs path:/pipelines?tab=all workspace:{localhost [CUSTOM_HOST] [WORKSPACE_ID] [WORKSPACE_ID]}]
        -
        -=== Invalid URL paths
        -
        ->>> musterr [CLI] bundle init ./urls --profile workspace_custom_host --config-file input.absolute-url.json
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Error: failed to compute file content for urls.txt.tmpl. template: :6:25: executing "" at <$ws.URL>: error calling URL: workspace URL path "https://other.test/jobs" must be relative to the workspace host
        -
        ->>> musterr [CLI] bundle init ./urls --profile workspace_custom_host --config-file input.workspace-selector.json
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Error: failed to compute file content for urls.txt.tmpl. template: :6:25: executing "" at <$ws.URL>: error calling URL: workspace URL path "/jobs?o=123" must not set the "o" query parameter, the workspace is selected by the profile
        -
        ->>> musterr [CLI] bundle init ./urls --profile workspace_custom_host --config-file input.semicolon.json
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Error: failed to compute file content for urls.txt.tmpl. template: :6:25: executing "" at <$ws.URL>: error calling URL: failed to parse query of workspace URL path "/jobs?w=999;x=1": invalid semicolon separator in query
        -
        -=== Workspace ID from environment variables
        -
        ->>> DATABRICKS_CONFIG_FILE=/dev/null DATABRICKS_HOST=[CUSTOM_HOST] DATABRICKS_WORKSPACE_ID=[WORKSPACE_ID] [CLI] bundle init ./urls
        -Initializing for [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -Open [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top
        -URL: [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -URL "/jobs": [CUSTOM_HOST]/jobs?w=[WORKSPACE_ID]
        -URL "/jobs?view=list#top": [CUSTOM_HOST]/jobs?view=list&w=[WORKSPACE_ID]#top
        -
        -=== Workspace ID from the bundle in the working directory
        -
        ->>> [CLI] bundle init ../urls
        -Initializing for [DATABRICKS_URL]?w=[WORKSPACE_ID]
        -Open [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top
        -URL: [DATABRICKS_URL]?w=[WORKSPACE_ID]
        -URL "/jobs": [DATABRICKS_URL]/jobs?w=[WORKSPACE_ID]
        -URL "/jobs?view=list#top": [DATABRICKS_URL]/jobs?view=list&w=[WORKSPACE_ID]#top
        -
        -=== ID
        -
        ->>> [CLI] bundle init ./id --profile workspace_classic
        -✨ Successfully initialized template
        -ID: [WORKSPACE_ID]
        -
        ->>> [CLI] bundle init ./id --profile workspace_custom_host
        -✨ Successfully initialized template
        -ID: [WORKSPACE_ID]
        -
        ->>> musterr [CLI] bundle init ./id --profile no_workspace_id
        -Error: failed to compute file content for id.txt.tmpl. template: :1:17: executing "" at <.workspace.ID>: error calling ID: cannot determine workspace ID, please set workspace_id in the configuration profile or the DATABRICKS_WORKSPACE_ID environment variable
        -
... (2 more lines truncated, raise DATABRICKS_CLI_TEST_MAX_LOG to see more)

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/dbt-sql-classic/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/dbt-sql-classic/output.txt
        +++ /tmp/TestAcceptbundletemplatesdbt-sql-classicDMS=843871687/002/output.txt
        @@ -4,7 +4,7 @@
         Welcome to the dbt template for Declarative Automation Bundles!
         
         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_url: [DATABRICKS_URL]
        +workspace_host: [DATABRICKS_URL]
         
         📊 Your new project has been created in the 'my_dbt_sql' directory!
         If you already have dbt installed, just type 'cd my_dbt_sql; dbt init' to get started.

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/dbt-sql/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1342
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1083
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:660
        	Error:      	Not equal: 
        	            	expected: "\n>>> [CLI] bundle init dbt-sql --config-file ./input.json --output-dir output\n\nWelcome to the dbt template for Declarative Automation Bundles!\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_url: [DATABRICKS_URL]\n\n📊 Your new project has been created in the 'my_dbt_sql' directory!\nIf you already have dbt installed, just type 'cd my_dbt_sql; dbt init' to get started.\nRefer to the README.md file for full \"getting started\" guide and production setup instructions.\n\n\n>>> [CLI] bundle validate -t dev\nName: my_dbt_sql\nTarget: dev\nWorkspace:\n  Host: [DATABRICKS_URL]\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/my_dbt_sql/dev\n\nValidation OK!\n\n>>> [CLI] bundle validate -t prod\nName: my_dbt_sql\nTarget: prod\nWorkspace:\n  Host: [DATABRICKS_URL]\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/my_dbt_sql/prod\n\nValidation OK!\n"
        	            	actual  : "\n>>> [CLI] bundle init dbt-sql --config-file ./input.json --output-dir output\n\nWelcome to the dbt template for Declarative Automation Bundles!\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: [DATABRICKS_URL]\n\n📊 Your new project has been created in the 'my_dbt_sql' directory!\nIf you already have dbt installed, just type 'cd my_dbt_sql; dbt init' to get started.\nRefer to the README.md file for full \"getting started\" guide and production setup instructions.\n\n\n>>> [CLI] bundle validate -t dev\nName: my_dbt_sql\nTarget: dev\nWorkspace:\n  Host: [DATABRICKS_URL]\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/my_dbt_sql/dev\n\nValidation OK!\n\n>>> [CLI] bundle validate -t prod\nName: my_dbt_sql\nTarget: prod\nWorkspace:\n  Host: [DATABRICKS_URL]\n  User: [USERNAME]\n  Path: /Workspace/Users/[USERNAME]/.bundle/my_dbt_sql/prod\n\nValidation OK!\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -6,3 +6,3 @@
        	            	 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_url: [DATABRICKS_URL]
        	            	+workspace_host: [DATABRICKS_URL]
        	            	 
        	Test:       	TestAccept/bundle/templates/dbt-sql/DMS=
        	Messages:   	bundle/templates/dbt-sql/output.txt vs /tmp/TestAcceptbundletemplatesdbt-sqlDMS=3179725704/002/output.txt
    acceptance_test.go:1342: Diff:
        --- bundle/templates/dbt-sql/output/my_dbt_sql/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdbt-sqlDMS=3179725704/001/output/my_dbt_sql/databricks.yml
        @@ -19,12 +19,12 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
         
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             permissions:
        
    acceptance_test.go:1342: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1342
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1095
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:660
        	Error:      	Not equal: 
        	            	expected: "# This file defines prompts with defaults for dbt initializaton.\n# It is used when the `dbt init` command is invoked.\n#\nfixed:\n  type: databricks\nprompts:\n  host:\n    default: 127.0.0.1\n  token:\n    hint: 'personal access token to use, dapiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n    hide_input: true\n  http_path:\n    hint: 'HTTP path of SQL warehouse to use'\n    default: /sql/2.0/warehouses/f00dcafe\n  catalog:\n    hint: 'initial catalog'\n    default: main\n  schema:\n    hint: 'personal schema where dbt will build objects during development, example: [USERNAME]'\n  threads:\n    hint: 'threads to use during development, 1 or more'\n    type: 'int'\n    default: 4\n"
        	            	actual  : "# This file defines prompts with defaults for dbt initializaton.\n# It is used when the `dbt init` command is invoked.\n#\nfixed:\n  type: databricks\nprompts:\n  host:\n    default: [DATABRICKS_HOST]\n  token:\n    hint: 'personal access token to use, dapiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n    hide_input: true\n  http_path:\n    hint: 'HTTP path of SQL warehouse to use'\n    default: /sql/2.0/warehouses/f00dcafe\n  catalog:\n    hint: 'initial catalog'\n    default: main\n  schema:\n    hint: 'personal schema where dbt will build objects during development, example: [USERNAME]'\n  threads:\n    hint: 'threads to use during development, 1 or more'\n    type: 'int'\n    default: 4\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -7,3 +7,3 @@
        	            	   host:
        	            	-    default: 127.0.0.1
        	            	+    default: [DATABRICKS_HOST]
        	            	   token:
        	Test:       	TestAccept/bundle/templates/dbt-sql/DMS=
        	Messages:   	bundle/templates/dbt-sql/output/my_dbt_sql/profile_template.yml vs /tmp/TestAcceptbundletemplatesdbt-sqlDMS=3179725704/001/output/my_dbt_sql/profile_template.yml

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-minimal/extra-workspace-input/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1342
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1083
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:660
        	Error:      	Not equal: 
        	            	expected: "\n>>> [CLI] bundle init default-minimal --config-file ./input.json\nWelcome to the minimal Declarative Automation Bundle template!\n\nThis template creates a minimal project structure without sample code, ideal for advanced users.\n(For getting started with Python or SQL code, use the default-python or default-sql templates instead.)\n\nYour workspace at [DATABRICKS_URL] is used for initialization.\n(See https://docs.databricks.com/dev-tools/cli/profiles.html for how to change your profile.)\n\n✨ Your new project has been created in the 'my_default_minimal' directory!\n\nTo get started, refer to the project README.md file and the documentation at https://docs.databricks.com/dev-tools/bundles/index.html.\n\n>>> grep host: my_default_minimal/databricks.yml\n      host: \"[DATABRICKS_URL]\"\n      host: \"[DATABRICKS_URL]\"\n"
        	            	actual  : "\n>>> [CLI] bundle init default-minimal --config-file ./input.json\nWelcome to the minimal Declarative Automation Bundle template!\n\nThis template creates a minimal project structure without sample code, ideal for advanced users.\n(For getting started with Python or SQL code, use the default-python or default-sql templates instead.)\n\nYour workspace at [DATABRICKS_URL] is used for initialization.\n(See https://docs.databricks.com/dev-tools/cli/profiles.html for how to change your profile.)\n\n✨ Your new project has been created in the 'my_default_minimal' directory!\n\nTo get started, refer to the project README.md file and the documentation at https://docs.databricks.com/dev-tools/bundles/index.html.\n\n>>> grep host: my_default_minimal/databricks.yml\n      host: [DATABRICKS_URL]\n      host: [DATABRICKS_URL]\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -15,4 +15,4 @@
        	            	 >>> grep host: my_default_minimal/databricks.yml
        	            	-      host: "[DATABRICKS_URL]"
        	            	-      host: "[DATABRICKS_URL]"
        	            	+      host: [DATABRICKS_URL]
        	            	+      host: [DATABRICKS_URL]
        	            	 
        	Test:       	TestAccept/bundle/templates/default-minimal/extra-workspace-input/DMS=
        	Messages:   	bundle/templates/default-minimal/extra-workspace-input/output.txt vs /tmp/TestAcceptbundletemplatesdefault-minimalextra-workspace-inpu1138423121/002/output.txt

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-minimal/profiles/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-minimal/profiles/output.txt
        +++ /tmp/TestAcceptbundletemplatesdefault-minimalprofilesDMS=3126842817/002/output.txt
        @@ -15,8 +15,8 @@
         To get started, refer to the project README.md file and the documentation at https://docs.databricks.com/dev-tools/bundles/index.html.
         
         >>> grep host: databricks.yml
        -      host: "[DATABRICKS_URL]"
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
        +      host: [DATABRICKS_URL]
         
         >>> DATABRICKS_BUNDLE_STRICT_PROFILE_MATCH=1 [CLI] bundle validate -t dev
         Name: my_default_minimal
        @@ -41,7 +41,7 @@
         This template creates a minimal project structure without sample code, ideal for advanced users.
         (For getting started with Python or SQL code, use the default-python or default-sql templates instead.)
         
        -Your workspace at [CUSTOM_HOST]?w=[WORKSPACE_ID] is used for initialization.
        +Your workspace at [CUSTOM_HOST] is used for initialization.
         (See https://docs.databricks.com/dev-tools/cli/profiles.html for how to change your profile.)
         
         ✨ Your new project has been created in the 'my_default_minimal' directory!
        @@ -49,20 +49,17 @@
         To get started, refer to the project README.md file and the documentation at https://docs.databricks.com/dev-tools/bundles/index.html.
         
         >>> grep host: databricks.yml
        -      host: "[CUSTOM_HOST]?w=[WORKSPACE_ID]"
        -      host: "[CUSTOM_HOST]?w=[WORKSPACE_ID]"
        +      host: [CUSTOM_HOST]
        +      host: [CUSTOM_HOST]
         
         >>> DATABRICKS_BUNDLE_STRICT_PROFILE_MATCH=1 [CLI] bundle validate -t dev
        +Error: cannot resolve bundle auth configuration: resolve: strict profile matching: host [CUSTOM_HOST] requires a workspace ID; set workspace.workspace_id or add ?o=<workspace-id> to workspace.host. Config: host=[CUSTOM_HOST], config_file=[TEST_TMP_DIR]/.databrickscfg, databricks_cli_path=[CLI]. Env: DATABRICKS_CONFIG_FILE, DATABRICKS_CLI_PATH
        +
         Name: my_default_minimal
         Target: dev
         Workspace:
        -  Host: [CUSTOM_HOST]?w=[WORKSPACE_ID]
        -  User: [USERNAME]
        -  Path: /Workspace/Users/[USERNAME]/.bundle/my_default_minimal/dev
        +  Host: [CUSTOM_HOST]
         
        -Validation OK!
        +Found 1 error
         
        ->>> [CLI] bundle deploy -t dev
        -Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/my_default_minimal/dev/files...
        -Files: 10 uploaded, 0 deleted
        -Resources: 0 created, 0 changed, 0 deleted, 0 unchanged
        +Exit code: 1
        
    acceptance_test.go:1132: Test produced unexpected files:
        my_default_minimal/.gitignore
        my_default_minimal/.vscode/__builtins__.pyi
        my_default_minimal/.vscode/extensions.json
        my_default_minimal/.vscode/settings.json
        my_default_minimal/AGENTS.md
        my_default_minimal/README.md
        my_default_minimal/fixtures/.gitkeep
        my_default_minimal/pyproject.toml
        my_default_minimal/tests/conftest.py

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-minimal/python/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-minimal/python/output/my_default_minimal/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdefault-minimalpythonDMS=3534916807/001/output/my_default_minimal/databricks.yml
        @@ -23,14 +23,14 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
             variables:
               catalog: hive_metastore
               schema: ${workspace.current_user.short_name}
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             variables:

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-minimal/skip/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-minimal/skip/output/my_default_minimal/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdefault-minimalskipDMS=505480370/001/output/my_default_minimal/databricks.yml
        @@ -23,14 +23,14 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
             variables:
               catalog: hive_metastore
               schema: ${workspace.current_user.short_name}
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             variables:

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-minimal/sql/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-minimal/sql/output/my_default_minimal/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdefault-minimalsqlDMS=1457651428/001/output/my_default_minimal/databricks.yml
        @@ -23,14 +23,14 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
             variables:
               catalog: hive_metastore
               schema: ${workspace.current_user.short_name}
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             variables:

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-python/classic/DMS=/READPLAN=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-python/classic/out.compare-vs-serverless.diff
        +++ /tmp/TestAcceptbundletemplatesdefault-pythonclassicDMS=READPLAN2548394907/001/out.compare-vs-serverless.diff
        @@ -1,12 +1,22 @@
         --- [TESTROOT]/bundle/templates/default-python/classic/../serverless/output/my_default_python/databricks.yml
         +++ output/my_default_python/databricks.yml
        -@@ -33,4 +33,6 @@
        +@@ -29,12 +29,14 @@
        +     default: true
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +     variables:
                catalog: hive_metastore
                schema: ${workspace.current_user.short_name}
         +    presets:
         +      artifacts_dynamic_version: true
            prod:
              mode: production
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +       # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
        +       root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
         --- [TESTROOT]/bundle/templates/default-python/classic/../serverless/output/my_default_python/resources/my_default_python_etl.pipeline.yml
         +++ output/my_default_python/resources/my_default_python_etl.pipeline.yml
         @@ -5,8 +5,7 @@
        
    acceptance_test.go:1342: Diff:
        --- bundle/templates/default-python/classic/output/my_default_python/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdefault-pythonclassicDMS=READPLAN2548394907/001/output/my_default_python/databricks.yml
        @@ -28,7 +28,7 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
             variables:
               catalog: hive_metastore
               schema: ${workspace.current_user.short_name}
        @@ -37,7 +37,7 @@
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             variables:

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-python/classic/DMS=/READPLAN=1: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-python/classic/out.compare-vs-serverless.diff
        +++ /tmp/TestAcceptbundletemplatesdefault-pythonclassicDMS=READPLAN618195750/001/out.compare-vs-serverless.diff
        @@ -1,12 +1,22 @@
         --- [TESTROOT]/bundle/templates/default-python/classic/../serverless/output/my_default_python/databricks.yml
         +++ output/my_default_python/databricks.yml
        -@@ -33,4 +33,6 @@
        +@@ -29,12 +29,14 @@
        +     default: true
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +     variables:
                catalog: hive_metastore
                schema: ${workspace.current_user.short_name}
         +    presets:
         +      artifacts_dynamic_version: true
            prod:
              mode: production
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +       # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
        +       root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
         --- [TESTROOT]/bundle/templates/default-python/classic/../serverless/output/my_default_python/resources/my_default_python_etl.pipeline.yml
         +++ output/my_default_python/resources/my_default_python_etl.pipeline.yml
         @@ -5,8 +5,7 @@
        
    acceptance_test.go:1342: Diff:
        --- bundle/templates/default-python/classic/output/my_default_python/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdefault-pythonclassicDMS=READPLAN618195750/001/output/my_default_python/databricks.yml
        @@ -28,7 +28,7 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
             variables:
               catalog: hive_metastore
               schema: ${workspace.current_user.short_name}
        @@ -37,7 +37,7 @@
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             variables:

latest (v1.24.0):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-python/classic/output/my_default_python/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdefault-pythonclassicDMS=READPLAN2881831486/001/output/my_default_python/databricks.yml
        @@ -28,7 +28,7 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
             variables:
               catalog: hive_metastore
               schema: ${workspace.current_user.short_name}
        @@ -37,7 +37,7 @@
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             variables:
        
    acceptance_test.go:1342: Diff:
        --- bundle/templates/default-python/classic/out.compare-vs-serverless.diff
        +++ /tmp/TestAcceptbundletemplatesdefault-pythonclassicDMS=READPLAN2881831486/001/out.compare-vs-serverless.diff
        @@ -1,12 +1,22 @@
         --- [TESTROOT]/bundle/templates/default-python/classic/../serverless/output/my_default_python/databricks.yml
         +++ output/my_default_python/databricks.yml
        -@@ -33,4 +33,6 @@
        +@@ -29,12 +29,14 @@
        +     default: true
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +     variables:
                catalog: hive_metastore
                schema: ${workspace.current_user.short_name}
         +    presets:
         +      artifacts_dynamic_version: true
            prod:
              mode: production
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +       # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
        +       root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
         --- [TESTROOT]/bundle/templates/default-python/classic/../serverless/output/my_default_python/resources/my_default_python_etl.pipeline.yml
         +++ output/my_default_python/resources/my_default_python_etl.pipeline.yml
         @@ -5,8 +5,7 @@
TestAccept/bundle/templates/default-python/serverless-customcatalog/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-python/serverless-customcatalog/output.txt
        +++ /tmp/TestAcceptbundletemplatesdefault-pythonserverless-customcata3195011693/002/output.txt
        @@ -15,14 +15,21 @@
         >>> diff.py [TESTROOT]/bundle/templates/default-python/serverless-customcatalog/../serverless/output output/
         --- [TESTROOT]/bundle/templates/default-python/serverless-customcatalog/../serverless/output/my_default_python/databricks.yml
         +++ output/my_default_python/databricks.yml
        -@@ -31,5 +31,5 @@
        -       host: "[DATABRICKS_URL]"
        +@@ -29,16 +29,16 @@
        +     default: true
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
              variables:
         -      catalog: hive_metastore
         +      catalog: customcatalog
                schema: ${workspace.current_user.short_name}
            prod:
        -@@ -40,5 +40,5 @@
        +     mode: production
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +       # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
                root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
              variables:
         -      catalog: hive_metastore

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-python/serverless/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-python/serverless/output/my_default_python/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdefault-pythonserverlessDMS=2611435274/001/output/my_default_python/databricks.yml
        @@ -28,14 +28,14 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
             variables:
               catalog: hive_metastore
               schema: ${workspace.current_user.short_name}
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             variables:
        
FAIL

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-scala-classic/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: Diff:
        --- bundle/templates/default-scala-classic/output.txt
        +++ /tmp/TestAcceptbundletemplatesdefault-scala-classicDMS=2201906110/002/output.txt
        @@ -4,7 +4,7 @@
         Welcome to the default-scala template for Declarative Automation Bundles!
         
         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_url: [DATABRICKS_URL]
        +workspace_host: [DATABRICKS_URL]
         
         ✨ Your new project has been created in the 'my_default_scala' directory!
         
        @@ -23,6 +23,29 @@
         +If you want to use an existing cluster instead, replace `job_cluster_key` in the task configuration with `existing_cluster_id: <your_cluster_id>` in the job YAML file.
         +
         +You can also customize the cluster configuration (node type, worker count, Spark version) in the `job_clusters` section of the job YAML file.
        +--- [TESTROOT]/bundle/templates/default-scala-classic/../default-scala/output/my_default_scala/databricks.yml
        ++++ actual/my_default_scala/databricks.yml
        +@@ -15,5 +15,5 @@
        +
        + workspace:
        +-  host: "[DATABRICKS_URL]"
        ++  host: [DATABRICKS_URL]
        +   artifact_path: /Volumes/test-folder/${bundle.name}/${bundle.target}/${workspace.current_user.short_name}
        +
        +@@ -35,5 +35,5 @@
        +     default: true
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +     variables:
        +       catalog: main
        +@@ -43,5 +43,5 @@
        +     mode: production
        +     workspace:
        +-      host: "[DATABRICKS_URL]"
        ++      host: [DATABRICKS_URL]
        +       # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
        +       root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
         --- [TESTROOT]/bundle/templates/default-scala-classic/../default-scala/output/my_default_scala/resources/my_default_scala.job.yml
         +++ actual/my_default_scala/resources/my_default_scala.job.yml
         @@ -12,4 +12,5 @@

latest (v1.24.0): same output as main (c0e1859)

TestAccept/bundle/templates/default-scala/DMS=: branch ✅ | main (c0e1859) ❌ | latest (v1.24.0) ❌

main (c0e1859):

acceptance_test.go:1342: 
        	Error Trace:	/home/runner/work/cli/cli/libs/testdiff/testdiff.go:22
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1342
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:1083
        	            				/home/runner/work/cli/cli/acceptance/acceptance_test.go:660
        	Error:      	Not equal: 
        	            	expected: "\n>>> [CLI] bundle init default-scala --config-file ./input.json --output-dir output\n\nWelcome to the default-scala template for Declarative Automation Bundles!\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_url: [DATABRICKS_URL]\n\n✨ Your new project has been created in the 'my_default_scala' directory!\n\nPlease refer to the README.md file for \"getting started\" instructions.\nSee also the documentation at https://docs.databricks.com/dev-tools/bundles/index.html.\n"
        	            	actual  : "\n>>> [CLI] bundle init default-scala --config-file ./input.json --output-dir output\n\nWelcome to the default-scala template for Declarative Automation Bundles!\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: [DATABRICKS_URL]\n\n✨ Your new project has been created in the 'my_default_scala' directory!\n\nPlease refer to the README.md file for \"getting started\" instructions.\nSee also the documentation at https://docs.databricks.com/dev-tools/bundles/index.html.\n"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -6,3 +6,3 @@
        	            	 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_url: [DATABRICKS_URL]
        	            	+workspace_host: [DATABRICKS_URL]
        	            	 
        	Test:       	TestAccept/bundle/templates/default-scala/DMS=
        	Messages:   	bundle/templates/default-scala/output.txt vs /tmp/TestAcceptbundletemplatesdefault-scalaDMS=1227375099/002/output.txt
    acceptance_test.go:1342: Diff:
        --- bundle/templates/default-scala/output/my_default_scala/databricks.yml
        +++ /tmp/TestAcceptbundletemplatesdefault-scalaDMS=1227375099/001/output/my_default_scala/databricks.yml
        @@ -14,7 +14,7 @@
             description: The schema to use
         
         workspace:
        -  host: "[DATABRICKS_URL]"
        +  host: [DATABRICKS_URL]
           artifact_path: /Volumes/test-folder/${bundle.name}/${bundle.target}/${workspace.current_user.short_name}
         
         artifacts:
        @@ -34,7 +34,7 @@
             mode: development
             default: true
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
             variables:
               catalog: main
               schema: ${workspace.current_user.short_name}
        @@ -42,7 +42,7 @@
           prod:
             mode: production
             workspace:
        -      host: "[DATABRICKS_URL]"
        +      host: [DATABRICKS_URL]
               # We explicitly deploy to /Workspace/Users/[USERNAME] to make sure we only have a single copy.
               root_path: /Workspace/Users/[USERNAME]/.bundle/${bundle.name}/${bundle.target}
             permissions:

latest (v1.24.0): same output as main (c0e1859)

5 more failure details omitted, see the full report in the run.

@pavloKozlov
pavloKozlov force-pushed the workspace-context-template-data branch from b931f85 to 5f2f6db Compare November 4, 2026 15:41
@pavloKozlov
pavloKozlov force-pushed the workspace-context-builtin-templates branch from d6dcf5e to e702534 Compare November 4, 2026 15:41
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: c6c9291

Run: 41876974438

Env 🔄​flaky ✅​pass 🙈​skip Time
✅​ aws linux-2core-8gb 271 43 6:06
✅​ aws-windows-latest-4core-16gb 273 41 3:15
✅​ azure linux-2core-8gb 270 43 5:24
✅​ azure-windows-latest-4core-16gb 272 41 2:54
✅​ gcp linux-2core-8gb 271 43 5:30
🔄​ gcp-windows-latest-4core-16gb 1 272 41 4:06
Test Name gcp-windows-latest-4core-16gb
🔄​ TestAccept 🔄​f
Top 3 slowest tests (at least 2 minutes):
duration env testname
3:55 azure linux-2core-8gb TestAccept
3:54 gcp linux-2core-8gb TestAccept
3:53 aws linux-2core-8gb TestAccept

@pavloKozlov
pavloKozlov force-pushed the workspace-context-builtin-templates branch 2 times, most recently from e64ff0e to 825b44d Compare November 4, 2026 17:06
pavloKozlov and others added 4 commits November 4, 2026 17:17
Built-in templates, except dbt-sql, write the workspace URL to
workspace.host. It has ?w=<id> when the profile or an environment variable
sets the workspace ID. Other profiles keep the same host as before. The
value is quoted so the YAML stays valid for any URL. Template schemas keep
workspace_host.

Co-authored-by: Isaac <no-reply@databricks.com>
The welcome messages showed workspace_host, which has no workspace ID. They
now show the URL that the bundle uses, so they match workspace.host in the
generated databricks.yml. Messages that printed "workspace_host:" now print
"workspace_url:".

Co-authored-by: Isaac <no-reply@databricks.com>
The bundle host now comes from .workspace.URL like in the other built-in
templates. dbt jobs get their host from Databricks, so they are not
affected. The dbt profile default uses .workspace.Hostname, which gives the
same value as stripping the scheme from workspace_host. No built-in
template uses workspace_host now.

Co-authored-by: Isaac <no-reply@databricks.com>
The dbt profile default no longer has the port of the test server.
Databricks hosts don't have an explicit port, so for them the default is the
same as before.

Co-authored-by: Isaac <no-reply@databricks.com>
@pavloKozlov
pavloKozlov force-pushed the workspace-context-builtin-templates branch from 825b44d to c6c9291 Compare November 4, 2026 17:21

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants