CLI envmaster
Тонкая обёртка над SDK: та же расшифровка на клиенте, те же гарантии.
Установка
npm i -g envmaster # или bun add -g envmaster
envmaster --help
Разово, без установки:
npx envmaster export --project billing-api --env production
Пакет называется envmaster — без скоупа, как и команда. Нужен Node 20+
или Bun.
Команды
Команд ровно пять:
envmaster login --url <url> --client-id <id> --client-secret <secret>
envmaster export --project <slug> --env <slug> [--file out.env]
envmaster run --project <slug> --env <slug> [--mask] -- <cmd...>
envmaster validate --project <slug> --env <slug> [--schema env.schema.yml] [--warn-undeclared]
envmaster import [file] --project <slug> --env <slug> [--dry-run] [--overwrite] [--all-secrets]
Откуда берутся учётные данные
По убыванию приоритета: флаги → переменные окружения →
~/.envmaster/config.json (его пишет envmaster login, права 0600).
В конфиге лежат машинные учётные данные, а не значения записей: секреты на
диск не попадают ни на одном шаге.
| Переменная | Для чего |
|---|---|
ENVMASTER_URL | адрес API |
ENVMASTER_CLIENT_ID | client ID identity |
ENVMASTER_CLIENT_SECRET | client secret identity |
ENVMASTER_PROJECT | slug проекта |
ENVMASTER_ENVIRONMENT | slug окружения |
ENVMASTER_TOKEN | пользовательский access-токен, только для import |
login проверяет учётные данные реальным входом и только потом сохраняет.
run вместо export
export пишет файл, run передаёт значения дочернему процессу — и ничего
не оставляет на диске:
envmaster run --project billing-api --env production --mask -- ./deploy.sh
Дочерний процесс получает все записи окружения и не получает ваши
ENVMASTER_* — они вычищаются из его окружения. С --mask вывод
процесса фильтруется построчно: маскируются значения секретов и сами
учётные данные. Код возврата проксируется.
export печатает dotenv на stdout (в терминале — с предупреждением в
stderr) или в --file с правами 0600. Реальные значения — это единственная
команда, которая оставляет их на диске, и только по явному запросу.
validate: проверка до деплоя
envmaster validate сверяет локальную схему (--schema, по умолчанию
env.schema.yml) с тем, что реально лежит в окружении: чего не хватает,
что не того типа, что истекло. Найденное — код возврата 1, пайплайн падает
до деплоя. Ключи, которых нет в схеме, по умолчанию молчат; --warn-undeclared
печатает их, не влияя на код возврата. Проверка идёт по именам, значения не
раскрываются.
import для переезда
ENVMASTER_TOKEN=<access-токен из кабинета> \
envmaster import .env --project billing-api --env production --dry-run
Ключи с SECRET, PASSWORD, TOKEN, KEY, CREDENTIAL, PRIVATE,
DSN, AUTH, SALT или CERT в имени становятся секретами (masked),
остальные — переменными (plain); --all-secrets переключает всё в
секреты. Существующие ключи пропускаются, пока не передан --overwrite.
--dry-run печатает решение по каждому ключу, ничего не записывая.
Значения не печатаются никогда — только имена и решения.
Команда пишет, поэтому требует пользовательский access-токен, а не машинные учётные данные — те read-only по дизайну.