Skip to content

Make bundle sync default to text output, matching sync - #6568

Merged
janniklasrose merged 2 commits into
mainfrom
jan-rose_data/janniklasrose/align-output-bundle-sync
Sep 8, 2026
Merged

janniklasrose merged 2 commits into
mainfrom
jan-rose_data/janniklasrose/align-output-bundle-sync

Conversation

@janniklasrose

Copy link
Copy Markdown
Member

Why

databricks bundle sync was silent by default, while databricks sync defaulted to text output. A plain databricks bundle sync printed no file actions, so with --dry-run the only output was Running in dry-run mode. No actual changes will be made. — making it look like the real command would do nothing. Reported as #6499.

The divergence is not a deliberate design decision. When the two commands were first split in #207 (Feb 2023) they were both silent — neither wired up any output handler — and that PR explicitly framed the split as temporary ("Once the VS Code extension is bundle aware they can again be consolidated"). Standalone sync later gained a text-default --output; bundle sync only got an opt-in --output in #1853 (Oct 2024), which kept the pre-existing silence as the no-flag default. So the silence was incidental and never revisited.

Changes

  • cmd/bundle/sync.go: install the sync output handler from the resolved root --output type (which defaults to text) instead of gating on the flag being explicitly .Changed. bundle sync now behaves like sync; --output json is unchanged. Removed the now-inaccurate comment that went with the guard.
  • cmd/bundle/sync_test.go: the old unit test pinned "handler only when --output set"; updated it to assert the handler is installed for the default (text) and for explicit -o json.
  • acceptance/bundle/sync-default-output/: new acceptance test covering bundle sync with no --output flag — the case the change alters, which had no coverage. The two existing bundle sync acceptance tests both pass --output text, so they are unaffected.

Tests

  • go test ./cmd/bundle/ passes.
  • New acceptance test passes across all inherited matrix variants (terraform, direct, direct+DMS).
  • Full local acceptance suite: the only failures were two pre-existing load-induced timeout flakes (clusters/.../resize-autoscale, permissions/pipelines), neither of which touches bundle sync; both confirmed passing in isolation.

Closes #6499

This pull request and its description were written by Isaac.

janniklasrose and others added 2 commits September 8, 2026 08:41
`databricks bundle sync` was silent by default while `databricks sync`
defaulted to text output. A plain `bundle sync` printed nothing, so a
`--dry-run` looked like it would do nothing at all (#6499).

Install the sync output handler from the resolved root --output type
(which defaults to text) instead of gating on the flag being explicitly
set, so `bundle sync` now behaves like `sync`. `--output json` is
unchanged. This also restores the output parity anticipated when the two
commands were first split in #207.

Add an acceptance test for the no-flag default (previously uncovered) and
update the unit test that pinned the old silent-by-default contract.

Co-authored-by: Isaac <[email protected]>
@janniklasrose
janniklasrose marked this pull request as ready for review September 8, 2026 11:59
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 68eb993

Run: 34223661123

Env 🔄​flaky 💚​RECOVERED ✅​pass 🙈​skip Time
💚​ aws linux 1 275 16 7:14
💚​ aws windows 1 277 14 6:46
💚​ azure linux 1 274 16 10:06
🔄​ azure windows 2 1 274 14 7:20
💚​ gcp linux 1 275 16 10:18
💚​ gcp windows 1 277 14 7:13
Test Name aws linux aws windows azure linux azure windows gcp linux gcp windows
💚​ TestAccept 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
🔄​ TestFsCpFileToDirWithOverwriteFlag ✅​p ✅​p ✅​p 🔄​f ✅​p ✅​p
🔄​ TestFsCpFileToDirWithOverwriteFlag/dbfs_to_uc-volumes ✅​p ✅​p ✅​p 🔄​f ✅​p ✅​p
Top 6 slowest tests (at least 2 minutes):
duration env testname
3:25 aws windows TestAccept
3:16 azure windows TestAccept
3:16 gcp windows TestAccept
2:38 gcp windows TestFilerWorkspaceFilesExtensionsReadDir
2:23 gcp linux TestFilerRecursiveDelete/workspace_files_extensions
2:09 azure windows TestFilerRecursiveDelete/workspace_files_extensions

@janniklasrose
janniklasrose added this pull request to the merge queue Sep 8, 2026
Merged via the queue into main with commit 4f2dad3 Sep 8, 2026
37 checks passed
@janniklasrose
janniklasrose deleted the jan-rose_data/janniklasrose/align-output-bundle-sync branch September 8, 2026 14:56
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 4f2dad3

Run: 34241619118

Env ❌​FAIL 🤯​MISS 🙈​SKIP ✅​pass 🙈​skip Time
❌​ aws linux 13 594 1 901 988 357:05
❌​ aws windows 25 433 1 956 1011 348:54
❌​ azure linux 47 358 1 928 1034 356:55
❌​ azure windows 49 335 1 855 1057 349:59
❌​ gcp linux 46 367 1 906 1038 357:01
❌​ gcp windows 39 303 1 883 1061 351:54
1039 interesting tests: 897 MISS, 141 FAIL, 1 SKIP
Test Name aws linux aws windows azure linux azure windows gcp linux gcp windows
🤯​ TestAccept 🤯​M 🤯​M 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/config_edits 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_fields 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/json_status_missing_state 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/json_status_missing_state/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/json_status_selectors 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/json_status_selectors/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/json_status_selectors/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/json_status_selectors/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_files 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources 🤯​M 🙈​s 🤯​M 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_json 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/select_basic 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/select_multiple 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/skip_deployment 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/skip_deployment/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/skip_deployment/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/skip_deployment/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/target_override 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert 🤯​M 🙈​s ✅​p 🙈​s 🤯​M 🙈​s
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p 🤯​M
🤯​ TestAccept/bundle/debug/fetch-repository-info 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/debug/fetch-repository-info/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/debug/fetch-repository-info/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/mlops-stacks 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/snapshot-comparison ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/snapshot-comparison/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/spark-jar-task 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🤯​M ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/alert ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/catalog ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/catalog/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/cluster ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/READPLAN= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/READPLAN=1 ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=/READPLAN= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/READPLAN= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/READPLAN=1 ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=/READPLAN= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/experiment ✅​p ✅​p ✅​p 🤯​M 🤯​M ✅​p
🤯​ TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M ✅​p
🤯​ TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M ✅​p
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/pipelines/recreate ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/registered-model ✅​p ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/registered-model/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/registered-model/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p ✅​p 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/schema ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/schema/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/schema/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/secret-scope ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
🤯​ TestAccept/bundle/deployment/bind/secret-scope/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ✅​p ✅​p 🤯​M 🤯​M 🤯​M
Top 50 slowest tests (at least 2 minutes):
duration env testname
24:38 aws linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
18:58 aws linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
18:14 gcp windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
17:01 aws linux TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
16:11 gcp linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
15:56 aws windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
15:25 aws linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1
14:29 azure linux TestAccept/bundle/quiet-levels/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
14:17 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
14:04 aws windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
13:13 aws linux TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
12:57 aws linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
12:53 aws windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
12:23 azure linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
12:11 aws windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
12:02 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
11:59 azure windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
11:46 aws windows TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
11:25 azure windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
11:16 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
11:10 aws windows TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
11:04 aws linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
10:55 aws windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1
10:48 gcp windows TestAccept/bundle/local_state_staleness/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=
10:36 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
10:34 azure linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
10:25 aws linux TestAccept/bundle/resources/clusters/resize-terminated-fallback/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
10:19 gcp windows TestAccept/bundle/quiet-levels/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
10:10 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
10:09 aws linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
10:04 gcp linux TestAccept/bundle/resources/registered_models/basic/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
10:00 azure windows TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=/UV_PYTHON=3.12
9:58 gcp linux TestAccept/bundle/resources/apps/lifecycle-started-omitted/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:55 azure linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:54 azure windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:53 gcp linux TestAccept/bundle/quiet-levels/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=
9:46 aws linux TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
9:38 aws windows TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:27 gcp linux TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
9:26 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1
9:25 aws linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:21 azure windows TestAccept/bundle/quiet-levels/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
9:19 aws windows TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
9:16 aws linux TestAccept/bundle/quiet-levels/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=
9:16 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
9:14 gcp windows TestAccept/bundle/resources/registered_models/basic/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
9:12 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
8:51 azure linux TestAccept/bundle/resources/catalogs/basic/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:48 aws linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=
8:45 gcp linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
(866 table rows omitted to keep the report under 60000 bytes)

deco-sdk-tagging Bot added a commit that referenced this pull request Sep 9, 2026
## Release v1.16.0

### CLI

 * `aitools install` now registers the official Claude marketplace if it is missing before installing the Databricks Claude plugin. ([#6485](#6485))
 * `databricks aitools install --output json` now reports an `error_category` for a failed or skipped install (per agent, and at the top level for a failure with no per-agent entry), giving coding agents and CI a stable classification of why an install did not complete. ([#6482](#6482))
 * `databricks aitools install` honors `--output json`, emitting a structured `{scope, agents[...]}` document that reports each agent's delivery and install status so coding agents and CI can consume the result without scraping the text output. JSON mode requires `--scope` and `--agents` so the command runs without interactive prompts. ([#6481](#6481))
 * `databricks bundle sync` now prints sync progress (`Action: PUT`, `Uploaded ...`) by default, matching `databricks sync`. Previously it was silent unless `--output` was passed. Use `--output json` for machine-readable output. ([#6568](#6568))
 * Support major-only DBR runtime versions such as `19.x-scala2.13` in the cluster picker used by `databricks auth login --configure-cluster` and `databricks labs`. ([#6574](#6574))
 * Deprecated the `databricks environments setup-local --constraints-only` flag in favour of the orthogonal `--no-dbconnect`; the flag still works as a hidden alias but is hidden from `--help` and prints a one-line deprecation notice, and will be removed in a later release. ([#6470](#6470))
 * Add orthogonal `--no-constraints` and `--no-dbconnect` flags to `databricks environments setup-local`: `--no-constraints` skips writing the remote Python-version and dependency pins, and `--no-dbconnect` skips the databricks-connect dependency. ([#6464](#6464))
 * `databricks environments setup-local` now reports a distinct `E_PROVISION_CONFLICT` error code in `--output json` when the project's dependencies conflict with the pins written for the target environment, making the requirements unsatisfiable (the same conflict surfaced as a `W_USER_CONSTRAINT_CONFLICT` warning); it is reported after the project files are written, without attempting the doomed provisioning, while other provisioning failures continue to report `E_PROVISION`. ([#6479](#6479))
 * `databricks ssh connect` and `ssh setup` now verify the tunnel's SSH host key against the key the workspace published for the connection, recorded in `~/.databricks/ssh-tunnel-known-hosts/<name>` instead of `~/.ssh/known_hosts`. Reconnecting with a name used before no longer fails with `Host key verification failed` when the compute behind that name changed, and no longer needs a manual `ssh-keygen -R`; host blocks written by an earlier `databricks ssh setup` pick this up once you re-run it. ([#6557](#6557))
 * Stop `databricks ssh connect --ide` from adding a duplicate entry to the IDE's Remote Explorer on every connect: the remote authority is now the SSH host alias alone, instead of embedding the per-instance remote OS user. ([#6550](#6550))
 * Add `--max-clients` and `--server-timeout` flags to `databricks ssh setup`, and `--server-timeout` to `databricks ssh connect`. Both are fixed when the SSH tunnel server job is submitted, so `ssh setup` now serializes them into the generated `ProxyCommand` instead of falling back to the built-in defaults. ([#6547](#6547))
 * `ssh connect` sessions no longer end when the tunnel's websocket connection is lost. The CLI reattaches to the running session and replays the bytes that were missed, so the shell and everything running in it stay intact, and a transient failure to open a replacement connection for the periodic auth refresh is retried rather than ending the session. Reattaching requires an SSH server started by a CLI that supports it; against an older server the connection behaves as before. ([#6558](#6558))

### Bundles

 * Added PyDABs (Python) support for secrets: `Resources.add_secret` and the `secret_mutator` decorator. ([#6553](#6553))
 * Fix job and pipeline environment dependencies with a `*` version wildcard (e.g. `numpy==2.5.*`) being treated as local file paths. ([#6555](#6555))
 * Add the `postgres_snapshot_schedules` bundle resource for managing a Lakebase Postgres branch's automatic-snapshot schedule (direct deployment engine only). ([#6449](#6449))

### Dependency Updates

 * Bump `github.com/databricks/databricks-sdk-go` from v0.175.0 to v0.177.0. ([#6448](#6448))
 * Bump Terraform provider from v1.128.0 to v1.131.0. ([#6544](#6544))
janniklasrose added a commit that referenced this pull request Sep 15, 2026
## Why

`databricks bundle sync` was silent by default, while `databricks sync`
defaulted to `text` output. A plain `databricks bundle sync` printed no
file actions, so with `--dry-run` the only output was `Running in
dry-run mode. No actual changes will be made.` — making it look like the
real command would do nothing. Reported as #6499.

The divergence is not a deliberate design decision. When the two
commands were first split in #207 (Feb 2023) they were **both** silent —
neither wired up any output handler — and that PR explicitly framed the
split as temporary ("Once the VS Code extension is bundle aware they can
again be consolidated"). Standalone `sync` later gained a text-default
`--output`; `bundle sync` only got an opt-in `--output` in #1853 (Oct
2024), which kept the pre-existing silence as the no-flag default. So
the silence was incidental and never revisited.

## Changes

- `cmd/bundle/sync.go`: install the sync output handler from the
resolved root `--output` type (which defaults to `text`) instead of
gating on the flag being explicitly `.Changed`. `bundle sync` now
behaves like `sync`; `--output json` is unchanged. Removed the
now-inaccurate comment that went with the guard.
- `cmd/bundle/sync_test.go`: the old unit test pinned "handler only when
`--output` set"; updated it to assert the handler is installed for the
default (text) and for explicit `-o json`.
- `acceptance/bundle/sync-default-output/`: new acceptance test covering
`bundle sync` with no `--output` flag — the case the change alters,
which had no coverage. The two existing `bundle sync` acceptance tests
both pass `--output text`, so they are unaffected.

## Tests

- `go test ./cmd/bundle/` passes.
- New acceptance test passes across all inherited matrix variants
(terraform, direct, direct+DMS).
- Full local acceptance suite: the only failures were two pre-existing
load-induced timeout flakes (`clusters/.../resize-autoscale`,
`permissions/pipelines`), neither of which touches `bundle sync`; both
confirmed passing in isolation.

Closes #6499

This pull request and its description were written by Isaac.

---------

Co-authored-by: Isaac <[email protected]>
janniklasrose pushed a commit that referenced this pull request Sep 15, 2026
## Release v1.16.0

### CLI

 * `aitools install` now registers the official Claude marketplace if it is missing before installing the Databricks Claude plugin. ([#6485](#6485))
 * `databricks aitools install --output json` now reports an `error_category` for a failed or skipped install (per agent, and at the top level for a failure with no per-agent entry), giving coding agents and CI a stable classification of why an install did not complete. ([#6482](#6482))
 * `databricks aitools install` honors `--output json`, emitting a structured `{scope, agents[...]}` document that reports each agent's delivery and install status so coding agents and CI can consume the result without scraping the text output. JSON mode requires `--scope` and `--agents` so the command runs without interactive prompts. ([#6481](#6481))
 * `databricks bundle sync` now prints sync progress (`Action: PUT`, `Uploaded ...`) by default, matching `databricks sync`. Previously it was silent unless `--output` was passed. Use `--output json` for machine-readable output. ([#6568](#6568))
 * Support major-only DBR runtime versions such as `19.x-scala2.13` in the cluster picker used by `databricks auth login --configure-cluster` and `databricks labs`. ([#6574](#6574))
 * Deprecated the `databricks environments setup-local --constraints-only` flag in favour of the orthogonal `--no-dbconnect`; the flag still works as a hidden alias but is hidden from `--help` and prints a one-line deprecation notice, and will be removed in a later release. ([#6470](#6470))
 * Add orthogonal `--no-constraints` and `--no-dbconnect` flags to `databricks environments setup-local`: `--no-constraints` skips writing the remote Python-version and dependency pins, and `--no-dbconnect` skips the databricks-connect dependency. ([#6464](#6464))
 * `databricks environments setup-local` now reports a distinct `E_PROVISION_CONFLICT` error code in `--output json` when the project's dependencies conflict with the pins written for the target environment, making the requirements unsatisfiable (the same conflict surfaced as a `W_USER_CONSTRAINT_CONFLICT` warning); it is reported after the project files are written, without attempting the doomed provisioning, while other provisioning failures continue to report `E_PROVISION`. ([#6479](#6479))
 * `databricks ssh connect` and `ssh setup` now verify the tunnel's SSH host key against the key the workspace published for the connection, recorded in `~/.databricks/ssh-tunnel-known-hosts/<name>` instead of `~/.ssh/known_hosts`. Reconnecting with a name used before no longer fails with `Host key verification failed` when the compute behind that name changed, and no longer needs a manual `ssh-keygen -R`; host blocks written by an earlier `databricks ssh setup` pick this up once you re-run it. ([#6557](#6557))
 * Stop `databricks ssh connect --ide` from adding a duplicate entry to the IDE's Remote Explorer on every connect: the remote authority is now the SSH host alias alone, instead of embedding the per-instance remote OS user. ([#6550](#6550))
 * Add `--max-clients` and `--server-timeout` flags to `databricks ssh setup`, and `--server-timeout` to `databricks ssh connect`. Both are fixed when the SSH tunnel server job is submitted, so `ssh setup` now serializes them into the generated `ProxyCommand` instead of falling back to the built-in defaults. ([#6547](#6547))
 * `ssh connect` sessions no longer end when the tunnel's websocket connection is lost. The CLI reattaches to the running session and replays the bytes that were missed, so the shell and everything running in it stay intact, and a transient failure to open a replacement connection for the periodic auth refresh is retried rather than ending the session. Reattaching requires an SSH server started by a CLI that supports it; against an older server the connection behaves as before. ([#6558](#6558))

### Bundles

 * Added PyDABs (Python) support for secrets: `Resources.add_secret` and the `secret_mutator` decorator. ([#6553](#6553))
 * Fix job and pipeline environment dependencies with a `*` version wildcard (e.g. `numpy==2.5.*`) being treated as local file paths. ([#6555](#6555))
 * Add the `postgres_snapshot_schedules` bundle resource for managing a Lakebase Postgres branch's automatic-snapshot schedule (direct deployment engine only). ([#6449](#6449))

### Dependency Updates

 * Bump `github.com/databricks/databricks-sdk-go` from v0.175.0 to v0.177.0. ([#6448](#6448))
 * Bump Terraform provider from v1.128.0 to v1.131.0. ([#6544](#6544))
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.

bundle sync outputs differently than sync

3 participants