env-master

CI и деплой

Официальный action

Работает в GitHub, Gitea и GitVerse — у всех трёх совместимый runtime.

- uses: aistastudio/env-action@v1
  with:
    url: https://env.aistastudio.ru
    client-id: ${{ secrets.ENVMASTER_CLIENT_ID }}
    client-secret: ${{ secrets.ENVMASTER_CLIENT_SECRET }}
    project: billing-api
    environment: production
    validate: true      # упасть до деплоя, если в схеме не хватает ключей

Необязательные входы: keys сужает выгрузку до перечисленных ключей (сузить можно, расширить права — нет), file дополнительно кладёт dotenv с правами 0600, export-to-env: false отключает передачу через переменные окружения. Выходы keys и count содержат только имена и количество — значений в них нет никогда.

Каждое значение регистрируется в маскере логов раннера до того, как его можно напечатать, и попадает в $GITHUB_ENV многострочной формой — переносы и знак равенства внутри значения переживают передачу. На stdout секреты не выводятся никогда.

Любой другой CI

envmaster export --project billing-api --env production --file deploy.env
# или, что лучше, без файла вовсе:
envmaster run --project billing-api --env production -- ./deploy.sh

Проверка полноты до деплоя

env.schema.yml описывает, какие ключи обязательны и в каких окружениях:

version: 1
keys:
  - name: DB_PASSWORD
    kind: secret
    required: true
    environments: [staging, production]
  - name: LOG_LEVEL
    kind: var
    required: false

envmaster validate сверяет схему с тем, что реально лежит в сервисе, и останавливает пайплайн, если ключа не хватает — до рантайма, а не после. Проверка идёт по именам, значения не раскрываются.

Что показывать в логах

Ничего. Если очень нужно убедиться, что ключ доехал, печатайте длину или префикс отпечатка, но не значение — маскер спасает от случайности, а не от намеренного вывода.