Skip to content

Conversation

@graybear-io
Copy link

@graybear-io graybear-io commented Feb 9, 2026

Implements XDG Base Directory specification (issue #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: #1177

Checklist

=========

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have checked for similar issues and haven't found anything relevant.
  • This is not a security issue (which should be reported here: https://circleci.com/security/)
  • I have read Contribution Guidelines.

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(), and StatePath() helpers, while retaining backwards compatibility by preferring existing legacy ~/.circleci files when present.

Updates Config, UpdateCheck, and TelemetrySettings load/write paths accordingly (including defaulting FileUsed when 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.

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 <[email protected]>
@graybear-io graybear-io requested a review from a team as a code owner February 9, 2026 04:15
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

}

path := filepath.Join(SettingsPath(), telemetryFilename())
path := filepath.Join(StatePath(), telemetryFilename())
Copy link

Choose a reason for hiding this comment

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

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.

Fix in Cursor Fix in Web

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.

circlecli is generating files in my homedir instead of XDG directories

1 participant