4.1 KiB
4.1 KiB
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
Ключевые принципы
- Простота — минимум команд, минимум конфигурации
- Один владелец — нет конфликтов между пользователями
- Последний push побеждает — нет merge, нет версий
- S3 как источник правды — если нужна история, используй S3 versioning
- Безопасность через S3 — приватный bucket, IAM, encryption at rest
Scope
В scope
- ✅ Инициализация проекта (
init) - ✅ Загрузка файлов в storage (
push) - ✅ Скачивание файлов из storage (
pull) - ✅ Просмотр списка проектов (
list) - ✅ Настройка credentials (
config) - ✅ Автоматическое сканирование
.env*файлов
Вне scope
- ❌ Версионирование (полагаемся на S3 versioning)
- ❌ Merge конфликтов
- ❌ Многопользовательский доступ
- ❌ REST API сервер
- ❌ Шифрование на клиенте
- ❌ Интерактивное разрешение конфликтов
Зависимости
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
)