What's Changed
Polling local Repositories
Some stacks cannot be deployed without a running SCM available (e.g. a self-hosted Gitea/Forgejo instance that should be deployed via doco-cd (hence a chicken-and-egg problem), or a stack that is deployed from a local Git repository that is not hosted on any remote SCM). This release adds support for polling local Git repositories to solve this problem.
Mount the directory containing your local Git repo into the doco-cd container, then use a poll config with the url: value being the absolute path to the Git repo inside the container.
More info in the wiki at Polling Local Filesystem Repositories.
Watcher for local Repositories
In addition to interval-based polling, doco-cd watches the local repository's git directory for changes and triggers a deployment check immediately when new commits land, without waiting for the next interval. This is enabled by default; set watch: false to disable it and rely on interval only. Set interval: 0 (with watch left enabled) to rely on the watcher exclusively, with no periodic fallback polling at all.
See the watch poll option in the wiki.
⚠️ Dotenv parsing changed
.env files (env_files) are now parsed with compose-go's dotenv engine (the same one Docker Compose uses) instead of godotenv. Variables set in one env_files entry are now correctly available for ${VAR} substitution in later entries.
Reference docs:
- Compose variable interpolation: https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/
- Compose
.envsyntax (.env filesection): https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/#env-file - Compose interpolation operators (
Interpolation syntax): https://docs.docker.com/reference/compose-file/interpolation/
Warning
No longer supported / behavior changes:
- Lowercase/mixed-case
${var}references are no longer left as literal text. Previously,godotenvonly expandedUPPERCASEvariable names and silently ignored${lowercase_var}/${MixedCase}, keeping the literal string in the value. These are now interpolated like any other variable — if unset, they resolve to an empty string instead of the original literal text.
If any of your .env files intentionally relied on lowercase ${...} placeholders being left untouched, rename them to avoid the $/${} pattern (e.g. escape with \$) or ensure the referenced variable is actually defined.
Note
New/added support:
- Bash-style default and required-value operators now work inside
.envfiles:${VAR:-default},${VAR-default},${VAR:+alt},${VAR+alt},${VAR:?error},${VAR?error}. - Bare keys (e.g. a line with just
SOME_VAR) now inherit the value from the process environment or an earlierenv_filesentry.
✨ Features
🌟 Improvements
- feat(git): implement local filesystem watcher for repository changes by @kimdre in #1723
- fix(compose): switch to compose-go dotenv parser for improved variable resolution by @kimdre in #1724
📦 Dependencies
- chore(deps): update gcr.io/distroless/base-debian13 docker digest to 20dc7ed by @renovate[bot] in #1719
- chore(deps): update docker/github-builder digest to 58cb9f5 by @renovate[bot] in #1718
- chore(deps): update github/codeql-action digest to db488dd by @renovate[bot] in #1720
- chore(deps): update dependency zensical to v0.0.57 by @renovate[bot] in #1721
Full Changelog: v0.110.1...v0.111.0