Migrating to v0.50.2
Two breaking changes. The first affects a machine whose agent.yaml carries
name or coordinators; the second affects a pipelines.yaml whose on:
carries a trigger key with no body.
Enrolled agent configuration refuses to start
Before: sparkwing-runner agent accepted an agent.yaml that set name
or coordinators, entered enrolled mode, and polled its coordinators. The
controller refuses that credential on both the claim route and the offer route,
so the agent claimed nothing and logged an error on every slot.
After: the agent refuses that configuration, prints one message naming the state, and exits non-zero:
enrolled execution is not available; remove name and coordinators from
agent.yaml to run in claim mode, or pass --allow-enrolled-preview to start
the unfinished enrolled path
What to do: remove name and coordinators from agent.yaml. What
remains is claim mode, which executes work. Set holder_prefix to the name you
want in the dashboard; labels, max_concurrent, contribution,
local_admission and local_reserve keep their meaning. sparkwing cluster runners add writes that shape for you.
Why: a machine in enrolled mode ran a supervised loop that could never claim work. Failing at startup, once, says so; polling and logging an error every slot did not.
Edge cases: --allow-enrolled-preview starts the unfinished enrolled path
unchanged, for the developers of that path. sparkwing fleet agents enroll
still prints a coordinators membership, so a config merged from its output
needs that flag until enrolled execution ships.
A trigger key with no value is refused
Before: a trigger key under on: with nothing after it, such as
pre_commit: on its own line, parsed, yielded no trigger, and installed no hook. Nothing
reported it, so a repository that meant to run on every commit ran on none and
read as configured.
After: the parse is refused, naming the key and the line it sits on.
What to do: give every trigger a body. A trigger with no options takes an empty mapping:
on:
pre_commit: {}
push:
branches: [main]
on: itself may still be empty; it is a key carrying no value that is refused,
not an absent one.
Why: the empty key had exactly the shape of a configured trigger and none of the behaviour, and it failed silently at the one moment a reader would have believed it.