rustdrivesync 1.0.0

Production-ready CLI tool for one-way file synchronization with Google Drive. Features: dependency injection, rate limiting, retry with backoff, parallel uploads, and comprehensive documentation.
Documentation

RustDriveSync

Rust License Status Version Tests Coverage

Sincronização unidirecional de arquivos com Google Drive

RustDriveSync é uma ferramenta CLI desenvolvida em Rust para sincronização eficiente e confiável de arquivos locais com o Google Drive. Projetada para ser leve, rápida e segura.

🎯 Características

Core Features (V1.0)

  • Dependency Injection - Abstrações via traits para múltiplos backends
  • Rate Limiting - Proteção automática contra limites da API (800 req/100s)
  • Retry com Backoff - Recuperação automática de falhas (exponential backoff)
  • Uploads Paralelos - Até 10x mais rápido (configurável)
  • Thread-Safe - Arquitetura async/await com Tokio
  • Sincronização unidirecional (local → Google Drive)
  • Modo único ou monitoramento contínuo (watch mode)
  • Upload com streaming - memória constante para arquivos grandes
  • Autenticação OAuth2 segura
  • Configuração via arquivo TOML
  • Logs detalhados com níveis configuráveis
  • Detecção de mudanças por hash MD5 incremental
  • Detecção automática de MIME types - suporte a 800+ formatos

Qualidade e Arquitetura

  • 113 testes (36.46% cobertura total, >70% em módulos críticos)
  • Documentação completa - ADRs, C4 diagrams, security docs
  • SOLID principles - Clean architecture
  • Zero breaking changes - Código legado continua funcionando

📋 Pré-requisitos

  • Rust 1.70 ou superior
  • Credenciais OAuth2 do Google Cloud Console

🚀 Instalação

Via Cargo

cargo install rustdrivesync

Build manual

git clone https://github.com/usuario/rustdrivesync
cd rustdrivesync
cargo build --release

O binário estará em target/release/rustdrivesync

🔧 Configuração Inicial

1. Obter Credenciais do Google

  1. Acesse o Google Cloud Console
  2. Crie um novo projeto (ou use um existente)
  3. Habilite a Google Drive API
  4. Crie credenciais OAuth 2.0 (Desktop App)
  5. Baixe o arquivo credentials.json

2. Criar Configuração

rustdrivesync config --init

Isso criará um arquivo config.example.toml. Copie-o para config.toml e edite:

cp config.example.toml config.toml
vim config.toml

Configure pelo menos:

  • source.path: pasta local a sincronizar
  • google_drive.credentials_file: caminho para credentials.json
  • google_drive.target_folder_id ou target_folder_name

3. Autenticar

rustdrivesync auth

Isso abrirá seu navegador para autorizar o aplicativo.

📖 Uso

Sincronização Única

rustdrivesync sync --once

Monitoramento Contínuo

rustdrivesync sync --watch

Simular (Dry Run)

rustdrivesync sync --dry-run

Verificar Status

rustdrivesync status

Listar Arquivos

# Arquivos pendentes
rustdrivesync list

# Arquivos no Google Drive
rustdrivesync list --remote

# Diferenças local vs remoto
rustdrivesync list --diff

📚 Documentação

Para Usuários

  • Guia de Uso Completo - Tutorial passo a passo em Português
    • Instalação e configuração inicial
    • Comandos básicos e avançados
    • Exemplos práticos de uso
    • Solução de problemas comuns
    • Dicas de segurança

Para Desenvolvedores

API Documentation

# Gerar documentação Rust
cargo doc --open

⚙️ Configuração

Exemplo de config.toml:

[general]
log_level = "info"

[source]
path = "/home/usuario/documentos"
recursive = true
ignore_hidden = true
ignore_patterns = ["*.tmp", "node_modules/", ".git/"]

[google_drive]
credentials_file = "./credentials.json"
token_file = "./token.json"
target_folder_id = "1ABC123xyz"

[sync]
mode = "watch"
interval_seconds = 300
conflict_resolution = "overwrite"
max_file_size_mb = 100
chunk_size_mb = 5

Veja config.example.toml para todas as opções disponíveis.

🏗️ Arquitetura

┌─────────────────────────────────────────────────┐
│                  RustDriveSync                  │
├─────────────────────────────────────────────────┤
│                                                 │
│  CLI (clap) → Config → Core Engine              │
│                         │                       │
│                         ├─ File Scanner         │
│                         ├─ Sync Engine          │
│                         └─ State Manager        │
│                         │                       │
│                         ▼                       │
│               Google Drive Client               │
│               (OAuth2 + Upload)                 │
│                                                 │
└─────────────────────────────────────────────────┘

🧪 Desenvolvimento

Build

cargo build

Testes

cargo test

Linting

cargo clippy

Formatação

cargo fmt

📝 Roadmap

✅ V1.0 - Production Ready (CONCLUÍDO)

Fundação:

  • Estrutura base e CLI ✅
  • Sistema de configuração ✅
  • Integração com Google Drive ✅
  • Sync engine completo ✅
  • File watcher (modo watch) ✅
  • Streaming de uploads ✅

Qualidade e Performance:

  • Dependency Injection com traits ✅
  • Rate limiting automático (800 req/100s) ✅
  • Retry com exponential backoff ✅
  • Uploads paralelos (5-10x speedup) ✅
  • 113 testes (>70% cobertura em módulos críticos) ✅
  • Documentação completa (ADRs, C4, Security) ✅

🚀 Próximos Passos

V1.1 (Q1 2026) - Melhorias de Segurança e Observabilidade:

  • OS Keychain integration (macOS Keychain, Windows Credential Manager, Linux Secret Service)
  • Jitter em retry para prevenir thundering herd
  • Structured logging (JSON format)
  • Prometheus metrics endpoint
  • E2E tests com Docker

V1.2 (Q2 2026) - Múltiplos Backends:

  • Backend S3 (AWS S3, MinIO, Wasabi)
  • Backend Dropbox
  • SQLite state (substituir JSON)
  • Progress bar melhorado (multi-file)
  • Cobertura de testes >50%

V2.0 (Q3-Q4 2026) - Sincronização Avançada:

  • Sincronização bidirecional (Drive → Local)
  • Resolução automática de conflitos
  • End-to-end encryption opcional
  • Web dashboard (status, métricas, logs)
  • Multi-user support

V3.0 (2027) - Enterprise Features:

  • Webhooks para notificações
  • API REST para integração
  • Suporte a múltiplos clouds simultâneos
  • Versionamento de arquivos
  • Rollback de mudanças

📋 Veja ROADMAP.md para detalhes completos sobre features planejadas, sprints, e debt técnica. 📄 Veja CHANGELOG.md para histórico detalhado de mudanças.

🤝 Contribuindo

Contribuições são bem-vindas! Por favor:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

🔗 Links Úteis

🙏 Agradecimentos

  • Comunidade Rust
  • Mantenedores das crates utilizadas (clap, tokio, yup-oauth2, etc.)
  • Contribuidores do projeto

Desenvolvido com ❤️ em Rust