Skip to content

feat: make a vault manifest's env: optional - #158

Merged
ineedjet merged 1 commit into
mainfrom
optional-vault-env
Aug 25, 2026
Merged

feat: make a vault manifest's env: optional#158
ineedjet merged 1 commit into
mainfrom
optional-vault-env

Conversation

@ineedjet

Copy link
Copy Markdown
Collaborator

Summary

Fixes #157. render-env.py previously rejected any vault manifest whose env: was empty - but some apps genuinely need zero vault-sourced values (config lives in a mounted volume, or first-run setup happens through the app's own UI): beszel/databasus in this repo's own catalog, changedetection/home-assistant in a downstream consumer repo. The workaround was inventing an entry (e.g. a TZ value nobody actually verified the image reads) just to satisfy the schema.

env: can now be omitted or env: {} - renders an empty .env. Verified the full pipeline handles this, not just the Python layer: ran a real sops encrypt/decrypt round trip on an empty dotenv file locally, exits 0 with no error either direction.

The vault manifest is still required (apps.<name>.env_refs must still reference at least one) - this only relaxes what that vault's own env: mapping can contain.

Test plan

  • deploy/tests/ + encrypt-env/tests/ + load-yaml-matrix/tests/ (74 tests, new empty/omitted-env tests added) pass
  • pre-commit (pymarkdown, ruff) passes
  • Verified sops encrypt/decrypt round-trips an empty dotenv file cleanly (exit 0 both directions)

Some apps genuinely need zero vault-sourced values - config lives in a
mounted volume, or first-run setup happens through the app's own UI
(beszel, databasus in this catalog; changedetection, home-assistant in
a downstream consumer repo). render-env.py previously rejected any
manifest whose env: was empty, forcing an invented entry (e.g. a TZ
value nobody verified the image even reads) just to satisfy the schema.

env: can now be omitted or empty (env: {}) - renders an empty .env,
verified end-to-end including a real sops encrypt/decrypt round trip
on an empty dotenv file (exits 0, no error). The vault manifest itself
is still required - an app's env_refs must still reference at least
one - this only relaxes what that vault's own env: mapping can contain.

Fixes #157

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@ineedjet
ineedjet merged commit 04b33ff into main Aug 25, 2026
5 checks passed
@ineedjet
ineedjet deleted the optional-vault-env branch August 25, 2026 20:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

encrypt-env: vault manifest requires non-empty env:, but some apps genuinely need zero vault-sourced vars

1 participant