Skip to content

bundle: Add postgres_roles resource - #5467

Merged
janniklasrose merged 25 commits into
mainfrom
postgres-roles
Jun 16, 2026
Merged

bundle: Add postgres_roles resource#5467
janniklasrose merged 25 commits into
mainfrom
postgres-roles

Conversation

@janniklasrose

@janniklasrosejanniklasrose commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Changes

Add postgres_roles (Lakebase Postgres Roles) as a bundle resource for both the direct and Terraform engines: config type, direct-engine CRUD, Terraform converter, JSON schema, test-server handlers, and tests.

  • parent, role_id, and the spec fields postgres_role / auth_method / identity_type are recreate-only; attributes / membership_roles update in place.
  • RemapState keeps the spec empty (GET returns only status, which rolls up server/parent defaults) and relies on ignore_remote_changes, matching the sibling Postgres resources.

Tests

  • Unit: Terraform converter, test-server role CRUD + update_mask handling, the update-mask helper, state-load, bind-support, and field coverage (type_test).
  • Acceptance: basic, update, recreate, recreate-postgres-role, plus inherited-role-conflict / inherited-role-bind documenting inherited-role behavior.
  • Cloud: full suite passes on aws-prod-ucws against real Lakebase (both engines).

This pull request and its description were written by Isaac, an AI coding agent.

pieternand others added 9 commits May 19, 2026 11:23
Adds DAB support for Lakebase Postgres roles, mirroring the existing
postgres_databases resource. The state holds role_id and parent
separately (so bundle variable references resolve), and RemapState
recovers role_id from remote.Name via a local strings.TrimPrefix —
no shared parser helper. recreate_on_changes fires on either field
since both are part of the immutable hierarchical name.
Also fixes collectUpdatePathsWithPrefix to drop a parent path when a
more specific child path is present; the real Postgres API rejects an
update_mask that contains both (e.g. spec.attributes plus
spec.attributes.createdb), expecting all sibling fields when the
parent is named.
Tested end-to-end against AWS prod (basic, recreate, update, bind) as
well as the invariant suite.
Co-authored-by: Isaac
Two follow-ups to the postgres_roles resource:
- Regenerate required-field validation so role_id is required alongside
parent, matching the JSON schema (jsonschema.json already lists both
under required). Without this, bundle validate accepted a role config
missing role_id and the failure only surfaced during deploy.
- In PostgresRole.Exists, recognize 404 via apierr.IsMissing and return
(false, nil) so bundle deployment bind reports the user-friendly
"postgres_role ... is not found" path instead of a generic fetch
error.
Co-authored-by: Isaac
Missed alongside required_fields in the previous commit. Same
generator run, just the second output file.
Co-authored-by: Isaac
Previously logged "does not exist" for any GetRole error, including
transient failures, before checking apierr.IsMissing. Flip the order
so the debug message only fires when the role is genuinely absent.
Co-authored-by: Isaac
The SDK's RoleRoleStatus already carries role_id; use it directly
instead of stripping the "<parent>/roles/" prefix from remote.Name.
Matches the catalog convention (Status.CatalogId) and avoids a
local string parse.
Co-authored-by: Isaac
# Conflicts:
#	NEXT_CHANGELOG.md
#	acceptance/bundle/invariant/continue_293/out.test.toml
#	acceptance/bundle/invariant/migrate/out.test.toml
#	acceptance/bundle/invariant/no_drift/out.test.toml
#	acceptance/bundle/invariant/test.toml
#	acceptance/bundle/refschema/out.fields.txt
#	bundle/config/mutator/resourcemutator/apply_bundle_permissions_test.go
#	bundle/config/mutator/resourcemutator/apply_target_mode_test.go
#	bundle/config/mutator/resourcemutator/run_as_test.go
#	bundle/config/resources.go
#	bundle/config/resources_test.go
#	bundle/deploy/terraform/interpolate.go
#	bundle/deploy/terraform/pkg.go
#	bundle/deploy/terraform/util.go
#	bundle/direct/dresources/all.go
#	bundle/direct/dresources/apitypes.generated.yml
#	bundle/direct/dresources/apitypes.yml
#	bundle/direct/dresources/resources.generated.yml
#	bundle/direct/dresources/util.go
#	bundle/internal/schema/annotations.yml
#	bundle/internal/validation/generated/enum_fields.go
#	bundle/internal/validation/generated/required_fields.go
#	bundle/schema/jsonschema.json
#	bundle/schema/jsonschema_for_docs.json
#	bundle/statemgmt/state_load_test.go
#	libs/testserver/fake_workspace.go
#	libs/testserver/handlers.go
#	libs/testserver/postgres.go
…ate-only
Live testing showed the PATCH update_mask only accepts spec.attributes
and spec.membership_roles; the backend rejects spec.postgres_role,
spec.auth_method, and spec.identity_type with 400 INVALID_PARAMETER_VALUE
"Unknown field path in update_mask". Without declaring these as
recreate_on_changes:
- direct engine: deploy fails on PATCH and re-plan loops on the same
"1 to change" forever
- terraform engine: silently no-ops the change (state records new value,
remote keeps old, GET returns no spec → invisible divergence)
These spec fields aren't marked immutable in the OpenAPI definition,
so the generator can't pick them up — declare them in the manual
resources.yml until upstream is fixed.
Adds an acceptance test that toggles postgres_role and confirms the
plan recreates instead of patching. Restricted to the direct engine
because the terraform provider still treats the field as updateable
and would silently diverge from the bundle.
Co-authored-by: Isaac
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Jun 8, 2026

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 935a4cf

Run: 27622525865

Env🟨​KNOWN🔄​flaky💚​RECOVERED🙈​SKIP✅​pass🙈​skipTime
🟨​aws linux142152649897:32
🟨​aws windows71526698710:32
💚​aws-ucws linux7153609036:24
💚​aws-ucws windows7153629019:29
💚​azure linux1172679876:05
💚​azure windows1172699858:34
💚​azure-ucws linux1173658997:35
💚​azure-ucws windows1173678979:45
💚​gcp linux1172639906:36
💚​gcp windows1172659888:50
22 interesting tests: 15 SKIP, 7 KNOWN
Test Nameaws linuxaws windowsaws-ucws linuxaws-ucws windowsazure linuxazure windowsazure-ucws linuxazure-ucws windowsgcp linuxgcp windows
🟨​TestAccept💚​R🟨​K💚​R💚​R💚​R💚​R💚​R💚​R💚​R💚​R
🙈​TestAccept/bundle/invariant/no_drift🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/permissions🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions💚​R🟨​K💚​R💚​R🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=direct🔄​f🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=terraform🔄​f🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions🔄​f🟨​K💚​R💚​R🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=direct🔄​f🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K💚​R💚​R
🙈​TestAccept/bundle/resources/postgres_branches/basic🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/postgres_branches/recreate🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/postgres_branches/replace_existing🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/postgres_branches/update_protected🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/postgres_branches/without_branch_id🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/postgres_endpoints/basic🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/postgres_endpoints/recreate🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/postgres_projects/update_display_name🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/synced_database_tables/basic🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/vector_search_endpoints/drift/recreated_same_name🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/vector_search_indexes/basic🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/bundle/resources/vector_search_indexes/grants/select🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🙈​TestAccept/ssh/connection🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
Top 24 slowest tests (at least 2 minutes):
durationenvtestname
5:15gcp windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
4:42gcp linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
4:18gcp linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
4:05gcp windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
3:38aws windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:21aws linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
3:15azure-ucws windowsTestAccept
3:15azure windowsTestAccept
3:15gcp windowsTestAccept
3:10azure windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
3:07aws-ucws windowsTestAccept
3:05azure-ucws windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:58azure-ucws windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:55aws-ucws windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:55aws linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:53azure linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:51azure-ucws linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:43azure windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:39azure linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:39aws-ucws linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:36aws-ucws windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:34aws-ucws linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:26azure-ucws linuxTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:25aws windowsTestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct

Comment threadNEXT_CHANGELOG.md Outdated
Comment threadNEXT_CHANGELOG.md Outdated
Comment threadbundle/direct/dresources/postgres_role.go Outdated
Comment threadbundle/direct/dresources/postgres_role.go
Comment threadbundle/direct/dresources/util.go Outdated
Comment threadbundle/direct/dresources/resources.yml
Remove three entries that were resurrected by a changelog-rotation merge
(#5349/#5364, #5370, #4995); they already shipped and live in CHANGELOG.md.
Drop the '(preview)' tag from the Postgres role entry and link this PR.
Co-authored-by: Isaac
…d helper
Revert collectUpdatePathsWithPrefix to its original form so the widely-used
helper (also called by postgres branches/endpoints/projects) is unchanged, and
add a dedicated collectLeafUpdatePathsWithPrefix used only by postgres roles.
The role PATCH endpoint rejects an update_mask listing both a struct and one of
its sub-fields, so {attributes, attributes.createdb} must collapse to the leaf.
The new helper also sorts its output so the generated update_mask is stable
across map-iteration order. Add unit tests covering the collapse, sorting, and
non-update filtering.
Co-authored-by: Isaac
GET returns the role configuration under Status, not Spec (Spec is nil on read).
The previous RemapState zeroed the spec fields and claimed remote drift could not
be detected, which is inaccurate: RoleRoleStatus echoes postgres_role, auth_method,
identity_type, attributes, membership_roles and role_id. Map those back onto the
flattened state so the snapshot reflects the live role.
The spec fields stay ignore_remote_changes (spec:input_only), so the plan remains
a no-op; the regenerated direct plan output just records the now-visible remote
values instead of dropping them.
Co-authored-by: Isaac
The fake role update applied the whole request spec regardless of update_mask,
so it could not model partial updates. Read the update_mask query parameter and
apply only the named spec fields onto the existing status, preserving the rest;
an empty mask updates everything, matching the API ("if unspecified, all fields
will be updated when possible").
Add a unit test asserting a field absent from update_mask is preserved even when
the request body carries a new value for it.
Co-authored-by: Isaac
Comment threadNEXT_CHANGELOG.md
@janniklasrose
janniklasrose marked this pull request as ready for review June 9, 2026 12:41
@janniklasrosejanniklasrose changed the title [WIP] postgres rolesbundle: Add postgres_roles resourceJun 9, 2026
Add a local-only acceptance test that reproduces what happens when a bundle
declares a Postgres role that already exists on the branch — the situation a
child branch lands in, since it inherits the parent's roles at creation.
The testserver does not model branch role inheritance, so the precondition is
staged with deploy + 'bundle deployment unbind': the role then exists on the
branch but is untracked, and the next deploy plans to create it and fails. The
Badness note records the real-Lakebase behavior verified on dogfood (HTTP 400
'role with that name already exists') and the two testserver fidelity gaps
(no role inheritance on branch create; duplicate create returns 409 instead of
400). The supported fix is 'bundle deployment bind'.
Co-authored-by: Isaac
The real Lakebase API rejects creating a role that already exists with HTTP 400
BAD_REQUEST ('role with that name already exists'), not 409 — verified on
dogfood. Match it so the conflict a bundle hits on an inherited/pre-existing
role looks identical locally and on cloud. Add a testserver unit test for it.
Reframe the inherited-role-conflict Badness around the product decision: the
4xx-on-existing-role is the intended interim behavior; until a replace_existing
flag lets a bundle take explicit ownership, 'bundle deployment bind' is the
supported escape hatch.
Co-authored-by: Isaac
Companion to inherited-role-conflict. Stages the same pre-existing-role state
(deploy + unbind), then uses 'bundle deployment bind' to take explicit
ownership; the subsequent deploy manages the role instead of trying to create
it and succeeds. This is the supported way to adopt an inherited role until a
replace_existing flag lands.
Co-authored-by: Isaac
"auth_method",
"identity_type",
"membership_roles",
"postgres_role",

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.

Why is this not needed for the other postgres resources?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

other resources don't return spec, updated 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.

This also doesn't return the spec.

The difference is a custom remote type that embeds the spec type in the remote type to ensure the shapes match. The spec is not returned today but will be returned in a couple of weeks. The spec is still annotated input_only, so they're all ignored for drift detection right now. When they become I/O, the annotation will be dropped, they'll be removed from resources.generated.yml and drift detection will work as usual. You can check out makePostgresBranchRemote for ex.

Comment threadbundle/direct/dresources/util.go
Comment threadlibs/testserver/postgres.go
Comment threadbundle/direct/dresources/resources.yml
Comment threadbundle/direct/dresources/postgres_role.go Outdated
Resolve conflicts:
- NEXT_CHANGELOG.md: keep main's v1.4.0 Bundles entries, re-add the Postgres
role line, drop the already-released #5452 entry.
- bundle/schema/jsonschema_for_docs.json: regenerated from the merged sources.
Regenerate schema artifacts (jsonschema.json, annotations_openapi*.yml) and
register postgres_roles in the workspaceurls noURL allowlist that main's new
TestBundleResourcePluralNamesResolveInWorkspaceURLs requires.
Co-authored-by: Isaac
Address review feedback: the old comment cited spec.attributes.createdb as if the
logic masked that leaf, but it collapses nested paths to their top-level spec field
and applies the whole field. State that plainly, and record the verified real-backend
behavior (dogfood 2026-06-16: update_mask=spec.attributes.createdb masks at the leaf
and preserves sibling attributes; identical to the collapse for the direct engine's
full-spec request bodies).
Co-authored-by: Isaac
Revert the status->spec mapping: GET returns the role config under Status, which
rolls up server-side and parent-inherited defaults mixed with the spec, so mapping
it back produces drift that is often unresolvable. Leave the spec empty and rely on
ignore_remote_changes, matching how the other postgres resources handle it; revisit
once the backend echoes the spec intent back on GET. Regenerate the update plan
outputs accordingly.
Also explain in type_test why postgres_roles needs knownMissingInRemoteType entries
that the sibling resources don't: roles' DoRead returns the raw postgres.Role (spec
nested under .Spec/.Status) rather than a custom *Remote type that embeds the spec,
which is the deliberate consequence of not synthesizing a spec from status.
Co-authored-by: Isaac
Comment threadbundle/direct/dresources/util.go
"auth_method",
"identity_type",
"membership_roles",
"postgres_role",

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.

This also doesn't return the spec.

The difference is a custom remote type that embeds the spec type in the remote type to ensure the shapes match. The spec is not returned today but will be returned in a couple of weeks. The spec is still annotated input_only, so they're all ignored for drift detection right now. When they become I/O, the annotation will be dropped, they'll be removed from resources.generated.yml and drift detection will work as usual. You can check out makePostgresBranchRemote for ex.

Comment threadbundle/direct/dresources/postgres_role.go Outdated
Successfully bound postgres_role with an id 'projects/test-project/branches/main/roles/test-role'
Run 'bundle deploy' to deploy changes to your workspace

>>> [CLI] bundle summary

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

this doesn't really show bind was successful, because it looks the same as after unbind

title "Deploy project, branch, and role"
trace $CLI bundle deploy

title "Unbind the role: it now exists on the branch but is no longer tracked by the bundle"

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

better: teach test server inheritance, then

  • add branch A with role "test-role" on A
  • deploy
  • add branch B off branch A, with role "test-role" on B
  • deploy - conflict

@janniklasrose
janniklasrose added this pull request to the merge queueJun 16, 2026
Merged via the queue into main with commit 6a7a04aJun 16, 2026
25 checks passed
@janniklasrose
janniklasrose deleted the postgres-roles branch June 16, 2026 15:06
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 6a7a04a

Run: 27627364964

Env💥​PANIC❌​FAIL🟨​KNOWN🤯​MISS🔄​flaky💚​RECOVERED🙈​SKIP✅​pass🙈​skipTime
🟨​aws linux71554592569:44
🔄​aws windows361550993579:57
💥​aws-ucws linux125253352666745120:00
💥​aws-ucws windows1241229302646760120:05
❌​azure linux611017538921352:57
❌​azure windows14117506931112:31
💥​azure-ucws linux123249812629757120:00
❌​azure-ucws windows14213812626772120:05
❌​gcp linux4117532929299:12
❌​gcp windows41417494939282:34
424 interesting tests: 340 MISS, 42 FAIL, 29 RECOVERED, 8 KNOWN, 3 PANIC, 2 SKIP
Test Nameaws linuxaws windowsaws-ucws linuxaws-ucws windowsazure linuxazure windowsazure-ucws linuxazure-ucws windowsgcp linuxgcp windows
🟨​TestAccept🟨​K🔄​f🤯​M🤯​M🟨​K🟨​K🤯​M🤯​M🟨​K🟨​K
🤯​TestAccept/bundle/apps/job_permissions🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/artifacts/artifact_path_with_volume/volume_doesnot_exist/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/artifacts/artifact_path_with_volume/volume_not_deployed/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/cli_defaults✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/config_edits✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/dashboard_etag✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/flushed_cache✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/formatting_preserved✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/job_fields🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s
🤯​TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/job_multiple_tasks✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/job_params_variables🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s
🤯​TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/job_pipeline_task✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/multiple_files✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/multiple_resources🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s
🤯​TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/output_json✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/output_no_changes✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/pipeline_fields🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s
🤯​TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/resolve_variables🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s
🤯​TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M
🤯​TestAccept/bundle/config-remote-sync/target_override✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/task_rename_revert✅​p🙈​s🤯​M🙈​s✅​p🙈​s🤯​M🙈​s✅​p🙈​s
🤯​TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=direct✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=terraform✅​p🤯​M✅​p🤯​M✅​p
🤯​TestAccept/bundle/deploy/empty-bundle✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/files/no-snapshot-sync✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/mlops-stacks✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/snapshot-comparison✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/snapshot-comparison/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/spark-jar-task✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/alert🙈​s🙈​s🙈​s🙈​s✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/catalog🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/deployment/bind/catalog/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/cluster✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/dashboard✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/dashboard/recreation✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/experiment✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/generate-and-bind✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/job-abort-bind✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/job-spark-python-task✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/model-serving-endpoint✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/pipelines/recreate✅​p🔄​f🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=direct✅​p🔄​f🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/bind/registered-model🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/deployment/bind/registered-model/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/registered-model/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/schema🙈​s🙈​s🤯​M✅​p🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/deployment/bind/schema/DATABRICKS_BUNDLE_ENGINE=direct🤯​M✅​p🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/schema/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M✅​p🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/secret-scope🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/deployment/bind/secret-scope/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/secret-scope/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/vector_search_endpoint🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/deployment/bind/vector_search_endpoint/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/vector_search_index🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/deployment/bind/vector_search_index/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/bind/volume🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s✅​p🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/deployment/bind/volume/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M✅​p🤯​M
🤯​TestAccept/bundle/deployment/bind/volume/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M✅​p🤯​M
🤯​TestAccept/bundle/deployment/unbind/grants🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s🤯​M🤯​M🙈​s🙈​s
🤯​TestAccept/bundle/deployment/unbind/grants/DATABRICKS_BUNDLE_ENGINE=direct🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/unbind/grants/DATABRICKS_BUNDLE_ENGINE=terraform🤯​M🤯​M🤯​M🤯​M
🤯​TestAccept/bundle/deployment/unbind/permissions✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/unbind/permissions/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/deployment/unbind/permissions/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/destroy/jobs-and-pipeline✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p🔄​f
🤯​TestAccept/bundle/destroy/jobs-and-pipeline/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p🔄​f
🤯​TestAccept/bundle/destroy/jobs-and-pipeline/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/generate/alert✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/generate/alert/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/generate/alert/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/generate/auto-bind✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
🤯​TestAccept/bundle/generate/auto-bind/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p🤯​M🤯​M✅​p✅​p🤯​M🤯​M✅​p✅​p
Top 50 slowest tests (at least 2 minutes):
durationenvtestname
29:49aws-ucws linuxTestAccept/bundle/resources/vector_search_indexes/basic/DATABRICKS_BUNDLE_ENGINE=direct
28:30azure-ucws windowsTestAccept/bundle/resources/vector_search_indexes/grants/select/DATABRICKS_BUNDLE_ENGINE=direct
28:22aws-ucws windowsTestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=vector_search_index.yml.tmpl
27:24azure-ucws windowsTestAccept/bundle/resources/vector_search_indexes/recreate/embedding_dimension/DATABRICKS_BUNDLE_ENGINE=direct
27:05aws linuxTestAccept/bundle/resources/sql_warehouses/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
26:57aws-ucws windowsTestAccept/bundle/resources/vector_search_indexes/recreate/embedding_dimension/DATABRICKS_BUNDLE_ENGINE=direct
24:55aws-ucws windowsTestAccept/bundle/resources/vector_search_indexes/grants/select/DATABRICKS_BUNDLE_ENGINE=direct
24:48aws-ucws linuxTestAccept/bundle/resources/vector_search_indexes/recreate/embedding_dimension/DATABRICKS_BUNDLE_ENGINE=direct
24:28aws-ucws windowsTestAccept/bundle/resources/vector_search_indexes/basic/DATABRICKS_BUNDLE_ENGINE=direct
23:07aws-ucws linuxTestAccept/bundle/resources/vector_search_indexes/grants/select/DATABRICKS_BUNDLE_ENGINE=direct
22:44azure-ucws windowsTestAccept/bundle/resources/vector_search_indexes/basic/DATABRICKS_BUNDLE_ENGINE=direct
20:31gcp windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
19:36azure-ucws windowsTestAccept/bundle/resources/permissions/factcheck/DATABRICKS_BUNDLE_ENGINE=terraform
18:52azure-ucws linuxTestAccept/bundle/resources/vector_search_indexes/recreate/embedding_dimension/DATABRICKS_BUNDLE_ENGINE=direct
18:23azure-ucws linuxTestAccept/bundle/resources/vector_search_indexes/basic/DATABRICKS_BUNDLE_ENGINE=direct
14:32azure-ucws linuxTestAccept/bundle/resources/vector_search_indexes/grants/select/DATABRICKS_BUNDLE_ENGINE=direct
14:29azure-ucws linuxTestAccept/bundle/resources/clusters/deploy/simple/DATABRICKS_BUNDLE_ENGINE=direct
14:02gcp linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
13:43gcp linuxTestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
13:28aws windowsTestAccept/bundle/resources/sql_warehouses/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct
13:03aws windowsTestAccept/bundle/resources/sql_warehouses/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
12:58aws-ucws windowsTestAccept/bundle/resources/sql_warehouses/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
12:14gcp windowsTestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
12:08aws windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
11:33azure-ucws linuxTestAccept/bundle/resources/clusters/deploy/data_security_mode/DATABRICKS_BUNDLE_ENGINE=direct
11:28gcp linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
11:11gcp linuxTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform
11:06aws windowsTestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
10:54aws-ucws linuxTestAccept/bundle/resources/sql_warehouses/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
10:51gcp windowsTestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct
10:48aws linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
10:39gcp linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=SINGLE_USER
10:36gcp windowsTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform
10:29azure windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
10:25gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
10:21azure windowsTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
9:52gcp linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
9:40azure linuxTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform
9:36azure linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
9:31azure linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
9:27gcp windowsTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=direct
9:19gcp windowsTestAccept/bundle/run/app-with-job/DATABRICKS_BUNDLE_ENGINE=direct
9:07aws-ucws windowsTestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
9:04gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=SINGLE_USER
8:50gcp windowsTestAccept/bundle/run/app-with-job/DATABRICKS_BUNDLE_ENGINE=terraform
8:49aws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
8:45aws linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
8:31gcp linuxTestAccept/bundle/run/app-with-job/DATABRICKS_BUNDLE_ENGINE=terraform
8:28azure linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=direct
8:26azure windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
(285 table rows omitted to keep the report under 60000 bytes)

pietern added a commit that referenced this pull request Jun 17, 2026
Conflicts came from two origin/main changes landing on top of the
annotation-storage overhaul:
- #5611 (launch stage as the single preview source of truth) refactored
the same codegen the branch rewrote. Resolved parser.go to keep the
branch's in-memory annotation.File (SetSelf/SetField, no overrides
file I/O) while adopting #5611's typed clijson.LaunchStage,
ParseLaunchStage validation, and stageErr accumulation; dropped the
now-removed Preview field and previewFromLaunchStage. annotations.go,
descriptor.go, preview.go and extension.go auto-merged into the same
shape.
- #5467 (postgres_roles resource) added entries to the old multi-file
annotations. Reproduced its manual descriptions for the PostgresRole
fields in the new tree-format annotations.yml (the embedded RoleRoleSpec
is flattened inline, so these can't be derived from cli.json); the
RoleAttributes/RoleAuthMethod/etc. openapi docs regenerate in memory.
The deleted annotations_openapi*.yml stay deleted.
Verified: jsonschema.json and jsonschema_for_docs.json regenerate
byte-identical to origin/main, annotations.yml is byte-idempotent, and
go test ./bundle/internal/schema/... ./internal/clijson/... plus the
refschema acceptance test pass.
Co-authored-by: Isaac
pietern added a commit that referenced this pull request Jun 17, 2026
Resolve conflicts from main's #5467 (postgres_roles resource) landing while this
branch developed postgres_databases on the earlier role pattern:
- postgres_role.go: take main's #5467 version (PostgresRoleRemote drift
detection, collectLeafUpdatePathsWithPrefix); drop the branch's superseded
PostgresRoleState marshaler and its unit test.
- Remove duplicate postgres_roles registrations from the add/add merge across
resources.go, all.go, pkg.go, interpolate.go, fake_workspace.go, the
testserver role handlers, and several test fixtures.
- Apply main's role refinements to postgres_databases: leaf update-mask paths,
testserver update_mask honoring (applyDatabaseSpecMask), and 400-on-duplicate
create, with parallel testserver tests.
- Regenerate apitypes/resources/refschema/schema artifacts; merge NEXT_CHANGELOG.
Co-authored-by: Isaac
pietern added a commit that referenced this pull request Jun 17, 2026
…ermissions fixture
Cross-checking against the postgres_roles PR (#5467) surfaced two misses for
postgres_databases:
- deployment/bind: ~20 resources (incl. postgres_role) have a deployment/bind
acceptance test, but postgres_database had none. Add one mirroring the role
test (bind -> summary -> unbind -> summary, both engines).
- apply_bundle_permissions_test.go: the unsupportedResources slice listed
"postgres_roles" twice — a slice-element add/add artifact from the earlier
merge that compiles cleanly so build/test didn't catch it. Deduplicated.
Other role-PR changes were already present for databases (config methods, the
tfdyn converter, generated schema/validation/apitypes/resources, testserver
handlers, mutator fixtures). Role-only items correctly have no database analog:
enum_fields/annotation type-entries (the database spec has only scalar fields),
and the inherited-role / recreate-postgres-role tests (role-specific semantics).
Co-authored-by: Isaac
deco-sdk-taggingBot added a commit that referenced this pull request Jun 17, 2026
## Release v1.4.0
### CLI
* Improved error messages for `ssh connect`: when an SSH connection attempt fails, the client now fetches and prints the server's recent error logs ([#5555](#5555)).
* Increase the SSH server startup timeout from 10 to 45 minutes when a GPU accelerator is requested via `databricks ssh connect --accelerator` ([#5569](#5569)).
* Fix authentication falling back to the default profile in `.databrickscfg` when a host is already configured via the environment (e.g. `DATABRICKS_HOST` with `DATABRICKS_TOKEN`) ([#5616](#5616)).
* ssh: fix opening remote environment in Cursor, which previously hung on default-extension install and never opened the editor ([#5619](#5619)).
* Improve the error shown when `databricks labs install` cannot find a project's `labs.yml`: the message now explains that either the requested version does not exist or the project is not installable with the CLI, and links to the repository ([#5559](#5559)).
### Bundles
* Remove API enum values and types that are still in development from the `databricks-bundles` Python package; these were never accepted by the backend ([#5484](#5484)).
* direct: Fix resolving a resource reference that is used more than once within the same field ([#5558](#5558)).
* Bundle variable references now accept Unicode letters in path segments (e.g. `${var.变量}`). ([#5532](#5532))
* Ignore remote changes for vector search direct_access_index_spec.schema_json to prevent drift when the backend normalizes the schema ([#5481](#5481)).
* Remove hidden, never-functional `--existing-dashboard-id`, `--existing-dashboard-path`, `--existing-alert-id`, and `--existing-genie-space-id` alias flags from `bundle generate`; use the documented `--existing-id` / `--existing-path` flags instead ([#5591](#5591)).
* engine/direct: Fix WAL corruption after two consecutive failed deploys ([#5606](#5606)).
* engine/direct: Don't open the deployment state WAL when a deploy's plan fails ([#5607](#5607)).
* Ignore unity catalog managed schema property defaults to avoid unnecessary drift ([#5195](#5195)).
* Add `postgres_roles` and `postgres_databases` resources to create Postgres roles and databases on a Lakebase branch ([#5467](#5467), [#5627](#5627)).
* direct: Stop spurious recreate/rename on redeploy when the backend normalizes a resource's name-based ID (e.g. Unity Catalog lowercasing a schema or volume name) ([#5599](#5599)).
* Fix the generated pipeline README to suggest `databricks bundle run <pipeline> --refresh <table>` for running a single transformation; the previously documented `--select` flag is not supported by `bundle run` ([#5252](#5252)).
janniklasrose added a commit to databricks/bundle-examples that referenced this pull request Jul 1, 2026
The postgres_databases and postgres_roles resources this example now uses
first shipped in Databricks CLI v1.4.0 (databricks/cli#5467 and
databricks/cli#5627), so v1.0.0 is too low. database_with_catalog keeps
v1.0.0, since postgres_catalogs shipped in v1.0.0.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
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

@janniklasrose@eng-dev-ecosystem-bot@pietern