feat: add XDG Base Directory spec support for config files#1181
Open
graybear-io wants to merge 1 commit intoCircleCI-Public:mainfrom
Open
feat: add XDG Base Directory spec support for config files#1181graybear-io wants to merge 1 commit intoCircleCI-Public:mainfrom
graybear-io wants to merge 1 commit intoCircleCI-Public:mainfrom
Conversation
Implements XDG Base Directory specification (issue CircleCI-Public#1177) with backwards compatibility for existing users. Changes: - Add ConfigPath(), CachePath(), StatePath() functions that respect XDG environment variables (XDG_CONFIG_HOME, XDG_CACHE_HOME, XDG_STATE_HOME) - Default paths when XDG vars not set: - Config: ~/.config/circleci-cli/ - Cache: ~/.cache/circleci-cli/ - State: ~/.local/state/circleci-cli/ - Backwards compatibility: if legacy ~/.circleci files exist, use those instead to avoid breaking existing installations - Update Config, UpdateCheck, and TelemetrySettings Load/Write methods to use appropriate XDG paths - Update tests to use StatePath() for telemetry file checks Testing: - All existing unit tests pass - Backwards compatibility verified with existing test suite Fixes: CircleCI-Public#1177 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
| } | ||
|
|
||
| path := filepath.Join(SettingsPath(), telemetryFilename()) | ||
| path := filepath.Join(StatePath(), telemetryFilename()) |
There was a problem hiding this comment.
TelemetrySettings may load and write to different paths
Low Severity
Unlike Config and UpdateCheck which store the file path in a FileUsed field during Load() and reuse it in WriteToDisk(), TelemetrySettings recomputes the path by calling StatePath() independently in both Load() and Write(). Since StatePath() dynamically checks whether the legacy file ~/.circleci/telemetry.yml exists, if that file is created or deleted between Load() and Write() calls, settings could be loaded from one location (e.g., XDG path) but written to another (e.g., legacy path), causing data inconsistency.
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.


Implements XDG Base Directory specification (issue #1177) with backwards compatibility for existing users.
Changes:
Testing:
Fixes: #1177
Checklist
=========
Note
Medium Risk
Changes where user config/telemetry/update-check data is read and written, which can affect upgrades and persistence if path resolution or legacy detection is wrong.
Overview
Implements XDG Base Directory support by splitting persisted CLI files across config, cache, and state locations via new
ConfigPath(),CachePath(), andStatePath()helpers, while retaining backwards compatibility by preferring existing legacy~/.circlecifiles when present.Updates
Config,UpdateCheck, andTelemetrySettingsload/write paths accordingly (including defaultingFileUsedwhen unset), and adjusts telemetry unit tests to assert against the new state path.Written by Cursor Bugbot for commit cb7a47b. This will update automatically on new commits. Configure here.