Skip to content

Commit 20557a1

Browse files
committed
Fix Hugo YAML alias limit by padding category _index.md files
Hugo's YAML alias protection uses a file-size-based limit for non-scalar nodes: files under 2 KB are limited to 100 mapping nodes. Category _index.md files aggregate tools_software_languages entries from all child Learning Paths, easily exceeding 100 entries while staying under 2 KB. Pad generated category _index.md files to at least 2048 bytes using YAML comments, raising Hugo's alias limit from 100 to 5000.
1 parent 3255385 commit 20557a1

5 files changed

Lines changed: 77 additions & 3 deletions

File tree

content/learning-paths/automotive/_index.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,30 @@ tools_software_languages_filter:
3838
- Tinkerblox: 1
3939
- topdown-tool: 1
4040
- Zenoh: 1
41+
# auto-generated padding to avoid Hugo YAML alias limit
42+
# auto-generated padding to avoid Hugo YAML alias limit
43+
# auto-generated padding to avoid Hugo YAML alias limit
44+
# auto-generated padding to avoid Hugo YAML alias limit
45+
# auto-generated padding to avoid Hugo YAML alias limit
46+
# auto-generated padding to avoid Hugo YAML alias limit
47+
# auto-generated padding to avoid Hugo YAML alias limit
48+
# auto-generated padding to avoid Hugo YAML alias limit
49+
# auto-generated padding to avoid Hugo YAML alias limit
50+
# auto-generated padding to avoid Hugo YAML alias limit
51+
# auto-generated padding to avoid Hugo YAML alias limit
52+
# auto-generated padding to avoid Hugo YAML alias limit
53+
# auto-generated padding to avoid Hugo YAML alias limit
54+
# auto-generated padding to avoid Hugo YAML alias limit
55+
# auto-generated padding to avoid Hugo YAML alias limit
56+
# auto-generated padding to avoid Hugo YAML alias limit
57+
# auto-generated padding to avoid Hugo YAML alias limit
58+
# auto-generated padding to avoid Hugo YAML alias limit
59+
# auto-generated padding to avoid Hugo YAML alias limit
60+
# auto-generated padding to avoid Hugo YAML alias limit
61+
# auto-generated padding to avoid Hugo YAML alias limit
62+
# auto-generated padding to avoid Hugo YAML alias limit
63+
# auto-generated padding to avoid Hugo YAML alias limit
64+
# auto-generated padding to avoid Hugo YAML alias limit
65+
# auto-generated padding to avoid Hugo YAML alias limit
66+
# auto-generated padding to avoid Hugo YAML alias limit
4167
---

content/learning-paths/embedded-and-microcontrollers/_index.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,8 @@ tools_software_languages_filter:
112112
- Yocto Project: 1
113113
- Zephyr: 2
114114
weight: 5
115+
# auto-generated padding to avoid Hugo YAML alias limit
116+
# auto-generated padding to avoid Hugo YAML alias limit
117+
# auto-generated padding to avoid Hugo YAML alias limit
118+
# auto-generated padding to avoid Hugo YAML alias limit
115119
---

content/learning-paths/laptops-and-desktops/_index.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,13 @@ tools_software_languages_filter:
101101
- WSL: 1
102102
- Xamarin Forms: 1
103103
weight: 2
104+
# auto-generated padding to avoid Hugo YAML alias limit
105+
# auto-generated padding to avoid Hugo YAML alias limit
106+
# auto-generated padding to avoid Hugo YAML alias limit
107+
# auto-generated padding to avoid Hugo YAML alias limit
108+
# auto-generated padding to avoid Hugo YAML alias limit
109+
# auto-generated padding to avoid Hugo YAML alias limit
110+
# auto-generated padding to avoid Hugo YAML alias limit
111+
# auto-generated padding to avoid Hugo YAML alias limit
112+
# auto-generated padding to avoid Hugo YAML alias limit
104113
---

content/learning-paths/mobile-graphics-and-gaming/_index.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,17 @@ tools_software_languages_filter:
8888
- Vulkan SDK: 1
8989
- XNNPACK: 2
9090
weight: 3
91+
# auto-generated padding to avoid Hugo YAML alias limit
92+
# auto-generated padding to avoid Hugo YAML alias limit
93+
# auto-generated padding to avoid Hugo YAML alias limit
94+
# auto-generated padding to avoid Hugo YAML alias limit
95+
# auto-generated padding to avoid Hugo YAML alias limit
96+
# auto-generated padding to avoid Hugo YAML alias limit
97+
# auto-generated padding to avoid Hugo YAML alias limit
98+
# auto-generated padding to avoid Hugo YAML alias limit
99+
# auto-generated padding to avoid Hugo YAML alias limit
100+
# auto-generated padding to avoid Hugo YAML alias limit
101+
# auto-generated padding to avoid Hugo YAML alias limit
102+
# auto-generated padding to avoid Hugo YAML alias limit
103+
# auto-generated padding to avoid Hugo YAML alias limit
91104
---

tools/filter_checker.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,32 @@ def updateFiltersInIndexMD(main_category):
101101

102102

103103
# re-write the _index.md file, including '---' in the front and back of it
104+
#
105+
# Hugo's YAML alias protection (parser/metadecoders/decoder.go) uses a
106+
# size-based limit for non-scalar node counts:
107+
# < 2 KB → max 100 non-scalar nodes
108+
# 2-10 KB → max 5000
109+
# > 10 KB → max 10000
110+
# Each "- ToolName: count" entry in a filter list creates one non-scalar
111+
# (mapping) node. Categories with many Learning Paths can easily exceed
112+
# 100 entries across all filter lists while the file stays under 2 KB,
113+
# triggering: "too many YAML aliases for non-scalar nodes".
114+
# To avoid this, we pad the YAML content to at least 2048 bytes using
115+
# YAML comments, which raises the limit to 5000.
116+
yaml_content = yaml.dump(metadata_dic, sort_keys=False)
117+
front_matter = '---\n' + yaml_content + '---\n'
118+
119+
min_size = 2048
120+
if len(front_matter.encode('utf-8')) < min_size:
121+
padding_needed = min_size - len(front_matter.encode('utf-8'))
122+
# YAML comments are counted in Hugo's size calculation but ignored by the parser
123+
padding_line = "# auto-generated padding to avoid Hugo YAML alias limit\n"
124+
num_lines = (padding_needed // len(padding_line)) + 1
125+
padding = padding_line * num_lines
126+
front_matter = '---\n' + yaml_content + padding + '---\n'
127+
104128
with open(category_index_md_file, "w") as f:
105-
f.write('---\n')
106-
yaml.dump(metadata_dic, f, sort_keys=False) # dump, keeping order that we specified (sort_keys=False)
107-
f.write('---\n')
129+
f.write(front_matter)
108130

109131
return True
110132

0 commit comments

Comments
 (0)