📘 Add WARP.md: dev commands, architecture, config, testing, and notes
This commit is contained in:
committed by
Jeremiah Russell
parent
7351d89428
commit
823c47eae9
83
WARP.md
Normal file
83
WARP.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# WARP.md
|
||||
|
||||
This file provides guidance to WARP (warp.dev) when working with code in this repository.
|
||||
|
||||
## Core Development Commands
|
||||
|
||||
### Build and Test
|
||||
- Build: `cargo build`
|
||||
- Test: `cargo test`
|
||||
- Format: `cargo fmt --all`
|
||||
- Lint: `cargo clippy --all-targets --all-features -- -D warnings`
|
||||
- CI test runner: `cargo nextest run --profile ci`
|
||||
|
||||
### CLI Development
|
||||
- Install CLI locally: `cargo install --path .`
|
||||
- Run CLI without installing: `cargo run --bin cull-gmail -- --help`
|
||||
- Test a single test by pattern: `cargo test test_rules_new_creates_default_rules`
|
||||
|
||||
### Special Tests
|
||||
- Run ignored Gmail API integration test: `cargo test --test gmail_message_list_integration -- --ignored`
|
||||
- Requires valid OAuth2 credentials configured
|
||||
- Only use with test Gmail account
|
||||
|
||||
## High-level Architecture
|
||||
|
||||
### Crates
|
||||
- **Library**: `cull_gmail` - Core Gmail management functionality
|
||||
- **Binary**: `cull-gmail` - CLI application
|
||||
|
||||
### Core Components
|
||||
- **GmailClient**: Async Gmail API client with OAuth2 authentication, refresh token persistence, and Gmail API request helpers
|
||||
- **Rules/EolRule**: Rule-based message lifecycle engine that loads from TOML configuration and evaluates messages to yield actions (trash/delete)
|
||||
- **ClientConfig**: Configuration loader that merges TOML files with environment variables using `APP_` prefix
|
||||
- **MessageList**: Abstraction over sets of Gmail message IDs with support for batch list, trash, and delete operations
|
||||
- **CLI**: Command-line interface with subcommands for `labels`, `messages`, `rules`, and `token`; implements dry-run-first behavior for safety
|
||||
|
||||
### CLI Subcommands
|
||||
- `labels` - List and inspect available Gmail labels
|
||||
- `messages` - Query, filter, and perform batch operations on Gmail messages
|
||||
- `rules` - Configure and execute automated message retention rules
|
||||
- `token` - Export/import OAuth2 tokens for ephemeral environments
|
||||
|
||||
### Runtime
|
||||
- **Async/await**: All network operations use Tokio async runtime
|
||||
- **OAuth2**: Uses installed application flow with token caching to `~/.cull-gmail/gmail1/`
|
||||
- **Safety**: Dry-run mode by default; destructive actions require explicit execution flags
|
||||
|
||||
## Configuration
|
||||
|
||||
### Directory Structure
|
||||
- **Config directory**: `~/.cull-gmail/`
|
||||
- **Main config**: `cull-gmail.toml`
|
||||
- **Rules config**: `rules.toml`
|
||||
- **OAuth2 tokens**: `gmail1/` subdirectory
|
||||
|
||||
### Configuration Sources (in precedence order)
|
||||
1. Environment variables with `APP_` prefix
|
||||
2. TOML configuration files
|
||||
3. Built-in defaults
|
||||
|
||||
### OAuth2 Setup Requirements
|
||||
1. Google Cloud Console project with Gmail API enabled
|
||||
2. OAuth2 desktop application credentials
|
||||
3. Download credential JSON to config directory
|
||||
4. First run triggers browser authentication flow
|
||||
|
||||
## Testing
|
||||
|
||||
### Test Organization
|
||||
- **Unit tests**: Alongside modules in `src/`
|
||||
- **Integration tests**: In `tests/` directory
|
||||
- **CI runner**: Uses nextest with `ci` profile from `.config/nextest.toml`
|
||||
|
||||
### Test Categories
|
||||
- Standard tests: `cargo test` or `cargo nextest run --profile ci`
|
||||
- Gmail API integration test (ignored by default): Requires valid credentials and network access
|
||||
|
||||
### Important Notes
|
||||
- **MSRV**: Rust 1.88+ (edition 2024)
|
||||
- **Required runtime**: Tokio for all async operations
|
||||
- **Gmail API**: Requires valid OAuth2 credentials for real testing
|
||||
- **Logging**: Use `RUST_LOG=cull_gmail=debug` for detailed operation logs
|
||||
- **Safety**: All operations default to dry-run mode; use explicit execution flags for actual changes
|
||||
Reference in New Issue
Block a user