env-master

CI and deploy

Official action

Works in GitHub, Gitea, and GitVerse — all three have a compatible 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      # fail before deploy if keys are missing from the schema

Optional inputs: keys narrows the fetch to the listed keys (narrowing is allowed, widening permissions is not), file additionally writes a dotenv file with mode 0600, export-to-env: false disables passing values through environment variables. The keys and count outputs contain only names and the count — never values.

Every value is registered with the runner's log masker before it can be printed, and is passed to $GITHUB_ENV in multiline form — newlines and the equals sign inside a value survive the transfer. Secrets are never printed to stdout.

Any other CI

envmaster export --project billing-api --env production --file deploy.env
# or, better, with no file at all:
envmaster run --project billing-api --env production -- ./deploy.sh

Completeness check before deploy

env.schema.yml describes which keys are required and in which environments:

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

envmaster validate compares the schema with what actually exists in the service and stops the pipeline if a key is missing — before runtime, not after. The check runs on names; values are not disclosed.

What to show in logs

Nothing. If you really need to confirm a key arrived, print its length or a fingerprint prefix, not the value — the masker saves you from accidents, not from deliberate output.