fix(indexer): enforce vendored system-note action list at build time
What does this MR do and why?
The vendored ICON_TYPES list in icon_types.rs had no real drift guard.
The module comment referenced scripts/check-system-note-actions.sh as the enforcement mechanism, but that script didn't exist.
This MR introduces a two-layer protection, mirroring the Iglu schema pattern:
-
Build time:
config/vendored/system_note_metadata.actionsbecomes the source of truth (one action per line, pinned SHA in the header).
crates/indexer/build.rsgeneratesICON_TYPESfrom it, so the Rust constant can't drift from the vendor file, it's derived from it. -
CI:
scripts/check-system-note-actions.shfetchesapp/models/system_note_metadata.rbfromgitlab-org/gitlabat the pinned SHA and diffs it against the committed vendor file. The newsystem-note-actions-checklint job runs it on every MR.
Related Issues
N/A
Testing
cargo build -p indexergeneratesicon_types_generated.rscargo test -p indexerpasses all 379 tests- Build fails with a clear panic when a duplicate is added to the vendor file.
SKIP_SYSTEM_NOTE_ACTIONS_CHECK=1exits cleanly (sharedci-skip-utils.shpath).- Python regex correctly extracts tokens from multiline
%w[]and%i[]Ruby arrays.
Performance Analysis
No runtime changes. Build script runs once per vendor-file change.
- This merge request does not introduce any performance regression.
Closes #816 (closed)