GitHub Actions "The runner was unable to update the labels"
During registration or reconfiguration the runner reports its labels to GitHub; if that call is rejected or the token lacks scope, the runner cannot update its labels and the join fails.
What this error means
The runner service log or configuration output reports that it was unable to update the labels, and the runner either does not appear online or appears with the wrong labels.
github-actions
Error: The runner was unable to update the labelsCommon causes
Invalid or expired registration token
The token used by config.sh expired or lacks permission to set labels for that runner group, so the label update is rejected.
Conflicting label assignment
A label is reserved or already owned at the group level, so the runner cannot claim it.
How to fix it
Re-register with a fresh token and valid labels
- Generate a new registration token from Settings > Actions > Runners.
- Re-run config.sh with an explicit, allowed --labels list.
- Confirm the runner group permits the requested custom labels.
runner host
./config.sh --url https://github.com/ORG/REPO \
--token <FRESH_TOKEN> \
--labels self-hosted,linux,gpuHow to prevent it
- Use a freshly minted registration token for each (re)config.
- Keep custom labels documented and non-conflicting per group.
- Monitor runner service logs for label sync errors.
Related guides
GitHub Actions Self-Hosted Runner Registration Failed (config.sh)Fix self-hosted runner registration failures with config.sh - an expired registration token, a wrong URL/scop…
GitHub Actions "No runner matching the specified labels was found"Fix GitHub Actions "No runner matching the specified labels was found: self-hosted" - the runs-on labels do n…
GitHub Actions Job Picked by Wrong Self-Hosted Runner (Label Overlap)Fix GitHub Actions jobs running on an unintended self-hosted runner - overlapping labels let a different runn…