# AEVS CLI — Simplified Specification ## Overview CLI-инструмент для синхронизации `.env` файлов между машинами одного пользователя. - **Язык:** Go (golang) - **Storage:** S3-совместимое хранилище (AWS S3, MinIO, Cloudflare R2, DigitalOcean Spaces) - **Целевой сценарий:** Один пользователь, несколько машин --- ## Проблема Разработчик работает над проектами на нескольких машинах (ноутбук, рабочий ПК, сервер). Код синхронизируется через Git, но `.env` файлы: - Не должны попадать в Git (секреты) - Нужно как-то переносить между машинами - Ручное копирование — неудобно и ненадёжно --- ## Решение Простой CLI с двумя основными командами: - `aevs push` — загрузить локальные `.env` файлы в облачное хранилище - `aevs pull` — скачать `.env` файлы из хранилища Проекты идентифицируются по имени. Никаких версий, merge, конфликтов между пользователями. --- ## Архитектура ``` ┌──────────────┐ ┌──────────────┐ │ Machine A │ │ Machine B │ │ (laptop) │ │ (office) │ │ │ ┌─────────┐ │ │ │ project/ │ │ Storage │ │ project/ │ │ .env.prod │ ───► │ (S3) │ ◄── │ (empty) │ │ .env.dev │ │ │ │ │ │ aevs.yaml │ └─────────┘ │ │ └──────────────┘ └──────────────┘ │ │ ▼ ▼ aevs push aevs pull ``` --- ## Структура данных в Storage ``` s3://my-aevs-bucket/ ├── my-awesome-project/ │ ├── envs.tar.gz # архив с .env файлами │ └── metadata.json # метаданные (время, список файлов) ├── another-project/ │ ├── envs.tar.gz │ └── metadata.json └── old-project/ ├── envs.tar.gz └── metadata.json ``` --- ## Ключевые принципы 1. **Простота** — минимум команд, минимум конфигурации 2. **Один владелец** — нет конфликтов между пользователями 3. **Последний push побеждает** — нет merge, нет версий 4. **S3 как источник правды** — если нужна история, используй S3 versioning 5. **Безопасность через S3** — приватный bucket, IAM, encryption at rest --- ## Scope ### В scope - ✅ Инициализация проекта (`init`) - ✅ Загрузка файлов в storage (`push`) - ✅ Скачивание файлов из storage (`pull`) - ✅ Просмотр списка проектов (`list`) - ✅ Настройка credentials (`config`) - ✅ Автоматическое сканирование `.env*` файлов ### Вне scope - ❌ Версионирование (полагаемся на S3 versioning) - ❌ Merge конфликтов - ❌ Многопользовательский доступ - ❌ REST API сервер - ❌ Шифрование на клиенте - ❌ Интерактивное разрешение конфликтов --- ## Зависимости ```go require ( github.com/aws/aws-sdk-go-v2/config github.com/aws/aws-sdk-go-v2/service/s3 github.com/spf13/cobra gopkg.in/yaml.v3 ) ```