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

4.1 KiB
Raw Permalink Blame History

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 сервер
  • Шифрование на клиенте
  • Интерактивное разрешение конфликтов

Зависимости

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
)