Skip to content

Commit a821872

Browse files
committed
chore: Move links into Additonal Resources section of generated readmes
Signed-off-by: Giulio Frasca <gfrasca@redhat.com>
1 parent d8c0664 commit a821872

File tree

3 files changed

+91
-3
lines changed

3 files changed

+91
-3
lines changed

scripts/generate_readme/README.md.j2

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,11 @@
3838
{% endfor %}
3939
{% endif %}
4040

41+
{% if links %}
42+
## Additional Resources 📚
43+
44+
{% for link_name, link_url in links.items() %}
45+
- **{{ link_name | replace('_', ' ') | title }}**: [{{ link_url }}]({{ link_url }})
46+
{% endfor %}
47+
{% endif %}
48+

scripts/generate_readme/content_generator.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,8 @@ def _prepare_template_context(self) -> Dict[str, Any]:
202202
Returns:
203203
Dictionary containing all variables needed by the template.
204204
"""
205-
component_name = self.metadata.get('name', 'Component')
205+
# Prefer name from metadata.yaml over function name
206+
component_name = self.feature_metadata.get('name', self.metadata.get('name', 'Component'))
206207

207208
# Prepare title
208209
title = ' '.join(word.capitalize() for word in component_name.split('_'))
@@ -237,8 +238,14 @@ def _prepare_template_context(self) -> Dict[str, Any]:
237238
# Load example pipeline if it exists
238239
example_code = self._load_example_pipeline()
239240

241+
# Extract links for separate Additional Resources section (removes from feature_metadata)
242+
links = self.feature_metadata.pop('links', {})
243+
240244
# Prepare formatted metadata for human-readable display
241-
formatted_metadata = self._format_metadata() if self.feature_metadata else {}
245+
formatted_metadata = {
246+
self._format_key(key): self._format_value(value)
247+
for key, value in self.feature_metadata.items()
248+
}
242249

243250
return {
244251
'title': title,
@@ -248,5 +255,6 @@ def _prepare_template_context(self) -> Dict[str, Any]:
248255
'component_name': component_name,
249256
'example_code': example_code,
250257
'formatted_metadata': formatted_metadata,
258+
'links': links,
251259
}
252260

scripts/generate_readme/tests/test_content_generator.py

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,77 @@ def test_owners_in_generated_readme(self, component_dir, sample_extracted_metada
119119
assert 'Approvers' in readme or 'approvers' in readme.lower()
120120
assert 'Reviewers' in readme or 'reviewers' in readme.lower()
121121

122+
def test_links_in_additional_resources_section(self, component_dir, sample_extracted_metadata):
123+
"""Test that links appear in Additional Resources section, not Metadata."""
124+
# Update metadata.yaml to include links
125+
metadata_file = component_dir / "metadata.yaml"
126+
metadata_file.write_text("""name: sample_component
127+
tier: core
128+
stability: stable
129+
tags:
130+
- testing
131+
links:
132+
documentation: https://example.com/docs
133+
issue_tracker: https://github.com/example/issues
134+
source_code: https://github.com/example/code
135+
""")
136+
137+
generator = ReadmeContentGenerator(
138+
sample_extracted_metadata,
139+
component_dir
140+
)
141+
142+
readme = generator.generate_readme()
143+
144+
# Check that Additional Resources section exists
145+
assert '## Additional Resources' in readme
146+
147+
# Check that links appear in Additional Resources
148+
assert 'https://example.com/docs' in readme
149+
assert 'https://github.com/example/issues' in readme
150+
assert 'https://github.com/example/code' in readme
151+
assert 'Documentation' in readme
152+
assert 'Issue Tracker' in readme
153+
assert 'Source Code' in readme
154+
155+
# Verify links are NOT in the Metadata section
156+
# Extract just the metadata section
157+
lines = readme.split('\n')
158+
metadata_section = []
159+
in_metadata = False
160+
for line in lines:
161+
if '## Metadata' in line:
162+
in_metadata = True
163+
elif in_metadata and line.startswith('##'):
164+
break
165+
if in_metadata:
166+
metadata_section.append(line)
167+
168+
metadata_text = '\n'.join(metadata_section)
169+
# Links should not appear as a bullet point in metadata
170+
assert '- **Links**:' not in metadata_text
171+
172+
def test_no_links_no_additional_resources_section(self, component_dir, sample_extracted_metadata):
173+
"""Test that Additional Resources section is omitted when no links exist."""
174+
# Remove links from metadata.yaml to test no-links case
175+
import yaml
176+
metadata_file = component_dir / 'metadata.yaml'
177+
with open(metadata_file) as f:
178+
metadata = yaml.safe_load(f)
179+
metadata.pop('links', None)
180+
with open(metadata_file, 'w') as f:
181+
yaml.dump(metadata, f)
182+
183+
generator = ReadmeContentGenerator(
184+
sample_extracted_metadata,
185+
component_dir
186+
)
187+
188+
readme = generator.generate_readme()
189+
190+
# Additional Resources section should NOT exist
191+
assert '## Additional Resources' not in readme
192+
122193
def test_prepare_template_context(self, component_dir, sample_extracted_metadata):
123194
"""Test template context preparation."""
124195
generator = ReadmeContentGenerator(
@@ -249,7 +320,8 @@ def test_generate_readme_pipeline(self, pipeline_dir, sample_extracted_metadata)
249320
readme = generator.generate_readme()
250321

251322
# Check sections are present
252-
assert '# Sample Component' in readme
323+
# Title should use name from metadata.yaml, not function name
324+
assert '# Sample Pipeline' in readme
253325
assert '## Overview' in readme
254326
assert '## Inputs' in readme
255327
assert '## Outputs' in readme

0 commit comments

Comments
 (0)