Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
222eaa4
Bump databricks-sdk-go from v0.175.0 to v0.177.0
janniklasrose Aug 31, 2026
686d31b
Add postgres_snapshot_schedules bundle resource
janniklasrose Aug 31, 2026
c57ed62
Remove redundant snapshot_schedules acceptance subtests
janniklasrose Sep 1, 2026
48d3fa7
Add snapshotScheduleName helper to normalize a trailing slash
janniklasrose Sep 1, 2026
9970a2c
Assert no drift after removing the snapshot schedule
janniklasrose Sep 1, 2026
120176f
task generate-check
janniklasrose Sep 1, 2026
4400109
Merge remote-tracking branch 'origin/main' into janniklasrose/postgre…
janniklasrose Sep 8, 2026
877b6ae
Wire postgres_snapshot_schedules into resource exhaustiveness checks
janniklasrose Sep 8, 2026
c032faa
Fix changelog fragment format for postgres_snapshot_schedules
janniklasrose Sep 8, 2026
2aadf86
Resolve postgres_snapshot_schedules URL to the branch restore page
janniklasrose Sep 8, 2026
6a4da27
Build snapshot schedule URL via workspaceurls helper
janniklasrose Sep 8, 2026
7b40ce7
Fix resource-type list tests and derive snapshot URL from ID
janniklasrose Sep 8, 2026
adc3126
Remove postgres_snapshot_schedules from the noURL allowlist
janniklasrose Sep 8, 2026
31f4012
Merge remote-tracking branch 'origin/main' into janniklasrose/postgre…
janniklasrose Sep 8, 2026
21c12cc
Give PostgresSnapshotScheduleConfig a value-receiver MarshalJSON
janniklasrose Sep 8, 2026
77ae3b5
Remove URL handling from postgres_snapshot_schedules
janniklasrose Sep 8, 2026
0ae783f
Only allow snapshot schedules on the root branch
janniklasrose Sep 8, 2026
1cb15f6
Expose the snapshot schedule name via GetName
janniklasrose Sep 8, 2026
d985cb0
Merge remote-tracking branch 'origin/main' into janniklasrose/postgre…
janniklasrose Sep 8, 2026
ea32dbc
Regenerate PyDABs for postgres_snapshot_schedules
janniklasrose Sep 9, 2026
bb03774
Distinguish "not supported" from "not deployed" in bundle summary
janniklasrose Sep 9, 2026
f5840b8
Reference PR #6583 in changelog fragment
janniklasrose Sep 9, 2026
9f32d3a
Merge remote-tracking branch 'origin/main' into janniklasrose/summary…
janniklasrose Sep 9, 2026
624287f
Use SupportsURL() in bundle/pipelines open and pipelines deploy
janniklasrose Sep 9, 2026
4d46bd6
Fold SupportsURL into GetURL() (string, bool)
janniklasrose Sep 9, 2026
feb4032
Omit the URL row in bundle summary for resource types without a URL
janniklasrose Sep 9, 2026
47c0de4
Merge branch 'main' into janniklasrose/summary-url-not-supported
janniklasrose Sep 9, 2026
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 .nextchanges/bundles/url-not-supported.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* CLI commands no longer imply that a resource whose type has no workspace URL is merely not deployed yet. ([#6583](https://github.com/databricks/cli/pull/6583))
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ Resources:
Postgres databases:
database1:
Name:
URL: (not deployed)

>>> [CLI] bundle deployment unbind database1

Expand All @@ -27,4 +26,3 @@ Resources:
Postgres databases:
database1:
Name:
URL: (not deployed)
2 changes: 0 additions & 2 deletions acceptance/bundle/deployment/bind/postgres_role/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ Resources:
Postgres roles:
role1:
Name:
URL: (not deployed)

>>> [CLI] bundle deployment unbind role1

Expand All @@ -27,4 +26,3 @@ Resources:
Postgres roles:
role1:
Name:
URL: (not deployed)
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ Resources:
Postgres snapshot schedules:
schedule1:
Name: projects/test-project/branches/main/snapshot-schedule
URL: (not deployed)

>>> [CLI] bundle deployment unbind schedule1

Expand All @@ -27,4 +26,3 @@ Resources:
Postgres snapshot schedules:
schedule1:
Name:
URL: (not deployed)
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,9 @@ Resources:
Postgres branches:
main:
Name:
URL: (not deployed)
Postgres projects:
my_project:
Name: Test Project for Branch
URL: (not deployed)

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/deploy-postgres-branch-[UNIQUE_NAME]/default/files...
Expand Down Expand Up @@ -59,11 +57,9 @@ Resources:
Postgres branches:
main:
Name:
URL: (not deployed)
Postgres projects:
my_project:
Name: Test Project for Branch
URL: (not deployed)

>>> print_requests.py --del-body project_id,branch_id,endpoint_id,database_id,role_id,catalog_id,synced_table_id --keep --get //postgres ^//workspace-files/ ^//workspace/ ^//telemetry-ext ^//operations/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ Resources:
Postgres projects:
my_project:
Name: Test Project for Catalog
URL: (not deployed)

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/deploy-postgres-catalog-[UNIQUE_NAME]/default/files...
Expand Down Expand Up @@ -56,7 +55,6 @@ Resources:
Postgres projects:
my_project:
Name: Test Project for Catalog
URL: (not deployed)

>>> print_requests.py --del-body project_id,branch_id,endpoint_id,database_id,role_id,catalog_id,synced_table_id --keep --get //postgres ^//workspace-files/ ^//workspace/ ^//telemetry-ext ^//operations/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,15 @@ Resources:
Postgres branches:
main:
Name:
URL: (not deployed)
Postgres databases:
my_database:
Name:
URL: (not deployed)
Postgres projects:
my_project:
Name: Test Project for Database
URL: (not deployed)
Postgres roles:
owner:
Name:
URL: (not deployed)

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/deploy-postgres-database-[UNIQUE_NAME]/default/files...
Expand Down Expand Up @@ -63,19 +59,15 @@ Resources:
Postgres branches:
main:
Name:
URL: (not deployed)
Postgres databases:
my_database:
Name:
URL: (not deployed)
Postgres projects:
my_project:
Name: Test Project for Database
URL: (not deployed)
Postgres roles:
owner:
Name:
URL: (not deployed)

>>> print_requests.py --del-body project_id,branch_id,endpoint_id,database_id,role_id,catalog_id,synced_table_id --keep --get //postgres ^//workspace-files/ ^//workspace/ ^//telemetry-ext ^//operations/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,12 @@ Resources:
Postgres branches:
main:
Name:

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.

out of scope for this PR, but related theme: why do we show Name: without a value there? Is it because there is no Name or it not known yet?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Taking a look as follow-up

URL: (not deployed)
Postgres endpoints:
custom:
Name:
URL: (not deployed)
Postgres projects:
my_project:
Name: Test Project for Endpoint
URL: (not deployed)

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/deploy-postgres-endpoint-[UNIQUE_NAME]/default/files...
Expand Down Expand Up @@ -61,15 +58,12 @@ Resources:
Postgres branches:
main:
Name:
URL: (not deployed)
Postgres endpoints:
custom:
Name:
URL: (not deployed)
Postgres projects:
my_project:
Name: Test Project for Endpoint
URL: (not deployed)

>>> print_requests.py --del-body project_id,branch_id,endpoint_id,database_id,role_id,catalog_id,synced_table_id --keep --get //postgres ^//workspace-files/ ^//workspace/ ^//telemetry-ext ^//operations/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ Resources:
Postgres projects:
my_project:
Name: Test Postgres Project
URL: (not deployed)

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/deploy-postgres-single-project-[UNIQUE_NAME]/default/files...
Expand Down Expand Up @@ -59,7 +58,6 @@ Resources:
Postgres projects:
my_project:
Name: Test Postgres Project
URL: (not deployed)

>>> print_requests.py --del-body project_id,branch_id,endpoint_id,database_id,role_id,catalog_id,synced_table_id --keep --get //postgres ^//workspace-files/ ^//workspace/ ^//telemetry-ext ^//operations/

Expand Down
9 changes: 3 additions & 6 deletions acceptance/bundle/resources/postgres_roles/basic/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,12 @@ Resources:
Postgres branches:
main:
Name:
URL: (not deployed)
Postgres projects:
my_project:
Name: Test Project for Role
URL: (not deployed)
Postgres roles:
my_role:
Name:
URL: (not deployed)

>>> [CLI] bundle deploy
Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/deploy-postgres-role-[UNIQUE_NAME]/default/files...
Expand Down Expand Up @@ -54,6 +51,9 @@ Resources: 3 created, 0 changed, 0 deleted, 0 unchanged
}
}

>>> musterr [CLI] bundle open my_role
Error: this resource type does not have a URL

>>> [CLI] bundle summary
Name: deploy-postgres-role-[UNIQUE_NAME]
Target: default
Expand All @@ -64,15 +64,12 @@ Resources:
Postgres branches:
main:
Name:
URL: (not deployed)
Postgres projects:
my_project:
Name: Test Project for Role
URL: (not deployed)
Postgres roles:
my_role:
Name:
URL: (not deployed)

>>> print_requests.py --del-body project_id,branch_id,endpoint_id,database_id,role_id,catalog_id,synced_table_id --keep --get //postgres ^//workspace-files/ ^//workspace/ ^//telemetry-ext ^//operations/

Expand Down
4 changes: 4 additions & 0 deletions acceptance/bundle/resources/postgres_roles/basic/script
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ branch_name="${project_name}/branches/main"
role_name="${branch_name}/roles/test-role"
trace $CLI postgres get-role "${role_name}" | role_fields

# Postgres roles have no workspace URL, so opening one reports that rather than
# suggesting a deploy.
trace musterr $CLI bundle open my_role

trace $CLI bundle summary

# Filter requests to only show postgres operations (exclude workspace, telemetry, and operation polling)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ Resources:
Postgres projects:
my_project:
Name: Test Project for Synced Table
URL: (not deployed)
Postgres synced tables:
my_table:
Name: ${resources.postgres_catalogs.my_catalog.catalog_id}.public.trips_synced
Expand Down Expand Up @@ -65,7 +64,6 @@ Resources:
Postgres projects:
my_project:
Name: Test Project for Synced Table
URL: (not deployed)
Postgres synced tables:
my_table:
Name: lakebase_test_[UNIQUE_NAME].public.trips_synced
Expand Down
3 changes: 2 additions & 1 deletion bundle/config/mutator/initialize_urls_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,8 @@ func TestInitializeURLs(t *testing.T) {

for _, group := range b.Config.Resources.AllResources() {
for key, r := range group.Resources {
require.Equal(t, expectedURLs[key], r.GetURL(), "Unexpected URL for "+key)
url, _ := r.GetURL()
require.Equal(t, expectedURLs[key], url, "Unexpected URL for "+key)
}
}
}
Expand Down
6 changes: 4 additions & 2 deletions bundle/config/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,10 @@ type ConfigResource interface {
// GetName returns the in-product name of the resource.
GetName() string

// GetURL returns the URL of the resource.
GetURL() string
// GetURL returns the resource's workspace URL and whether this resource type
// has one at all. A supported type that is not deployed yet returns ("", true);
// a type that never has a URL returns ("", false).
GetURL() (string, bool)

// InitializeURL initializes the URL field of the resource.
InitializeURL(baseURL url.URL)
Expand Down
4 changes: 0 additions & 4 deletions bundle/config/resources/alerts.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,3 @@ func (a *Alert) InitializeURL(baseURL url.URL) {
func (a *Alert) GetName() string {
return a.DisplayName
}

func (a *Alert) GetURL() string {
return a.URL
}
4 changes: 0 additions & 4 deletions bundle/config/resources/apps.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,3 @@ func (a *App) GetName() string {
}
return a.Name
}

func (a *App) GetURL() string {
return a.URL
}
6 changes: 6 additions & 0 deletions bundle/config/resources/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,9 @@ type BaseResource struct {
func (b *BaseResource) GetLifecycle() LifecycleConfig {
return b.Lifecycle
}

// GetURL returns the resource's workspace URL and true. Resource types whose
// IDs don't map to a web UI page override this to return ("", false).
func (b *BaseResource) GetURL() (string, bool) {
return b.URL, true
}
4 changes: 0 additions & 4 deletions bundle/config/resources/catalog.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,6 @@ func (c *Catalog) InitializeURL(baseURL url.URL) {
c.URL = workspaceurls.ResourceURL(baseURL, "catalogs", c.ID)
}

func (c *Catalog) GetURL() string {
return c.URL
}

func (c *Catalog) GetName() string {
return c.Name
}
Expand Down
4 changes: 0 additions & 4 deletions bundle/config/resources/cluster_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,3 @@ func (s *ClusterPolicy) InitializeURL(baseURL url.URL) {
func (s *ClusterPolicy) GetName() string {
return s.Name
}

func (s *ClusterPolicy) GetURL() string {
return s.URL
}
4 changes: 0 additions & 4 deletions bundle/config/resources/clusters.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,3 @@ func (s *Cluster) InitializeURL(baseURL url.URL) {
func (s *Cluster) GetName() string {
return s.ClusterName
}

func (s *Cluster) GetURL() string {
return s.URL
}
4 changes: 0 additions & 4 deletions bundle/config/resources/dashboard.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,3 @@ func (r *Dashboard) InitializeURL(baseURL url.URL) {
func (r *Dashboard) GetName() string {
return r.DisplayName
}

func (r *Dashboard) GetURL() string {
return r.URL
}
4 changes: 0 additions & 4 deletions bundle/config/resources/database_catalog.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,6 @@ func (d *DatabaseCatalog) GetName() string {
return d.Name
}

func (d *DatabaseCatalog) GetURL() string {
return d.URL
}

func (d *DatabaseCatalog) InitializeURL(baseURL url.URL) {
if d.Name == "" {
return
Expand Down
4 changes: 0 additions & 4 deletions bundle/config/resources/database_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,6 @@ func (d *DatabaseInstance) GetName() string {
return d.Name
}

func (d *DatabaseInstance) GetURL() string {
return d.URL
}

func (d *DatabaseInstance) InitializeURL(baseURL url.URL) {
if d.ModifiedStatus == ModifiedStatusCreated {
return
Expand Down
6 changes: 3 additions & 3 deletions bundle/config/resources/external_location.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ func (e *ExternalLocation) InitializeURL(baseURL url.URL) {
// The Url field is for the storage path (s3://...), not a workspace URL
}

func (e *ExternalLocation) GetURL() string {
// Return empty as external locations don't have a workspace URL
return ""
func (e *ExternalLocation) GetURL() (string, bool) {
// External locations don't have a workspace URL
return "", false
}

func (e *ExternalLocation) GetName() string {
Expand Down
4 changes: 0 additions & 4 deletions bundle/config/resources/genie_space.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,3 @@ func (r *GenieSpace) InitializeURL(baseURL url.URL) {
func (r *GenieSpace) GetName() string {
return r.Title
}

func (r *GenieSpace) GetURL() string {
return r.URL
}
4 changes: 0 additions & 4 deletions bundle/config/resources/instance_pools.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,3 @@ func (s *InstancePool) InitializeURL(baseURL url.URL) {
func (s *InstancePool) GetName() string {
return s.InstancePoolName
}

func (s *InstancePool) GetURL() string {
return s.URL
}
4 changes: 0 additions & 4 deletions bundle/config/resources/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,3 @@ func (j *Job) InitializeURL(baseURL url.URL) {
func (j *Job) GetName() string {
return j.Name
}

func (j *Job) GetURL() string {
return j.URL
}
4 changes: 0 additions & 4 deletions bundle/config/resources/job_run.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,6 @@ func (r *JobRun) GetName() string {
return ""
}

func (r *JobRun) GetURL() string {
return r.URL
}

// InitializeURL sets the run's workspace URL. The job id comes from RunNow.JobId
// when resolved (deploy) or ResolvedJobID from state (read-only commands); if
// either id is missing we skip rather than emit a broken jobs/0 URL.
Expand Down
4 changes: 0 additions & 4 deletions bundle/config/resources/mlflow_experiment.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,3 @@ func (s *MlflowExperiment) InitializeURL(baseURL url.URL) {
func (s *MlflowExperiment) GetName() string {
return s.Name
}

func (s *MlflowExperiment) GetURL() string {
return s.URL
}
Loading
Loading