Appearance
Submodule Sync
The meta-repo tracks submodules by commit SHA. Since Git submodules do not track branches automatically, Software Graph uses an event-driven sync.
How It Works
- A submodule receives a push on
dev. - The submodule's
notify-metarepo.ymlsendsrepository_dispatchtoSoftware-Graph/Software-Graph. - Meta-repo
sync-submodules.ymlruns on that dispatch. - It fast-forwards targeted submodule(s) to
origin/dev. - If pointers changed, it commits and pushes updated refs in meta
dev. - Meta
mainpointers are promoted later via adev -> mainPR.
Why Event-Driven (No Cron)
- Immediate pointer updates after real changes.
- No periodic polling load.
- Single source of truth for pointer movement (
devonly).
Concurrency Behavior
sync-submodules uses branch-level concurrency:
- group:
sync-<branch> cancel-in-progress: true
When many submodules update quickly, older runs are canceled and the latest dev run performs the effective sync.
Safety and Guards
- Only
devis accepted by sync workflow. - Notify workflow skips meta-repo self-dispatch to avoid loops.
- Manual
workflow_dispatchis available for recovery ondev(optional specificsubmodule).
Required Secret
Both notify and sync workflows require MESH_TOKEN with permissions for:
- reading/writing repo contents where commits are pushed
- creating repository dispatch events
- creating/closing issues for propagation tracking
Using an org-level secret keeps onboarding of new repos simpler.
Troubleshooting
401 Bad credentials in notify
MESH_TOKENmissing or invalid in that repo/org context.- Verify the secret is available to the repository.
Pointer not updated in meta
- Confirm notify ran on the submodule push.
- Check
sync-submodulesrun for branch mismatch or token errors. - Use manual dispatch path to recover a specific branch/submodule.