Перейти к содержимому

JSON Output

Окно терминала
# Через флаг
nrz deploy --json
# Через переменную окружения
NRZ_JSON=1 nrz deploy

В JSON-режиме все сообщения CLI выводятся в stdout как структурированные JSON-строки (по одной на строку). Human-readable вывод в stderr подавляется.

В JSON-режиме каждая строка stdout — один JSON-объект:

{"s":"user","p":"install","l":"info","m":"Installing dependencies: npm install"}
{"s":"debug","p":"install","l":"info","m":"npm warn deprecated inflight@1.0.6: This module is not supported"}
{"s":"user","p":"build","l":"info","m":"webpack compiled successfully in 3.2s"}
{"s":"user","p":"deploy","l":"info","m":"✓ Build completed"}
КлючТипЗначенияОписание
sstringuser, debugStreamuser для пользователя, debug для внутреннего вывода
pstringauth, build, db, deploy, detect, domains, env, init, install, link, projects, rollback, workspacePhase — текущая фаза операции
lstringinfo, warn, errorLevel — уровень сообщения
mstringлюбой текстMessage — содержимое
  • user — сообщения для отображения пользователю: прогресс сборки, ошибки компиляции, webpack/vite output
  • debug — внутренний вывод: npm warnings, npm audit, git internals, package manager noise
Окно терминала
# Только user-сообщения
NRZ_JSON=1 nrz deploy 2>/dev/null | while IFS= read -r line; do
stream=$(echo "$line" | jq -r '.s // empty')
if [ "$stream" = "user" ]; then
echo "$line" | jq -r '.m'
fi
done
# Фильтр одной командой
NRZ_JSON=1 nrz deploy 2>/dev/null | jq -r 'select(.s=="user") | .m'
# Только ошибки
NRZ_JSON=1 nrz deploy 2>/dev/null | jq -r 'select(.l=="error") | .m'
import { spawn } from "node:child_process";
import { createInterface } from "node:readline";
const child = spawn("nrz", ["deploy"], {
env: { ...process.env, NRZ_JSON: "1" },
stdio: ["ignore", "pipe", "ignore"],
});
const rl = createInterface({ input: child.stdout });
rl.on("line", (raw) => {
try {
const line = JSON.parse(raw);
if (line.s === "user") {
console.log(`[${line.p}] ${line.m}`);
}
} catch {
// Final JSON output (deployment result) or non-log line
console.log(raw);
}
});
scanner := bufio.NewScanner(stdout)
for scanner.Scan() {
line := scanner.Text()
if len(line) == 0 || line[0] != '{' {
continue
}
var entry struct {
Stream string `json:"s"`
Phase string `json:"p"`
Level string `json:"l"`
Message string `json:"m"`
}
if err := json.Unmarshal([]byte(line), &entry); err != nil {
continue
}
if entry.Stream == "user" {
fmt.Printf("[%s] %s\n", entry.Phase, entry.Message)
}
}
# GitHub Actions
- name: Deploy to ONREZA
env:
NRZ_TOKEN: ${{ secrets.ONREZA_TOKEN }}
NRZ_JSON: "1"
run: |
nrz deploy --prod 2>/dev/null | jq -r 'select(.s=="user") | "[" + .p + "] " + .m'