Extract shared SelectProfile helper to eliminate duplicate profile pickers#4647
Open
mihaimitrea-db wants to merge 32 commits intomainfrom
Open
Extract shared SelectProfile helper to eliminate duplicate profile pickers#4647mihaimitrea-db wants to merge 32 commits intomainfrom
mihaimitrea-db wants to merge 32 commits intomainfrom
Conversation
This was referenced Mar 3, 2026
0f9a04c to
c6d25f1
Compare
Collaborator
|
Commit: 51f14b5
17 interesting tests: 7 SKIP, 6 RECOVERED, 3 flaky, 1 FAIL
Top 34 slowest tests (at least 2 minutes):
|
c6d25f1 to
c9512bf
Compare
8a5d258 to
b40887a
Compare
b40887a to
16de011
Compare
16de011 to
3116cbb
Compare
3116cbb to
634b7b9
Compare
634b7b9 to
40c98ed
Compare
40c98ed to
76e7b0e
Compare
c6a2f23 to
3c8e18a
Compare
76e7b0e to
109b1ca
Compare
3c8e18a to
c37cac0
Compare
109b1ca to
336ab51
Compare
c37cac0 to
6a3a446
Compare
- Use profiler.GetPath() to resolve config path instead of hardcoding platform-specific defaults for the help text. - Read DATABRICKS_CONFIG_FILE via env.Get(ctx, ...) instead of os.Getenv to respect context-level env overrides. - Add abort message when user declines the confirmation prompt. - Guard DeleteProfile against non-existent profiles to avoid creating unnecessary backup files. - Add TestDeleteProfile_NotFound for the error path.
Cover four scenarios: profile ordering and comments are preserved after deletion, deleting the last non-default profile leaves an empty DEFAULT section, deleting the DEFAULT profile itself clears its keys and restores the default comment, and error paths for non-existent profiles and missing --profile in non-interactive mode.
By default, Authentication related commands. For more information regarding how authentication for the Databricks CLI and SDKs work please refer to the documentation linked below. AWS: https://docs.databricks.com/dev-tools/auth/index.html Azure: https://learn.microsoft.com/azure/databricks/dev-tools/auth GCP: https://docs.gcp.databricks.com/dev-tools/auth/index.html Usage: databricks auth [command] Available Commands: describe Describes the credentials and the source of those credentials, being used by the CLI to authenticate env Get env login Log into a Databricks workspace or account profiles Lists profiles from ~/.databrickscfg token Get authentication token Flags: --account-id string Databricks Account ID --experimental-is-unified-host Flag to indicate if the host is a unified host -h, --help help for auth --host string Databricks Host --workspace-id string Databricks Workspace ID Global Flags: --debug enable debug logging -o, --output type output type: text or json (default text) -p, --profile string ~/.databrickscfg profile -t, --target string bundle target to use (if applicable) Use "databricks auth [command] --help" for more information about a command. now only clears cached OAuth tokens without removing the profile from ~/.databrickscfg. Pass --delete to also remove the profile entry from the config file.
Existing acceptance tests that verify profile deletion now use --delete since profile removal is opt-in. Two new acceptance tests verify token-only logout: one for a unique host (both cache entries cleared) and one for a shared host (host-keyed token preserved).
Replace manual strings.TrimRight(host, /) with the SDK's config.Config.CanonicalHostName(), which handles scheme normalization, trailing slashes, and empty hosts consistently with how the SDK itself computes token cache keys.
- Make Long description static to avoid calling logger and GetPath at command construction time before the logger is initialized. - Remove empty test.toml files from acceptance tests. - Add \n to error-case titles so errors appear on a separate line. - Use .tokens | keys in jq queries for token cache to reduce verbosity. - Switch test profiles from PAT to auth_type=databricks-cli (U2M) so token cache tests exercise a realistic OAuth logout flow. - Add AuthType field to profile.Profile to detect non-U2M profiles; skip token cache cleanup and adjust success message accordingly. - Add delete-m2m-profiles acceptance test covering PAT profile logout with and without --delete. - Fix DeleteProfile to clear DEFAULT section keys instead of deleting and recreating it, preserving its position in the file.
- Rename isU2MProfile to isCreatedByLogin to accurately reflect that the check is specific to profiles created by . - Tighten success and error messages: drop "Successfully", add actionable suggestions (e.g. "Use --delete to also remove it"), and include retry guidance on partial failures. - Return errors instead of logging on DeleteProfile failure so callers see a non-zero exit code. - Fix token-only acceptance test: use OIDC-style cache key (host/oidc/accounts/<id>) for account profiles so both token cache entries are correctly cleaned up.
8e3d5e7 to
ed5be7c
Compare
When --profile is not specified in an interactive terminal, show a searchable prompt listing all configured profiles. Profiles are sorted alphabetically and displayed with their host or account ID. The picker supports fuzzy search by name, host, or account ID.
Document the four interaction modes (explicit profile, interactive picker, non-interactive error, and --force) in the command's long help text.
…ckers Four places built nearly identical promptui.Select prompts for interactive profile selection (auth logout, auth token, root auth, root bundle). Extract a reusable profile.SelectProfile function that takes a declarative SelectConfig with label, profiles, and template strings. Also: add AccountID to Profiles.SearchCaseInsensitive so all pickers support searching by account ID, and remove the redundant not-found guard in DeleteProfile (ini.DeleteSection is already a no-op for missing sections).
Extract writeConfigFile helper to consolidate the repeated default-comment, backup, and save sequence shared by SaveToProfile and DeleteProfile. Also switch auth login from os.Getenv to env.Get(ctx, ...) for DATABRICKS_CONFIG_FILE so it respects context-level env overrides, consistent with the rest of the codebase.
- Restore StartInSearchMode for logout picker so profiles with 6+ entries auto-activate search, matching the previous behavior. - Improve empty-profiles error to suggest running 'databricks auth login' instead of the generic "no profiles to select from".
ed5be7c to
51f14b5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🥞 Stacked PR
Use this link to review incremental changes.
Four places built nearly identical
promptui.Selectprompts for interactive profile selection (auth logout,auth token,cmd/root/auth.go,cmd/root/bundle.go). This PR extracts a reusableprofile.SelectProfilefunction that accepts a declarativeSelectConfigwith label, profiles, and template strings, replacing all four implementations.Changes
profile.SelectProfileinlibs/databrickscfg/profile/select.go— a shared interactive profile picker that accepts aSelectConfig(label, profiles, template strings) and returns the selected profile name.promptui.Selectimplementations incmd/auth/logout.go,cmd/auth/token.go,cmd/root/auth.go, andcmd/root/bundle.gowith calls toSelectProfile.AccountIDtoProfiles.SearchCaseInsensitiveso all pickers support searching by account ID, not just name and host.writeConfigFilehelper inlibs/databrickscfg/ops.goto consolidate the repeated default-comment / backup / save sequence shared bySaveToProfileandDeleteProfile.Why
The four profile pickers each duplicated the same prompt setup, searcher wiring, and result extraction. This made it easy for behavior to diverge (e.g., only the logout picker searched by account ID). A single shared helper keeps the UX consistent and reduces the surface area for future changes.
Tests
auth logout,auth token, workspace/account profile selection, and bundle profile resolution continue to pass — the refactor is behavior-preserving.SelectProfilehelper is exercised indirectly through all existing callers.