Версия пакета: gitea-runner-5.0.0-alt1.x86_64 Условия: Установлен git и установлен gitea-runner. Gitea-сервер и регистрация не нужны: используется локальный gitea-runner exec. Секрет передаётся через -s MY_SECRET=supersecret123 (аналог секрета Gitea в локальном прогоне). Шаги: Создать локальный workflow с двумя job: в первом шаг без name, во втором с name: # rm -rf /tmp/execcase && mkdir -p /tmp/execcase/.gitea/workflows && cd /tmp/execcase # git init -b main && git config user.name tester && git config user.email test@example.com # cat > .gitea/workflows/secret.yaml <<'EOF' name: Secret on: [push] jobs: s: runs-on: host steps: - run: echo "SECRET=${{ secrets.MY_SECRET }}" s2: runs-on: host steps: - name: show secret run: echo "SECRET=${{ secrets.MY_SECRET }}" EOF # git add -A && git commit -m x && git remote add origin https://example.com/x/y.git Запустить job s (шаг без name) в JSON-режиме: # gitea-runner exec -C /tmp/execcase -W .gitea/workflows -j s -i -self-hosted \ -s MY_SECRET=supersecret123 --json 2>&1 | grep -E '"step"|"msg"' Ожидаемый результат: Секрет должен маскироваться во всех полях вывода --json Реальный результат: В поле msg секрет замаскирован, но в поле step открытым текстом: {"...","msg":"::group::Run echo \"SECRET=***\"","raw_output":true,"stage":"Main","step":"echo \"SECRET=supersecret123\"","stepID":["0"],"stepNumber":0,...} {"...","msg":"echo \"SECRET=***\"","raw_output":true,"stage":"Main","step":"echo \"SECRET=supersecret123\"","stepID":["0"],"stepNumber":0,...} {"...","msg":"SECRET=***\n","raw_output":true,"stage":"Main","step":"echo \"SECRET=supersecret123\"","stepID":[" Варианты запуска без утечек секрета: Запустить тот же job в обычном (не-JSON) режиме: # gitea-runner exec -C /tmp/execcase -W .gitea/workflows -j s -i -self-hosted \ -s MY_SECRET=supersecret123 2>&1 | grep -E 'SECRET|supersecret' Запустить job s2 (шаг с name) в JSON-режиме: # gitea-runner exec -C /tmp/execcase -W .gitea/workflows -j s2 -i -self-hosted \ -s MY_SECRET=supersecret123 --json 2>&1 | grep -E '"step"|"msg"'