v2.1.0 Service Auth & Hardening
A significant minor release introducing Service Account authentication support via JSON keys, improved type safety across the codebase, and enhancements to the quota tools.
Service Account Auth
Authenticate natively using a Service Account JSON key, enabling headless operations and automated workflows.
geeadd auth --cred keys.json
Robustness & Types
Comprehensive type annotations added across modules. Copyright headers replaced with SPDX identifiers. Enhanced error handling and concurrency logic.
Detailed Changelog
-
Added:
geeadd authsupport for service account JSON keys. - Refactor: Replaced copyright headers with standardized SPDX identifiers.
- Refactor: Improved type annotations and expanded docstrings across multiple modules.
- Fix: Modified Quota estimate tool to work correctly with Service Accounts.
- Fix: Refined concurrency logic and enhanced general error handling/logging.
-
Removed: Unused
concurrent_ee_assets.pyfile. - CI/CD: Updated GitHub Actions workflow for improved test and installation steps.
v2.0.0: The Great Refactor
A complete rewrite of the core logic. We moved from argparse to
click,
introduced rich for beautiful terminal output, and reorganized the command
structure for scalability.
Nested Commands
Commands are now logically grouped (e.g.,
projects quota instead of just quota).
Rich UI
Beautiful tables, panels, and spinners replace standard text output and basic progress bars.
Deprecations
Legacy commands are caught and provide helpful redirection messages to the new syntax.
Core Architecture (v2.0)
The underlying CLI framework has been completely swapped to improve maintainability and help generation.
import argparse
# Flat argument parsing
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser_quota = subparsers.add_parser("quota")
parser_quota.set_defaults(func=quota_from_parser)
parser_copy = subparsers.add_parser("copy")
parser_copy.set_defaults(func=copy_from_parser)
import click
from click import Group
# Nested Group Structure
@click.group(cls=OrderedGroup)
def cli(): pass
@cli.group()
def projects(): pass
@projects.command('quota')
def projects_quota(project): ...
Command Restructuring (v2.0)
| Old Command | New Command Group | Reasoning |
|---|---|---|
| geeadd quota | geeadd projects quota | Grouped under 'projects' management. |
| geeadd projects | geeadd projects enabled | Clarified action (listing enabled projects). |
| geeadd copy | geeadd assets copy | All file operations moved to 'assets' group. |
| geeadd search | geeadd utils search | Moved generic tools to 'utils' group. |
| geeadd cancel | geeadd tasks cancel | Consolidated task operations. |
UI & Rich Output
We removed colorama and basic print() statements in favor of the
rich library.
Code Implementation
Tables are now constructed using rich.table.Table, enabling auto-sizing columns and
consistent coloring across the application. Panels are used for error messages and deprecation
warnings.