Skip to content

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 19 Mar 05:22
· 33 commits to main since this release

v0.9.0 (2026-03-19)

Bug Fixes

  • Address PR review feedback — narrow exception handling and improve consistency (d358e26)

  • Narrow bare except Exception in _resolve_scope() to catch only
    PermissionDenied, NotFound, and GCPathError

  • Move import fnmatch from local scope to top-level imports (PEP 8)

  • Add detailed comment explaining base_segments depth calculation

  • Make PermissionDenied handling consistent in _fetch_chain_link():
    folders and projects now use graceful fallback like organizations

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Reduce cognitive complexity and extract constants for SonarCloud (819f5dd)

  • Extract _fetch_chain_link() from resolve_ancestry_chain() to reduce
    cognitive complexity from 25 to under 15

  • Extract _search_hierarchy() from find command to reduce complexity

  • Extract _get_node_parent_name(), _get_child_folders() in formatters
    to reduce build_tree_view() complexity from 18 to under 15

  • Extract _node_to_dict(), _get_child_folders() in serializers to
    reduce serialize_tree_node() complexity from 18 to under 15

  • Add _PREFIX_ORGS/_PREFIX_FOLDERS/_PREFIX_PROJECTS constants in core.py
    to replace duplicated string literals

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Resolve CI failures, CodeQL alerts, and eager client initialization (d054977)

  • Add missing resolve_ancestry mock to two tests that pass a positional
    resource to ls -l, which triggers _resolve_scope() → resolve_ancestry()
    and fails in CI without GCP credentials

  • Fix 4 CodeQL "Incomplete URL substring sanitization" alerts by replacing
    "example.com" in result.stdout substring checks with exact-match
    alternatives (split()/list comprehension)

  • Lazily initialize GCP API clients in resolve_ancestry() so only the
    client needed for the given resource prefix triggers credential lookup

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Resolve remaining SonarCloud issues — constants and complexity (6257f97)

  • Replace all bare "organizations/", "folders/", "projects/" string
    literals in core.py with _PREFIX_ORGS/_PREFIX_FOLDERS/_PREFIX_PROJECTS

  • Simplify _search_hierarchy() by extracting _get_resource_display_name()
    and _get_resource_path() helpers, using a flat candidate list with
    list comprehension instead of nested loops

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Use explicit equality checks to resolve CodeQL URL sanitization alerts (26f4896)

Replace "example.com" in result.stdout.split() with any(token == "example.com" for token in ...) to avoid CodeQL's incomplete-url-substring-sanitization rule, which still triggers on in with split lists.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Documentation

  • Document find, ancestors, --type filter, -L depth limit, and structured output (ce92751)

Add README sections for features from PR #26 (--json/--yaml structured output) and PR #28 (find command, ancestors command, --type filter on ls/tree, -L depth limit on ls -R). Updates Quick Start and Features summary accordingly.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Features

  • Add --type filter, find command, ancestors command, and -L depth limit (25e1ded)

Add four new features to gcpath CLI:

  • --type/-t filter on ls and tree commands (folder, project, organization)
  • find command for glob-style name search with optional type and scope filters
  • ancestors command to show full ancestry chain from resource to org root
  • --level/-L depth limit on ls -R for recursive listing

Refactors scope resolution into shared _resolve_scope() helper to reduce duplication between ls and find commands.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com


Detailed Changes: v0.8.0...v0.9.0