Diagnosing Weblate Repository Synchronization Failures When Translations Are Not Pulled
Step‑by‑step guide to identify why Weblate does not show new Git commits as translation suggestions and how to restore automatic sync.
05 Oct 2025, 07:46 UTC

Recognizable condition
You have a Weblate component linked to a Git repository. New commits pushed to the repository never appear as translation suggestions or updated strings in the Weblate UI. The activity log shows no “Pull repository” entries, and manual pulls from the component page also return no changes.
Short cause/diagnostic table
| Possible cause | What to look for |
|---|---|
| (a) Incorrect VCS URL or branch in component settings | The URL points to a different repository or the branch does not exist. |
| (b) Missing or invalid SSH key/token credentials | Authentication fails when Weblate tries to clone or fetch. |
| (c) Celery worker not running | Background tasks that perform pulls are idle or stopped. |
| (d) Pull/push schedule disabled or set to manual | Component is configured to wait for a manual trigger only. |
| (e) Server‑side hooks blocking Weblate's access | Pre‑receive or update hooks reject the push/fetch from Weblate’s IP or key. |
Ordered checks
-
Verify component settings → Source code repository URL and branch
- Log in to Weblate as an administrator.
- Navigate to Components → <your component> → Source code repository.
- Confirm that the
Repository URLmatches the exact Git remote (e.g.,[contact removed]:org/project.gitorhttps://github.com/org/project.git) and that theBranchfield contains an existing branch name (commonlymainormaster). - If the URL uses SSH, ensure the hostname matches the key you have configured; if it uses HTTPS, verify that the token or username/password is correct.
-
Test SSH/HTTP credentials via Weblate admin → “Test repository credentials”
- On the same component settings page, click the Test repository credentials button.
- Weblate will attempt a clone/fetch and report success or failure.
- Note any error messages (e.g.,
Permission denied (publickey),Host key verification failed, or401 Unauthorized).
-
Check Celery worker status
- SSH to the server hosting Weblate (you need a user with sudo privileges, typically the
weblatesystem user). - Run:
- Expected output includes lines like
celery@host readyand a count of active processes. If you seeNode: ... downor no output, the worker is not running. - Risk: Restarting the worker will interrupt any ongoing translation tasks; schedule this during low‑usage periods.
celery -A weblate worker status - SSH to the server hosting Weblate (you need a user with sudo privileges, typically the
-
Review component's “Pull” and “Push” schedule in component settings
- In the component’s Repository maintenance tab, locate the
Pull intervalandPush intervalfields. - Ensure they are not set to
Manualor0(disabled). A typical automated interval is15minutes. - If you intend to rely on automatic sync, set a non‑zero value and save.
- In the component’s Repository maintenance tab, locate the
-
Inspect Weblate logs for authentication or network errors
- Log files are usually located at
/var/log/weblate/celery.log(worker) and/var/log/weblate/error.log(Django). - Use
tail -forgrepto look for recent entries around the time you attempted a manual pull: - Typical problematic lines include:
ERROR: Repository error: [Errno 13] Permission deniedWARNING: Failed to fetch from remote: Host key verification failedINFO: Pull repository completed successfully- If you see repeated authentication failures despite correct credentials, the issue may be with the stored key or token.
grep -i "pull\|auth\|ssh" /var/log/weblate/celery.log | tail -20 - Log files are usually located at
Fixes tied to findings
- URL/branch mismatch – Edit the component, correct the
Repository URLand/orBranchfields, then click Save. After saving, trigger a manual pull (Repository → Pull) to verify that new commits appear. - Credentials fail – In the component’s Access control tab, regenerate the SSH key or update the API token. Use the Test repository credentials button again until it reports success. Remember to store the private key only in Weblate’s credential vault; never copy it into logs or comments.
- Celery worker down – Restart the worker:
sudo systemctl restart weblate-celery
Then re‑run celery -A weblate worker status to confirm it shows ready. Monitor celery.log for the next pull task.
Pull interval to a suitable value (e.g., 15) and save. Weblate will schedule the next pull automatically; you can also force an immediate pull to confirm the setting took effect.pre-receive, update, or push hooks. If Weblate’s key or IP is being rejected, either adjust the hook to allow Weblate’s credentials or disable the hook for the Weblate deploy key (only if your security policy permits). After hook changes, test credentials again.Escalation criteria
Escalate to a system administrator if:
- After applying the relevant fix, the component still shows no activity for more than 30 minutes.
- Logs continue to show authentication errors even though credentials have been validated externally (e.g., you can clone the repository manually with the same key/token).
- Multiple components across different projects exhibit the same symptom, suggesting a platform‑wide issue such as a broken Celery broker (Redis/RabbitMQ) or network firewall blocking outbound Git traffic.
Verification
- From the component page, click Repository → Pull (manual trigger).
- Wait up to the pull interval (or a few minutes if manual) and check the activity log for a Pull repository entry with a timestamp matching your trigger.
- Open the Translations view and confirm that newly committed strings appear as suggestions or are already translated according to your workflow.
- If you rely on automatic sync, wait for the next scheduled interval and verify that subsequent commits are reflected without further manual action.
Example scenario
Suppose a component is configured with:
- Repository URL:
[contact removed]:example/docs.git - Branch:
staging - Pull interval:
Manual - SSH key stored in Weblate under the deploy key “weblate‑gitlab”.
After a commit to staging, no suggestions appear. Following the ordered checks:
- The URL and branch are correct.
- Testing credentials fails with
Permission denied (publickey). - Celery worker is running (
celery -A weblate worker statusshows active). - Schedule is manual (identified in step 4).
- Logs show the same permission error.
The fix is to regenerate the deploy key in GitLab, copy the new public key into Weblate’s credential store, and retest. After success, change the Pull interval to 15 minutes and save. A subsequent manual pull shows the new commit as a suggestion, confirming the fix.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.