Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
92fac76
direct: Add dashboards support
shreyas-goenka Oct 6, 2025
cbf97d3
make change detection work
shreyas-goenka Oct 6, 2025
6e1d4f2
add tests for dahsboard generate
shreyas-goenka Oct 8, 2025
574939c
Replace FieldTriggers with FieldTriggersLocal and FieldTriggersRemote
shreyas-goenka Oct 8, 2025
d2f2566
better comments
shreyas-goenka Oct 8, 2025
bf3b696
remove golangci
shreyas-goenka Oct 8, 2025
7f77809
update files
shreyas-goenka Oct 8, 2025
33e06c7
Merge remote-tracking branch 'origin' into field-trigger-remote
shreyas-goenka Oct 8, 2025
b59cd5d
address comments
shreyas-goenka Oct 9, 2025
c62217d
address comments
shreyas-goenka Oct 9, 2025
3405b17
address comments
shreyas-goenka Oct 9, 2025
d9d2cf1
better validation
shreyas-goenka Oct 9, 2025
f2720d3
address comments
shreyas-goenka Oct 10, 2025
046a699
fix lint
shreyas-goenka Oct 10, 2025
0c20964
merge
shreyas-goenka Oct 13, 2025
488eeb9
Merge PR #3741: Add isLocal parameter to FieldTriggers and ClassifyCh…
shreyas-goenka Oct 13, 2025
64c6473
Merge remote-tracking branch 'origin/main' into direct/dashboard
shreyas-goenka Oct 13, 2025
a0bd138
tests for all change; improrevements
shreyas-goenka Oct 14, 2025
e141f39
Merge branch 'main' into direct/dashboard
shreyas-goenka Oct 14, 2025
dff5d2b
-
shreyas-goenka Oct 14, 2025
173c559
-
shreyas-goenka Oct 14, 2025
60e76cb
cloudupdate
shreyas-goenka Oct 14, 2025
ce34e96
final test update
shreyas-goenka Oct 14, 2025
8b878ed
=
shreyas-goenka Oct 14, 2025
566396c
-
shreyas-goenka Oct 14, 2025
034e573
fix parent path test
shreyas-goenka Oct 14, 2025
d1c4edb
fix parent path test
shreyas-goenka Oct 14, 2025
bbf09dd
terraform as well'
shreyas-goenka Oct 14, 2025
f70d9a5
fix parent path test
shreyas-goenka Oct 14, 2025
bd44798
-
shreyas-goenka Oct 14, 2025
00aa9e7
add comment
shreyas-goenka Oct 14, 2025
9750d68
-
shreyas-goenka Oct 14, 2025
59513e9
undo adapter changes
shreyas-goenka Oct 14, 2025
d47dd2f
-
shreyas-goenka Oct 14, 2025
b4568f3
cleanup todos
shreyas-goenka Oct 14, 2025
922a241
fix more tests
shreyas-goenka Oct 16, 2025
4d84e85
nil check in DoCreate
shreyas-goenka Oct 16, 2025
e4382a4
regenerate tests
shreyas-goenka Oct 16, 2025
1b02045
lint
shreyas-goenka Oct 16, 2025
aa70d02
-
shreyas-goenka Oct 16, 2025
07879cf
-
shreyas-goenka Oct 16, 2025
f7c1615
better factor code
shreyas-goenka Oct 16, 2025
113978f
lint
shreyas-goenka Oct 16, 2025
f11f3fc
fix windows test
shreyas-goenka Oct 16, 2025
8e69001
merge
shreyas-goenka Oct 16, 2025
1ea408d
Revert dashboard validation in required.go
shreyas-goenka Oct 16, 2025
729429e
update
shreyas-goenka Oct 16, 2025
6b565ec
update
shreyas-goenka Oct 16, 2025
1511dd8
update
shreyas-goenka Oct 16, 2025
998b779
update
shreyas-goenka Oct 16, 2025
ec2ae2c
update
shreyas-goenka Oct 16, 2025
670ee37
update
shreyas-goenka Oct 16, 2025
9e7cd3c
update
shreyas-goenka Oct 16, 2025
b432dd0
update
shreyas-goenka Oct 16, 2025
074b7fc
update
shreyas-goenka Oct 16, 2025
806f04c
update
shreyas-goenka Oct 16, 2025
68f90df
regen validate output
shreyas-goenka Oct 16, 2025
5d20683
add no path conv
shreyas-goenka Oct 16, 2025
5f11aa3
fix etag update
shreyas-goenka Oct 23, 2025
c3bd0a9
parent_path
shreyas-goenka Oct 23, 2025
2d32d96
address comments
shreyas-goenka Oct 23, 2025
302b360
address comments
shreyas-goenka Oct 23, 2025
160cbe6
update tests
shreyas-goenka Oct 27, 2025
2c9bd4d
update
shreyas-goenka Oct 27, 2025
31f7e2d
Add tests for publish failure and deletion
shreyas-goenka Oct 27, 2025
e0109af
-
shreyas-goenka Oct 27, 2025
b7e3d26
Merge remote-tracking branch 'origin' into direct/dashboard
shreyas-goenka Oct 27, 2025
61e12a9
update user agent test
shreyas-goenka Oct 27, 2025
fd193fd
-
shreyas-goenka Oct 27, 2025
4b949f7
-
shreyas-goenka Oct 27, 2025
4a85465
ok
shreyas-goenka Oct 27, 2025
66ec29e
ok
shreyas-goenka Oct 27, 2025
7f6587b
ok
shreyas-goenka Oct 27, 2025
ffb7aa3
ok
shreyas-goenka Oct 27, 2025
aa45c47
fix test
shreyas-goenka Oct 27, 2025
be3cae4
address comments
shreyas-goenka Oct 27, 2025
e9b8e1b
fix windows test
shreyas-goenka Oct 27, 2025
2176a9e
add back embed_credentials force send + fix JSON schema generation
shreyas-goenka Oct 27, 2025
13d1fcf
add back the omitempty annotation
shreyas-goenka Oct 27, 2025
026be89
add back embed_credentials annotation + revert the JSON schema changes
shreyas-goenka Oct 27, 2025
8bb3d7e
split post and patch
shreyas-goenka Oct 28, 2025
935b113
Add plan for trashed dashboard
shreyas-goenka Oct 28, 2025
41ca336
use real time replacements
shreyas-goenka Oct 28, 2025
5d94f00
fix test
shreyas-goenka Oct 29, 2025
2eb8b86
merge
shreyas-goenka Oct 29, 2025
79163e8
fix test
shreyas-goenka Oct 29, 2025
00084c4
fix test
shreyas-goenka Oct 29, 2025
6b0422d
add omitempty back
shreyas-goenka Oct 29, 2025
ddff1a1
fix windows test
shreyas-goenka Oct 29, 2025
5661607
Merge remote-tracking branch 'origin' into direct/dashboard
shreyas-goenka Oct 29, 2025
af20a88
Merge remote-tracking branch 'origin' into direct/dashboard
shreyas-goenka Oct 30, 2025
d3f360e
address comments
shreyas-goenka Oct 30, 2025
758ff98
Fix some tests
shreyas-goenka Oct 30, 2025
5c5990b
fix windows test
shreyas-goenka Oct 30, 2025
a2242f0
merge
shreyas-goenka Oct 30, 2025
2f971d2
merge
shreyas-goenka Oct 31, 2025
e11fd37
fix other tests
shreyas-goenka Oct 31, 2025
ade72f5
merge
shreyas-goenka Oct 31, 2025
8f0c6ad
-
shreyas-goenka Oct 31, 2025
8b0c9e2
merge
shreyas-goenka Oct 31, 2025
f8b7052
cleaup
shreyas-goenka Nov 5, 2025
f96117d
merge
shreyas-goenka Nov 5, 2025
8b8e505
merge
shreyas-goenka Nov 5, 2025
13ff5c9
fix windows test
shreyas-goenka Nov 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions acceptance/.gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# For example, an additional \r character in windows changes the upload payload if you are
# uploading the file's content to a workspace.
*.txt text eol=lf
*.lvdash.json text eol=lf

# The out.test.toml file is autogenerated based on the merged test.toml view.
out.test.toml linguist-generated=true
Expand Down
2 changes: 1 addition & 1 deletion acceptance/bundle/generate/dashboard-inplace/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Deployment complete!
"lifecycle_state":"ACTIVE",
"parent_path":"/Users/[USERNAME]/.bundle/dashboard update inplace/default/resources",
"path":"/Users/[USERNAME]/.bundle/dashboard update inplace/default/resources/test dashboard.lvdash.json",
"serialized_dashboard":"{\"a\":\"b\"}",
"serialized_dashboard":"{\"a\":\"b\"}\n",
"update_time":"[TIMESTAMP]",
"warehouse_id":"my-warehouse-1234"
}
Expand Down
5 changes: 5 additions & 0 deletions acceptance/bundle/generate/dashboard-inplace/test.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,8 @@ EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform"] # dashboards not supported y
[[Repls]]
Old = "[0-9a-f]{32}"
New = "[DASHBOARD_ID]"

[[Repls]]
Old = '2\d\d\d-\d\d-\d\d(T| )\d\d:\d\d:\d\d(\.\d+(Z|\+\d\d:\d\d)?)?Z'
New = "[TIMESTAMP]"
Order = 9
24 changes: 24 additions & 0 deletions acceptance/bundle/refschema/out.fields.txt
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,30 @@ resources.clusters.*.permissions.permissions[*].group_name string ALL
resources.clusters.*.permissions.permissions[*].permission_level iam.PermissionLevel ALL
resources.clusters.*.permissions.permissions[*].service_principal_name string ALL
resources.clusters.*.permissions.permissions[*].user_name string ALL
resources.dashboards.*.create_time string ALL
resources.dashboards.*.dashboard_id string ALL
resources.dashboards.*.display_name string ALL
resources.dashboards.*.embed_credentials bool ALL
resources.dashboards.*.etag string ALL
resources.dashboards.*.file_path string INPUT
resources.dashboards.*.id string INPUT
resources.dashboards.*.lifecycle resources.Lifecycle INPUT
resources.dashboards.*.lifecycle.prevent_destroy bool INPUT
resources.dashboards.*.lifecycle_state dashboards.LifecycleState ALL
resources.dashboards.*.modified_status string INPUT
resources.dashboards.*.parent_path string ALL
resources.dashboards.*.path string ALL
resources.dashboards.*.permissions []resources.DashboardPermission INPUT
resources.dashboards.*.permissions[*] resources.DashboardPermission INPUT
resources.dashboards.*.permissions[*].group_name string INPUT
resources.dashboards.*.permissions[*].level resources.DashboardPermissionLevel INPUT
resources.dashboards.*.permissions[*].service_principal_name string INPUT
resources.dashboards.*.permissions[*].user_name string INPUT
resources.dashboards.*.serialized_dashboard any ALL
resources.dashboards.*.serialized_dashboard string ALL
resources.dashboards.*.update_time string ALL
resources.dashboards.*.url string INPUT
resources.dashboards.*.warehouse_id string ALL
resources.database_catalogs.*.create_database_if_not_exists bool ALL
resources.database_catalogs.*.database_instance_name string ALL
resources.database_catalogs.*.database_name string ALL
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
bundle:
name: change-embed-credentials-$UNIQUE_NAME

resources:
dashboards:
my_dashboard:
display_name: test dashboard
file_path: ./dash.lvdash.json
warehouse_id: $TEST_DEFAULT_WAREHOUSE_ID
embed_credentials: $EMBED_CREDENTIALS
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"method": "PATCH",
"path": "/api/2.0/lakeview/dashboards/[DASHBOARD_ID]",
"body": {
"display_name": "test dashboard",
"parent_path": "/Workspace/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources",
"serialized_dashboard": "{}\n",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"method": "PATCH",
"path": "/api/2.0/lakeview/dashboards/[DASHBOARD_ID]",
"body": {
"create_time": "[TIMESTAMP]",
"dashboard_id": "[DASHBOARD_ID]",
"display_name": "test dashboard",
"etag": [ETAG],
"lifecycle_state": "ACTIVE",
"parent_path": "/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources",
"path": "/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources/test dashboard.lvdash.json",
"serialized_dashboard": "{}\n",
"update_time": "[TIMESTAMP]",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"method": "POST",
"path": "/api/2.0/lakeview/dashboards",
"body": {
"display_name": "test dashboard",
"parent_path": "/Workspace/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources",
"serialized_dashboard": "{}\n",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
{
"method": "POST",
"path": "/api/2.0/workspace/mkdirs",
"body": {
"path": "/Workspace/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources"
}
}
{
"method": "POST",
"path": "/api/2.0/lakeview/dashboards",
"body": {
"display_name": "test dashboard",
"parent_path": "/Workspace/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources",
"serialized_dashboard": "{}\n",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
{
"method": "POST",
"path": "/api/2.0/lakeview/dashboards/[DASHBOARD_ID]/published",
"body": {
"embed_credentials": false,
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
{
"method": "POST",
"path": "/api/2.0/lakeview/dashboards/[DASHBOARD_ID]/published",
"body": {
"embed_credentials": true,
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@

>>> [CLI] bundle plan
create dashboards.my_dashboard

Plan: 1 to add, 0 to change, 0 to delete, 0 unchanged

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/files...
Deploying resources...
Updating deployment state...
Deployment complete!

>>> [CLI] lakeview get [DASHBOARD_ID]
{
"display_name": "test dashboard",
"lifecycle_state": "ACTIVE",
"parent_path": "/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources",
"path": "/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources/test dashboard.lvdash.json",
"serialized_dashboard": "{}\n",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}

>>> [CLI] lakeview get-published [DASHBOARD_ID]
{
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]",
"embed_credentials": false
}

>>> [CLI] bundle plan
update dashboards.my_dashboard

Plan: 0 to add, 1 to change, 0 to delete, 0 unchanged

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/files...
Deploying resources...
Updating deployment state...
Deployment complete!

>>> [CLI] lakeview get [DASHBOARD_ID]
{
"display_name": "test dashboard",
"lifecycle_state": "ACTIVE",
"parent_path": "/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources",
"path": "/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default/resources/test dashboard.lvdash.json",
"serialized_dashboard": "{}\n",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}

>>> [CLI] lakeview get-published [DASHBOARD_ID]
{
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]",
"embed_credentials": true
}

>>> [CLI] bundle destroy --auto-approve
The following resources will be deleted:
delete dashboard my_dashboard

All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/change-embed-credentials-[UNIQUE_NAME]/default

Deleting files...
Destroy complete!
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
export EMBED_CREDENTIALS="false"

cleanup() {
trace $CLI bundle destroy --auto-approve
rm out.requests.txt
}
trap cleanup EXIT

# Helper functions for dashboard change-* tests

# Deploy the dashboard and capture the ID
deploy_dashboard() {
envsubst < databricks.yml.tmpl > databricks.yml
trace $CLI bundle plan
trace $CLI bundle deploy
dashboard_id=$($CLI bundle summary --output json | jq -r '.resources.dashboards.my_dashboard.id')

trace $CLI lakeview get $dashboard_id | jq "{display_name, lifecycle_state, parent_path, path, serialized_dashboard, warehouse_id}"
trace $CLI lakeview get-published $dashboard_id | jq "{warehouse_id, embed_credentials}"
}

# Create the dashboard with embed_credentials=false
deploy_dashboard

# Capture the dashboard ID as a replacement.
dashboard_id=$($CLI bundle summary --output json | jq -r '.resources.dashboards.my_dashboard.id')
echo "$dashboard_id:DASHBOARD_ID" >> ACC_REPLS

# Change embed_credentials to true - this should trigger an update
export EMBED_CREDENTIALS="true"
deploy_dashboard

# Print API requests made to create parent_path or create / update the dashboard.
# Terraform serialized OUTPUT_ONLY fields in the request body while direct does not.
# That's why we write the requests to separate files.
cat out.requests.txt | \
jq 'select(.method == "PATCH")' | \
jq 'select( (.path | contains("/api/2.0/lakeview/dashboards")) or ((.path == "/api/2.0/workspace/mkdirs") and (.body.path | contains("/default/resources"))))' \
> out.patch.requests.$DATABRICKS_BUNDLE_ENGINE.txt

cat out.requests.txt | \
jq 'select(.method == "POST")' | \
jq 'select( (.path | contains("/api/2.0/lakeview/dashboards")) or ((.path == "/api/2.0/workspace/mkdirs") and (.body.path | contains("/default/resources"))))' \
> out.post.requests.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
bundle:
name: change-name-$UNIQUE_NAME

resources:
dashboards:
my_dashboard:
display_name: $NAME
file_path: ./dash.lvdash.json
warehouse_id: $TEST_DEFAULT_WAREHOUSE_ID
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"method": "PATCH",
"path": "/api/2.0/lakeview/dashboards/[DASHBOARD_ID]",
"body": {
"display_name": "dashboard2",
"parent_path": "/Workspace/Users/[USERNAME]/.bundle/change-name-[UNIQUE_NAME]/default/resources",
"serialized_dashboard": "{}\n",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"method": "PATCH",
"path": "/api/2.0/lakeview/dashboards/[DASHBOARD_ID]",
"body": {
"create_time": "[TIMESTAMP]",
"dashboard_id": "[DASHBOARD_ID]",
"display_name": "dashboard2",
"etag": [ETAG],
"lifecycle_state": "ACTIVE",
"parent_path": "/Users/[USERNAME]/.bundle/change-name-[UNIQUE_NAME]/default/resources",
"path": "/Users/[USERNAME]/.bundle/change-name-[UNIQUE_NAME]/default/resources/dashboard1.lvdash.json",
"serialized_dashboard": "{}\n",
"update_time": "[TIMESTAMP]",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"method": "POST",
"path": "/api/2.0/lakeview/dashboards",
"body": {
"display_name": "dashboard1",
"parent_path": "/Workspace/Users/[USERNAME]/.bundle/change-name-[UNIQUE_NAME]/default/resources",
"serialized_dashboard": "{}\n",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
{
"method": "POST",
"path": "/api/2.0/workspace/mkdirs",
"body": {
"path": "/Workspace/Users/[USERNAME]/.bundle/change-name-[UNIQUE_NAME]/default/resources"
}
}
{
"method": "POST",
"path": "/api/2.0/lakeview/dashboards",
"body": {
"display_name": "dashboard1",
"parent_path": "/Workspace/Users/[USERNAME]/.bundle/change-name-[UNIQUE_NAME]/default/resources",
"serialized_dashboard": "{}\n",
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
{
"method": "POST",
"path": "/api/2.0/lakeview/dashboards/[DASHBOARD_ID]/published",
"body": {
"embed_credentials": false,
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}
{
"method": "POST",
"path": "/api/2.0/lakeview/dashboards/[DASHBOARD_ID]/published",
"body": {
"embed_credentials": false,
"warehouse_id": "[TEST_DEFAULT_WAREHOUSE_ID]"
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading