Make bundle sync default to text output, matching sync - #6568
Merged
janniklasrose merged 2 commits intoSep 8, 2026
Merged
Conversation
`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]>
Co-authored-by: Isaac <[email protected]>
janniklasrose
marked this pull request as ready for review
September 8, 2026 11:59
Collaborator
Integration test reportCommit: 68eb993
Top 6 slowest tests (at least 2 minutes):
|
andrewnester
approved these changes
Sep 8, 2026
janniklasrose
deleted the
jan-rose_data/janniklasrose/align-output-bundle-sync
branch
September 8, 2026 14:56
Collaborator
Integration test reportCommit: 4f2dad3
1039 interesting tests: 897 MISS, 141 FAIL, 1 SKIP
Top 50 slowest tests (at least 2 minutes):
|
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))
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
databricks bundle syncwas silent by default, whiledatabricks syncdefaulted totextoutput. A plaindatabricks bundle syncprinted no file actions, so with--dry-runthe only output wasRunning 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
synclater gained a text-default--output;bundle synconly got an opt-in--outputin #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--outputtype (which defaults totext) instead of gating on the flag being explicitly.Changed.bundle syncnow behaves likesync;--output jsonis unchanged. Removed the now-inaccurate comment that went with the guard.cmd/bundle/sync_test.go: the old unit test pinned "handler only when--outputset"; 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 coveringbundle syncwith no--outputflag — the case the change alters, which had no coverage. The two existingbundle syncacceptance tests both pass--output text, so they are unaffected.Tests
go test ./cmd/bundle/passes.clusters/.../resize-autoscale,permissions/pipelines), neither of which touchesbundle sync; both confirmed passing in isolation.Closes #6499
This pull request and its description were written by Isaac.