Repository navigation
Keep an explicit false on optional bundle config bools - #7412
Merged
Merged
Conversation
Thirteen omitempty bool fields of CLI-defined config structs (variables.*.sensitive,
bundle.deployment.lock.force, workspace.azure_use_msi and
experimental_is_unified_host, artifacts.*.dynamic_version, targets.*.default,
experimental.{immutable_folder,python_wheel_wrapper,use_legacy_run_as,
skip_artifact_cleanup,skip_name_prefix_for_schema} and
experimental.pydabs.enabled) become *bool, like lock.enabled already is.
As plain bools, an explicit false was dropped by the typed-to-dynamic
conversion that runs after every mutator: it never showed in the config, and a
target could not override true with false (e.g. dynamic_version: false in a
target lost to true at the root). Readers use config.IsExplicitlyEnabled, so
behavior is otherwise unchanged; PyDABs keeps treating only enabled: true as
configured.
A unit test guards that no CLI-defined struct reintroduces an omitempty bool
without ForceSendFields; bundle.force is skipped since it is readonly (set from
--force, not by users).
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Contributor
|
Commit: Regression test reportSelected 2 changed tests (limit=20, 0 not selected) 4 tests: regression=4 unreleased=0 coverage=0 failing=0
TestAccept/bundle/refschema/DMS=: branch ✅ | main (77950b6) ❌ | latest (v1.25.0) ❌main (77950b6): latest (v1.25.0): TestAccept/bundle/refschema/DMS=true: branch ✅ | main (77950b6) ❌ | latest (v1.25.0) ❌main (77950b6): latest (v1.25.0): TestAccept/bundle/validate/explicit_false/DMS=: branch ✅ | main (77950b6) ❌ | latest (v1.25.0) ❌main (77950b6): latest (v1.25.0): same output as main (77950b6) TestAccept/bundle/validate/explicit_false/DMS=true: branch ✅ | main (77950b6) ❌ | latest (v1.25.0) ❌main (77950b6): latest (v1.25.0): |
…overrides TestConfigBoolsArePointers now fails for any bool field of a CLI-defined config struct, not only omitempty ones in structs without ForceSendFields. The fields that predate it are listed with the reason they stay bool, and the test also fails if a listed field goes away. The acceptance test now overrides lock.force and azure_use_msi from a target too, and the changelog entry covers every affected field. Co-authored-by: Isaac <no-reply@databricks.com>
Collaborator
✅ Integration test reportCommit: 9a113f7
Top 3 slowest tests (at least 2 minutes):
|
replace_existing on postgres endpoints, databases and roles lost an explicit false like the other plain bools did: their configs declare no ForceSendFields. They become *bool. replace_existing/purge_on_delete on postgres branches and purge_on_delete on postgres projects kept it only through the ForceSendFields those configs declared for these fields; bundle.deployment.fail_on_active_runs likewise (#7117). They become *bool and those ForceSendFields go away; the postgres configs keep their MarshalJSON/UnmarshalJSON, which exist because they embed an SDK spec. The direct engine reads them when building the create and delete requests, and RemapState leaves them unset. Lifecycle, Presets and DashboardConfig keep their ForceSendFields: it covers more than their bool (depends_on, the other presets, the dashboards API). The acceptance test overrides every one of these fields from a target. Co-authored-by: Isaac <no-reply@databricks.com>
denik
marked this pull request as ready for review
November 10, 2026 10:53
denik
enabled stacked auto-merge
November 10, 2026 10:57
janniklasrose
approved these changes
Nov 11, 2026
deco-sdk-tagging Bot
added a commit
that referenced
this pull request
Nov 11, 2026
## Release v1.26.0 ### AI Runtime * `air run` reuses its existing workspace connection for config validation instead of opening a second one, which saves a TCP and TLS handshake per submission. ([#7210](#7210)) * Speed up `databricks air run` for git-pinned `code_source` snapshots by compressing the archive in parallel, which substantially shortens packaging on large repositories. ([#7402](#7402)) * Point the `air run -h config` agent-skill hint at the stable `databricks-ai-runtime` skill. ([#7454](#7454)) ### Bundles * Add `DATABRICKS_BUNDLE_INIT_WORKSPACE_HOST_PROFILE`, which names a profile whose host the `workspace_host` template helper returns instead of the selected profile's host. The profile must have the selected profile's workspace ID. ([#7410](#7410)) * Fixed an explicit `false` on optional boolean fields (`variables.*.sensitive`, `artifacts.*.dynamic_version`, `bundle.deployment.lock.force`, `workspace.azure_use_msi`, `replace_existing` on postgres endpoints, databases and roles, and the `experimental.*` flags) being dropped, which hid it from `bundle validate -o json` and kept a target from overriding `true` with it. ([#7412](#7412)) * Stop sending `compute_size` in the app update mask when the bundle does not declare it, so a deploy no longer resets a manually resized app to the default size. ([#7461](#7461)) * `lifecycle.depends_on` can now target the grants or permissions of a resource, as `schemas.foo.grants`. ([#7435](#7435)) * Add support for the `feature_specs` resource type, including UC grants on a feature spec. ([#7364](#7364)) ### Dependency Updates * Update the Go SDK to [v0.197.0](https://github.com/databricks/databricks-sdk-go/releases/tag/v0.197.0). ([#7457](#7457)) * Bump Go toolchain to 1.27.4. ([#7458](#7458))
Collaborator
❌ Integration test reportCommit: e215fd0
20 interesting tests: 16 flaky, 4 FAIL
Top 50 slowest tests (at least 2 minutes):
|
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
Optional bools in CLI-defined config structs were plain
boolwithomitempty. The typed-to-dynamic conversion that runs after every mutator drops zero values, so an explicitfalsewas lost unless the struct declaredForceSendFields:bundle validate -o json;truewithfalse. On main this is broken forartifacts.*.dynamic_version,bundle.deployment.lock.force,workspace.azure_use_msi(auth then fails with "more than one authorization method configured: azure and pat") andreplace_existingon postgres endpoints, databases and roles;Changes
These fields become
*bool, likelock.enabledalready is; readers useconfig.IsExplicitlyEnabled(or dereference inline in the direct engine):variables.*.sensitive,artifacts.*.dynamic_version,bundle.deployment.lock.force,workspace.azure_use_msi,workspace.experimental_is_unified_host,targets.*.default,experimental.{immutable_folder,python_wheel_wrapper,use_legacy_run_as,skip_artifact_cleanup,skip_name_prefix_for_schema},experimental.pydabs.enabled;replace_existingon postgres branches, endpoints, databases and roles, andpurge_on_deleteon postgres projects and branches;bundle.deployment.fail_on_active_runs.The last two groups already kept an explicit
falsethroughForceSendFieldsdeclared for them (postgres projects and branches,Deploymentfrom #7117); with*boolthoseForceSendFieldsgo away. The postgres configs keep theirMarshalJSON/UnmarshalJSON, which exist because they embed an SDK spec.Still plain
bool:bundle.force(readonly, set from--force), and three fields whose struct'sForceSendFieldscovers more than the bool (lifecycle.prevent_destroywithdepends_on,presets.artifacts_dynamic_versionwith the other presets,dashboards.*.embed_credentials, which the direct engine passes to the dashboards API).TestConfigBoolsArePointersfails for any otherboolin a CLI-defined config struct.Tests
acceptance/bundle/validate/explicit_false: explicitfalsevalues are kept, and a target overridestruewithfalsefor every field above that a target can set (on main the broken ones staytrue).This pull request and its description were written by Isaac.