Skip to content

fix(config): stop parsing the syncerd binary as configuration, and remove the dead workflow - #50

Merged
clouddrove-ci merged 2 commits into
masterfrom
fix/config-discovery
Aug 19, 2026
Merged

fix(config): stop parsing the syncerd binary as configuration, and remove the dead workflow#50
clouddrove-ci merged 2 commits into
masterfrom
fix/config-discovery

Conversation

@clouddrove-ci

@clouddrove-ci clouddrove-ci commented Aug 19, 2026

Copy link
Copy Markdown
Member

Found by watching the SyncerD workflow fail on master after #49 — then discovering it had failed on every run since at least June, months before anything I touched. Chasing it turned up a real product bug.

The bug

make build writes ./syncerd. viper matches an extensionless file when a config type is set. So running ./syncerd sync in the directory you just built in makes the tool parse its own binary as YAML:

failed to load config: error reading config file: While parsing config: yaml: control characters are not allowed

That error names neither the file nor the cause. Reproduced in a clean directory containing nothing but the binary. Anyone following the README's build instructions and running from the repository root hits this.

The fix

Discovery resolves the file itself and accepts only a real syncerd.yaml or syncerd.yml, in . or ./config. When there is none:

failed to load config: no config file found; looked for syncerd.yaml, syncerd.yml,
config/syncerd.yaml, config/syncerd.yml. Pass --config to name one explicitly

Two regression tests: a directory containing only a binary named syncerd is rejected, and a real syncerd.yaml wins when both are present.

The workflow

Also removes .github/workflows/syncerd.yml. It ran syncerd sync --once against a syncerd.yaml this repository has never contained, and its push trigger filtered on that same non-existent path. The config fix above makes its failure legible rather than baffling, which improves the message and not the workflow.

Deleted rather than repaired, at the maintainer's direction: making it work would mean deciding what this organisation wants mirrored and committing that as configuration, which is a product decision rather than a repair. A workflow that has only ever failed also teaches everyone to ignore a red mark on master, which is the more expensive problem.

Nothing references it — README, docs, and the other workflows are all clear.

viper matches an extensionless file when a config type is set, and the
extensionless file sitting in a working directory is very often the syncerd
binary: make build writes ./syncerd, so running ./syncerd sync beside it
made the tool read its own binary as YAML.

The error that produced, "yaml: control characters are not allowed", names
neither the file nor the cause. This repository's own scheduled workflow
has failed that way on every run since at least June.

Discovery now resolves the file itself and accepts only syncerd.yaml or
syncerd.yml, in the working directory or ./config. When there is none it
says so and lists everywhere it looked, which is the answer the operator
actually needs.
It ran syncerd sync --once against a syncerd.yaml this repository has never
contained, so it failed on every run since at least June, and its push
trigger filtered on that same non existent path. The config discovery fix
alongside this turns its failure from a baffling parse error into a clear
one, which is an improvement to the message and not to the workflow.

Removed rather than repaired. Making it work would mean deciding what this
organisation wants mirrored and committing that as configuration, which is
a product decision rather than a repair, and a workflow that has only ever
failed teaches everyone to ignore a red mark on master.
@clouddrove-ci clouddrove-ci changed the title fix(config): stop parsing the syncerd binary as configuration fix(config): stop parsing the syncerd binary as configuration, and remove the dead workflow Aug 19, 2026
@clouddrove-ci
clouddrove-ci merged commit ccaaaff into master Aug 19, 2026
3 checks passed
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.

2 participants