Skip to content

direct: New plan format and logic re remote changes - #4201

Merged
denik merged 9 commits into
mainfrom
denik/test-remote-changes-matches
Jan 7, 2026
Merged

direct: New plan format and logic re remote changes#4201
denik merged 9 commits into
mainfrom
denik/test-remote-changes-matches

Conversation

@denik

@denikdenik commented Jan 6, 2026

Copy link
Copy Markdown
Contributor

Changes

  • When remote value matches new config value, we now assign "skip" action to this field (with reason="remote_already_set"). Previously if there were changes in the local config we would do 'update' regardless of what remote value is.
  • New plan format for changes. Instead of separate "local" and "remote" blocks we know record change per path with 3 values: old (prior state), new (config), remote.
  • Note, this is breaking change if you parse plan json. Version will be updated to 2 in follow up PR to make it easier to review.

Internally, there is new resource API for overriding diff logic. New function OverrideChangeDesc allows updating ChangeDesc (which now includes Old/New/Remote fields) after built-in logic and FieldTriggers() were applied.

Additionally,

  • fixed some error messages’s prefixes to describe action, not include “failed” or “error”.
  • fieldTriggers isLocal parameter is removed. It’s not needed in most cases and if complex logic is needed, OverrideChangeDesc is a better place.
  • calladapt allows passing nil to parameters requiring *T. In this case, nil will be converted to typed nil.

Plan format

Old format (plan_version: 1)

Assuming field has value “A” in the state and “B” in the config and “C” in the remote state.

 changes:
local:
field:
old: A
new: B
remote:
field:
old: B
new: C

(old format has old & new swapped in remote, which was somewhat confusing).

New format (plan_version: 2)

changes:
field:
old: A
new: B
remote: C

Why

Matches terraform and user expectations. Plan format is easier to understand.

Tests

There is a new acceptance test showing remote_already_set behaviour. Existing tests show format change.

@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 11:30 — with GitHub Actions Inactive
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 11:48 — with GitHub Actions Inactive
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 12:16 — with GitHub Actions Inactive
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 12:20 — with GitHub Actions Inactive
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Jan 6, 2026

Copy link
Copy Markdown
Collaborator

Commit: 447be83

Run: 20781178168

Env🟨​KNOWN🔄​flaky💚​RECOVERED🙈​SKIP✅​pass🙈​skipTime
🟨​aws windows164238367471:57
🟨​aws-ucws windows164253455156:20
🟨​azure linux258338167555:22
🟨​azure windows753338367355:40
🟨​gcp linux105337068121:24
🟨​gcp windows15337267918:29
22 interesting tests: 17 KNOWN, 4 RECOVERED, 1 SKIP
Test Nameaws windowsaws-ucws windowsazure linuxazure windowsgcp linuxgcp windows
🟨​TestAccept🟨​K🟨​K💚​R💚​R🟨​K🟨​K
🟨​TestAccept/bundle/deployment/bind/alert🙈​S🙈​S🔄​f🔄​f🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic🟨​K🟨​K💚​R🔄​f🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🔄​f🔄​f🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K🔄​f💚​R🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/with_file🟨​K🟨​K🔄​f🔄​f🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/with_file/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🔄​f🔄​f🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/with_file/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K💚​R💚​R🟨​K🟨​K
🙈​TestAccept/bundle/resources/permissions🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions🟨​K🟨​K🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K
💚​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=terraform💚​R💚​R
💚​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions💚​R💚​R🙈​S🙈​S🙈​S🙈​S
💚​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=direct💚​R💚​R
💚​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=terraform💚​R💚​R
🟨​TestExport🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestExportWithFileFlag🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestImportDir🟨​K🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportDirDoesNotOverwrite🟨​K🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportDirWithOverwriteFlag🟨​K🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportFileFormatAuto🟨​K🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportFileFormatSource🟨​K🟨​K💚​R🟨​K💚​R🟨​K
Top 16 slowest tests (at least 2 minutes):
durationenvtestname
34:35azure windowsTestAccept/bundle/resources/alerts/with_file/DATABRICKS_BUNDLE_ENGINE=terraform
32:14azure linuxTestAccept/bundle/resources/alerts/with_file/DATABRICKS_BUNDLE_ENGINE=terraform
30:01azure windowsTestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=terraform
5:49aws-ucws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:40aws-ucws windowsTestAccept/bundle/resources/synced_database_tables/basic
5:38gcp linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:33aws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:30gcp windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:16gcp windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
5:05aws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
4:52aws-ucws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
4:40gcp linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
3:52azure linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
3:52azure windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
3:33azure windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
2:05azure linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct

@denik
denikforce-pushed the denik/test-remote-changes-matches branch from 99a4359 to 3ca6773CompareJanuary 6, 2026 13:53
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 13:54 — with GitHub Actions Inactive
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 13:58 — with GitHub Actions Inactive
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 14:10 — with GitHub Actions Inactive
denik added a commit that referenced this pull request Jan 6, 2026
## Changes
New function structdiff.IsEqual() which follows the same logic as
structdiff.GetStructDiff() but does not build a diff.
## Why
Need this in #4201
reflect.DeepEqual() does not work for types with ForceSendFields because
ForceSendFields can have more or less fields in it without changing the
actual value.
## Tests
Unit tests.
denik added a commit that referenced this pull request Jan 6, 2026
…4204)
## Changes
- Support key-value syntax (`tasks[task_key='foo']`) in
structaccess.Get() and Set()
- Use separate type class for errors when structure is correct but item
is not found.
## Why
Completeness. Using this features in
#4201
## Tests
Unit tests.
@denik
denikforce-pushed the denik/test-remote-changes-matches branch from 5b0dff7 to e901b22CompareJanuary 6, 2026 18:03
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 18:03 — with GitHub Actions Inactive
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 18:32 — with GitHub Actions Inactive
@denik
deniktemporarily deployed to test-trigger-is January 6, 2026 18:40 — with GitHub Actions Inactive
add remote_matches_config test
implement remote_already_set and update the test
WIP
linter
handle nil
update
update
structaccess: support key/value syntax
modify structaccess.Get() to return nil on missing values
update
update tests
update
fix dashboards
update migrate tests
dashboard tag comparison fix
linter fix
clean up test
pipelines run_as
use IsEqual, fix run_as
clean up
update
undo version change, will be done in follow up to reduce PR size
@denik
denikforce-pushed the denik/test-remote-changes-matches branch from 1c1f4e3 to 3c19eeaCompareJanuary 7, 2026 11:14
@denik
deniktemporarily deployed to test-trigger-is January 7, 2026 11:14 — with GitHub Actions Inactive
@denikdenik changed the title WIP plan version 2direct: New plan format and logic re remote changesJan 7, 2026
@denik
deniktemporarily deployed to test-trigger-is January 7, 2026 11:22 — with GitHub Actions Inactive
@denik
deniktemporarily deployed to test-trigger-is January 7, 2026 11:46 — with GitHub Actions Inactive
@denik
denik marked this pull request as ready for review January 7, 2026 11:46
@denik
deniktemporarily deployed to test-trigger-is January 7, 2026 12:15 — with GitHub Actions Inactive

@andrewnesterandrewnester left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New format looks fine, but it might be worth calling out explicitly that it changed incase any one already depends on this

@denik
deniktemporarily deployed to test-trigger-is January 7, 2026 13:33 — with GitHub Actions Inactive
@denik
denik merged commit c4e1b83 into mainJan 7, 2026
17 checks passed
@denik
denik deleted the denik/test-remote-changes-matches branch January 7, 2026 13:34
@denikdenik mentioned this pull request Jan 7, 2026
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Commit: c4e1b83

Run: 20783277228

Env💥​PANIC❌​FAIL🟨​KNOWN🤯​MISS🔄​flaky💚​RECOVERED🙈​SKIP✅​pass🙈​skipTime
🟨​aws linux14292415663321:45
🟨​aws windows23241966188:48
🟨​aws-ucws linux14292584534351:33
❌​aws-ucws windows21942586532116:09
🟨​azure linux216341766248:52
🟨​azure windows1127341766077:40
❌​azure-ucws linux29553580532120:00
💥​azure-ucws windows1213143573530120:00
❌​gcp linux3135339467143:01
🟨​gcp windows18339966947:48
44 interesting tests: 24 KNOWN, 9 MISS, 7 FAIL, 2 flaky, 1 PANIC, 1 SKIP
Test Nameaws linuxaws windowsaws-ucws linuxaws-ucws windowsazure linuxazure windowsazure-ucws linuxazure-ucws windowsgcp linuxgcp windows
🟨​TestAccept🟨​K🟨​K🟨​K🟨​K💚​R🟨​K🤯​M🤯​M🟨​K🟨​K
🟨​TestAccept/bundle/deployment/bind/alert🙈​S🙈​S🙈​S🙈​S💚​R💚​R🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/generate/alert🟨​K🟨​K🟨​K🟨​K💚​R🟨​K🤯​M🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/generate/alert/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🟨​K🟨​K💚​R🟨​K🤯​M🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/generate/alert/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K🟨​K🟨​K💚​R🟨​K🤯​M🟨​K🟨​K🟨​K
❌​TestAccept/bundle/integration_whl/interactive_single_user✅​p✅​p✅​p✅​p✅​p✅​p✅​p❌​F❌​F✅​p
❌​TestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p✅​p✅​p✅​p✅​p❌​F❌​F✅​p
❌​TestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p✅​p✅​p✅​p✅​p✅​p❌​F✅​p
🟨​TestAccept/bundle/resources/alerts/basic🟨​K🟨​K🟨​K🟨​K💚​R💚​R🟨​K🤯​M🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🟨​K🟨​K💚​R💚​R🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K🟨​K🟨​K💚​R💚​R🟨​K🤯​M🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/with_file🟨​K🟨​K🟨​K🟨​K💚​R💚​R🟨​K🤯​M🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/with_file/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🟨​K🟨​K💚​R💚​R🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/with_file/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K🟨​K🟨​K💚​R💚​R🟨​K🤯​M🟨​K🟨​K
🔄​TestAccept/bundle/resources/dashboards/dataset-catalog-schema🔄​f✅​p✅​p✅​p✅​p✅​p✅​p✅​p✅​p✅​p
🔄​TestAccept/bundle/resources/dashboards/dataset-catalog-schema/DATABRICKS_BUNDLE_ENGINE=direct🔄​f✅​p✅​p✅​p✅​p✅​p✅​p✅​p✅​p✅​p
🤯​TestAccept/bundle/resources/dashboards/simple_syncroot✅​p✅​p✅​p✅​p✅​p✅​p✅​p🤯​M✅​p✅​p
🤯​TestAccept/bundle/resources/dashboards/simple_syncroot/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p✅​p✅​p✅​p✅​p🤯​M✅​p✅​p
🤯​TestAccept/bundle/resources/dashboards/simple_syncroot/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p✅​p✅​p✅​p✅​p🤯​M✅​p✅​p
🤯​TestAccept/bundle/resources/database_catalogs/basic🙈​s🙈​s🔄​f✅​p🙈​s🙈​s✅​p🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/resources/database_catalogs/basic/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p🤯​M
🤯​TestAccept/bundle/resources/database_catalogs/basic/DATABRICKS_BUNDLE_ENGINE=terraform🔄​f✅​p✅​p🤯​M
🤯​TestAccept/bundle/resources/database_instances/single-instance🙈​s🙈​s✅​p✅​p🙈​s🙈​s✅​p🤯​M🙈​s🙈​s
💥​TestAccept/bundle/resources/database_instances/single-instance/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p💥​P
🤯​TestAccept/bundle/resources/database_instances/single-instance/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p🤯​M
🙈​TestAccept/bundle/resources/permissions🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
❌​TestAccept/bundle/resources/permissions/factcheck✅​p✅​p✅​p✅​p✅​p🔄​f❌​F✅​p🙈​s🙈​s
❌​TestAccept/bundle/resources/permissions/factcheck/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p✅​p✅​p🔄​f❌​F✅​p
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions🟨​K🟨​K🟨​K🟨​K🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=terraform💚​R🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions💚​R🟨​K💚​R💚​R🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=direct💚​R🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=terraform💚​R🟨​K💚​R💚​R
❌​TestAccept/bundle/run/app-with-job✅​p✅​p✅​p❌​F✅​p✅​p✅​p✅​p✅​p✅​p
❌​TestAccept/bundle/run/app-with-job/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p❌​F✅​p✅​p✅​p✅​p✅​p✅​p
🤯​TestInprocessMode🙈​s🙈​s🙈​s🙈​s🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🟨​TestExport🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestExportWithFileFlag🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestImportDir💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportDirDoesNotOverwrite💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportDirWithOverwriteFlag💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportFileFormatAuto💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportFileFormatSource💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
Top 50 slowest tests (at least 2 minutes):
durationenvtestname
23:13azure-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
20:19azure-ucws windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
19:08aws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
17:56azure windowsTestAccept/bundle/resources/permissions/factcheck/DATABRICKS_BUNDLE_ENGINE=terraform
14:04gcp windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
12:54azure-ucws linuxTestAccept/bundle/resources/clusters/run/spark_python_task/DATABRICKS_BUNDLE_ENGINE=direct
12:49azure-ucws linuxTestAccept/bundle/resources/clusters/run/spark_python_task/DATABRICKS_BUNDLE_ENGINE=terraform
12:30gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
12:04aws-ucws linuxTestAccept/bundle/resources/model_serving_endpoints/running-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform
11:41azure-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=SINGLE_USER
11:38aws-ucws linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
10:58aws-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
10:58aws-ucws windowsTestAccept/bundle/resources/model_serving_endpoints/running-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform
10:31aws-ucws windowsTestAccept/bundle/resources/model_serving_endpoints/running-endpoint/DATABRICKS_BUNDLE_ENGINE=direct
10:16azure-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=direct
10:14aws-ucws linuxTestAccept/bundle/resources/model_serving_endpoints/running-endpoint/DATABRICKS_BUNDLE_ENGINE=direct
9:49gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
9:36azure linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
9:17azure-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform
9:02aws-ucws linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
8:47azure-ucws windowsTestAccept/bundle/resources/permissions/factcheck/DATABRICKS_BUNDLE_ENGINE=terraform
8:33azure-ucws windowsTestAccept/bundle/resources/clusters/run/spark_python_task/DATABRICKS_BUNDLE_ENGINE=terraform
8:17aws windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
8:14gcp linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
8:11gcp windowsTestAccept/bundle/run/app-with-job/DATABRICKS_BUNDLE_ENGINE=direct
8:08gcp linuxTestAccept/bundle/run/app-with-job/DATABRICKS_BUNDLE_ENGINE=terraform
8:04azure-ucws linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
8:03azure-ucws windowsTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
8:00azure-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
8:00gcp windowsTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:57aws linuxTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=direct
7:56aws windowsTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform
7:55azure-ucws linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
7:54gcp linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
7:47aws-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=SINGLE_USER
7:45aws-ucws linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
7:36gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
7:30aws-ucws windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
7:29aws-ucws linuxTestAccept/bundle/resources/database_instances/single-instance/DATABRICKS_BUNDLE_ENGINE=direct
7:24aws linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
7:24gcp linuxTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform
7:24gcp linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:21gcp linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
7:21gcp linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
7:20azure-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
7:15aws-ucws linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:14gcp windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=direct
7:07gcp windowsTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
7:04aws linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:04aws-ucws windowsTestSparkJarTaskDeployAndRunOnVolumes/Databricks_Runtime_14.3_LTS

denik added a commit that referenced this pull request Jan 8, 2026
deco-sdk-taggingBot added a commit that referenced this pull request Jan 8, 2026
## Release v0.282.0
### Notable Changes
* engine/direct: New plan format (v2) ([#4201](#4201))
### CLI
* Skip non-exportable objects (e.g., `MLFLOW_EXPERIMENT`) during `workspace export-dir` instead of failing ([#4101](#4101))
### Bundles
* Allow `domain_friendly_name` to be used in `name_prefix` in development mode ([#4173](#4173))
* Add missing schema grants privileges ([#4139](#4139))
* Add support for `bundle generate alert` command ([#4108](#4108))
* Add support for `.dbalert.json` files ([#3602](#3602))
* Pass `SYSTEM_TEAMFOUNDATIONCOLLECTIONURI` from env to the Terraform provider for Azure DevOps OIDC auth ([#4169](#4169))
* Add `ipykernel` to the `default` template to enable Databricks Connect notebooks in Cursor/VS Code ([#4164](#4164))
* Add interactive SQL warehouse picker to `default-sql` and `dbt-sql` bundle templates ([#4170](#4170))
* Add `name`, `target` and `mode` fields to the deployment metadata file ([#4180](#4180))
* engine/direct: Fix app deployment failure when app is in `DELETING` state ([#4176](#4176))
* engine/direct: Changes in config that match remote changes no longer trigger an update ([#4201](#4201))
denik added a commit that referenced this pull request May 20, 2026
## Changes
New function structdiff.IsEqual() which follows the same logic as
structdiff.GetStructDiff() but does not build a diff.
## Why
Need this in #4201
reflect.DeepEqual() does not work for types with ForceSendFields because
ForceSendFields can have more or less fields in it without changing the
actual value.
## Tests
Unit tests.
denik added a commit that referenced this pull request May 20, 2026
…4204)
## Changes
- Support key-value syntax (`tasks[task_key='foo']`) in
structaccess.Get() and Set()
- Use separate type class for errors when structure is correct but item
is not found.
## Why
Completeness. Using this features in
#4201
## Tests
Unit tests.
denik added a commit that referenced this pull request May 20, 2026
## Changes
- When remote value matches new config value, we now assign "skip"
action to this field (with reason="remote_already_set"). Previously if
there were changes in the local config we would do 'update' regardless
of what remote value is.
- New plan format for changes. Instead of separate "local" and "remote"
blocks we know record change per path with 3 values: old (prior state),
new (config), remote.
- Note, this is breaking change if you parse plan json. Version will be
updated to 2 in follow up PR to make it easier to review.
Internally, there is new resource API for overriding diff logic. New
function OverrideChangeDesc allows updating ChangeDesc (which now
includes Old/New/Remote fields) after built-in logic and FieldTriggers()
were applied.
Additionally,
- fixed some error messages’s prefixes to describe action, not include
“failed” or “error”.
- fieldTriggers isLocal parameter is removed. It’s not needed in most
cases and if complex logic is needed, OverrideChangeDesc is a better
place.
- calladapt allows passing nil to parameters requiring *T. In this case,
nil will be converted to typed nil.
## Plan format
## Old format (plan_version: 1)
Assuming field has value “A” in the state and “B” in the config and “C”
in the remote state.
```
changes:
local:
field:
old: A
new: B
remote:
field:
old: B
new: C
```
(old format has old & new swapped in remote, which was somewhat
confusing).
### New format (plan_version: 2)
```
changes:
field:
old: A
new: B
remote: C
```
## Why
Matches terraform and user expectations. Plan format is easier to
understand.
## Tests
There is a new acceptance test showing remote_already_set behaviour.
Existing tests show format change.
denik added a commit that referenced this pull request May 20, 2026
denik pushed a commit that referenced this pull request May 20, 2026
## Release v0.282.0
### Notable Changes
* engine/direct: New plan format (v2) ([#4201](#4201))
### CLI
* Skip non-exportable objects (e.g., `MLFLOW_EXPERIMENT`) during `workspace export-dir` instead of failing ([#4101](#4101))
### Bundles
* Allow `domain_friendly_name` to be used in `name_prefix` in development mode ([#4173](#4173))
* Add missing schema grants privileges ([#4139](#4139))
* Add support for `bundle generate alert` command ([#4108](#4108))
* Add support for `.dbalert.json` files ([#3602](#3602))
* Pass `SYSTEM_TEAMFOUNDATIONCOLLECTIONURI` from env to the Terraform provider for Azure DevOps OIDC auth ([#4169](#4169))
* Add `ipykernel` to the `default` template to enable Databricks Connect notebooks in Cursor/VS Code ([#4164](#4164))
* Add interactive SQL warehouse picker to `default-sql` and `dbt-sql` bundle templates ([#4170](#4170))
* Add `name`, `target` and `mode` fields to the deployment metadata file ([#4180](#4180))
* engine/direct: Fix app deployment failure when app is in `DELETING` state ([#4176](#4176))
* engine/direct: Changes in config that match remote changes no longer trigger an update ([#4201](#4201))
Sign up for freeto 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.

3 participants

@denik@eng-dev-ecosystem-bot@andrewnester