aenvs/.docs/02-opus-cli-docs/01-overview.md

110 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
)
```