CLI mev

mev — клиент платформы для рабочей машины разработчика. Он упаковывает каталог flake в tar-архив и отправляет его на хост по SSH (команды push и fork) либо посылает управляющую команду без архива (всё остальное). Авторизацию выполняет mevd на хосте по SSH-ключу — сам клиент никаких полномочий не несёт.

Как определяется хост

Хост платформы ищется по порядку:

  1. Флаг --host HOST в команде.
  2. Переменная окружения MEV_HOST.
  3. Файл /etc/mev/host.

Если хост не найден, команда завершается с ошибкой.

Команды

push — отправить flake

mev <flake-dir|flake.nix> [--host HOST]

Упаковывает каталог flake (без .git, .direnv, result) и отправляет на хост через ssh mev@<host>. На хосте mevd:

Если в репозитории есть HEAD-коммит с SSH-подписью, mev добавляет файл подписи в архив (для проверки requireSignedCommit).

Повторный пуш того же окружения — это обновление без потери данных.

Примеры:

mev ./myenv
mev ./myenv --host dev.maximaster.ru
mev ./myenv/flake.nix

list — список окружений

mev list [--all] [--json] [--host HOST]

Показывает окружения, доступные текущему оператору. --all — все окружения (только для администратора). --json — вывод в формате JSON.

status — состояние окружения

mev status <owner/slug> [--json] [--host HOST]

Показывает состояние конкретного окружения: запущено, спит, бэкенд, домены. --json — машиночитаемый вывод.

logs — журнал контейнера

mev logs <owner/slug> [-n N] [--host HOST]

Выводит журнал systemd-юнита окружения (journalctl). -n N ограничивает число последних строк.

secrets recipient — получить ключ-получатель age

mev secrets recipient <owner/slug> [--host HOST]

Выводит публичный ключ-получатель age для шифрования секретов окружения. Окружение должно уже существовать (быть создано хотя бы одним пушем). Шифртекст, полученный командой age -a -r <recipient>, кладётся в поле secrets flake.

Подробнее о работе с секретами — в описании окружения.

destroy — удалить окружение

mev destroy <owner/slug> [--purge-data] [--host HOST]

Останавливает и удаляет окружение. По умолчанию данные (ZFS-датасет) сохраняются. --purge-data удаляет датасет вместе с данными — необратимо.

Удалять окружение вправе только владелец или администратор.

fork — создать ответвление

mev fork <src-owner/slug> <new-flake-dir> [--host HOST]

Создаёт новое окружение как клон существующего: ZFS-датасет клонируется мгновенно (zfs clone), данные физически не копируются. Новый flake из <new-flake-dir> должен содержать mev с другим name. Удобно, чтобы ответвить функциональность от общей базы.

Прочие команды чтения

Команды audit (журнал событий) и stats (использование ресурсов) обрабатывает mevd на стороне хоста. Они доступны через HTTP API и дашборд статуса, но в текущий набор команд клиента mev не входят.

Коды завершения

mev пробрасывает код завершения от mevd. Коды стабильны и совпадают с прежними соглашениями bash-плоскости:

КодЗначение
64ошибка использования (неверные аргументы)
65ошибка обработки flake: вычисление (eval), превышение лимитов песочницы или сборка пакета сервиса (package) на стороне оператора
66нарушение схемы mev (валидация)
9конфликт домена или окружение не найдено
77отказ в авторизации
78требуется подпись коммита, но её нет
79подпись коммита недействительна
1прочая ошибка (запуск помощника, ввод-вывод, хранилище)

Подробности ошибки выводятся в stderr.