Skip to content

refactor(provider): use go-keyring for cross-platform credential storage#34

Merged
priyanshujain merged 12 commits intomasterfrom
cross-platform-keyring
Mar 9, 2026
Merged

refactor(provider): use go-keyring for cross-platform credential storage#34
priyanshujain merged 12 commits intomasterfrom
cross-platform-keyring

Conversation

@priyanshujain
Copy link
Copy Markdown
Collaborator

@priyanshujain priyanshujain commented Mar 9, 2026

Summary

  • Replace hand-rolled macOS Keychain CLI calls with zalando/go-keyring for cross-platform credential storage
  • Native credential stores on all platforms: macOS Keychain, Linux Secret Service (GNOME Keyring/KDE Wallet), Windows Credential Manager
  • Keyring errors propagate directly — no silent fallback to plain-text files
  • Headless/CI environments use environment variables (ANTHROPIC_API_KEY, etc.) via the existing ResolveAPIKey env var path
  • Rename KeychainLoad/KeychainStore to LoadCredential/StoreCredential (platform-neutral naming)
  • Pure Go, no CGO — cross-compiles with CGO_ENABLED=0 for all targets

Test plan

  • go test ./provider/ — all 38 tests pass
  • Cross-compiles for linux/amd64, windows/amd64, darwin/arm64
  • Keyring errors propagate (not swallowed)
  • LoadCredential/StoreCredential round-trip via mocked keyring
  • Verify existing macOS Keychain credentials are still readable after upgrade
  • Verify credential storage works on Linux desktop with GNOME Keyring

Replace hand-rolled macOS Keychain calls and plain-file-only storage
on Linux/Windows with zalando/go-keyring. The library uses native
credential stores (Keychain, Secret Service, WinCred) on all three
platforms. On headless/Docker environments where no keyring daemon is
available, we fall back to the existing ~/.obk/secrets/ file store.
Drop the silent file-based fallback (~/.obk/secrets/) from credential
storage. Errors from the OS keyring are now propagated directly.
Headless/CI environments should use environment variables instead,
which ResolveAPIKey already supports.
@priyanshujain priyanshujain merged commit 0541aa4 into master Mar 9, 2026
10 checks passed
Sign up for free to 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.

1 participant