cd6f915231702a89dfdf98ba41cd8dc1eac5aff2
`init --systemd` generated the systemd unit, the .htaccess and the maintenance page from a configuration it never actually read reliably: the load swallowed every exception and fell back to a default `ServerConfig`, and it resolved the layers from the process's current directory instead of the git top level every other file of the command goes through. A broken `.werkator.yml` was therefore indistinguishable from an unconfigured `publicBaseUrl` — the host integration was skipped without a word — and running `init` from a subdirectory read a foreign configuration or none, which also defeated `--apply`'s promise that the fragment reaches the generated unit. The fallback stays, but the exception message is printed, once per run, and the repository root is passed down like every other caller of `ConfigLoader.load`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Werkator
Lightweight, declarative and highly opinionated software build system (CI/CD).
Documentation
- docs/configuration.md — configuration reference
- docs/bootstrapping.md — initializing a repository with
init - docs/deployment.md — running Werkator as a systemd service behind a reverse proxy
Developer Setup
Source .envrc to add tools/ to your PATH, or install direnv to have this done automatically on cd:
source .envrc
Common tasks:
./gradlew build # compile and run all checks
./gradlew test # run tests
./gradlew ktlintFormat # auto-format Kotlin sources
./gradlew ktlintCheck # check formatting (also runs as part of build)
adr-status # show all architecture decisions at a glance
direnv
direnv sources .envrc automatically whenever you enter the repository and unloads it when you leave.
# Ubuntu
sudo apt install direnv
# add to ~/.bashrc or ~/.zshrc
eval "$(direnv hook bash)" # or: eval "$(direnv hook zsh)"
Trust the project's .envrc once per clone:
direnv allow
Tools (tools/)
| Command | Description |
|---|---|
adr-status |
List all Architecture Decision Records with their status and decision summary |
Architecture Decision Records
Major technical decisions are documented as ADRs in docs/adrs/.
adr-status # show all decisions at a glance
New ADRs follow the template at docs/adrs/0000-00-00.adr-template.md.
Languages
Kotlin
87%
HTML
4.6%
Shell
4.2%
JavaScript
3%
CSS
1.2%