93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python3
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
 | 
						|
# in the Makefile we use a unmodified python container to run this script, so we need to install pyyaml if it's not already installed
 | 
						|
if (len(sys.argv) > 1) and (sys.argv[1] == "--install"):
 | 
						|
    subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'pyyaml', '--root-user-action=ignore'])
 | 
						|
    sys.argv = sys.argv[1:]
 | 
						|
 | 
						|
import yaml
 | 
						|
 | 
						|
# Do not safe the file but verify that it is different from the original one.
 | 
						|
run_in_check_mode = (len(sys.argv) > 1) and (sys.argv[1] == "--check")
 | 
						|
 | 
						|
# Define the YAML input file and the markdown file to be updated
 | 
						|
yaml_input = "areas.yaml"
 | 
						|
markdown_file = "AREAS.md"
 | 
						|
 | 
						|
# Define the markers
 | 
						|
start_marker = "<!-- areas -->"
 | 
						|
end_marker = "<!-- endareas -->"
 | 
						|
 | 
						|
# Read the YAML file
 | 
						|
with open(yaml_input, 'r') as file:
 | 
						|
    data = yaml.safe_load(file)
 | 
						|
 | 
						|
# Extract the top and bottom parts of the existing markdown file
 | 
						|
with open(markdown_file, 'r') as file:
 | 
						|
    content = file.read()
 | 
						|
    top_part, bottom_part = content.split(start_marker, 1)[0], content.split(end_marker, 1)[1]
 | 
						|
 | 
						|
# Generate the markdown content for each AREA group
 | 
						|
markdown_content = start_marker + '\n'
 | 
						|
markdown_content += "| Name | Owners | Project | Board | Labels | Status | Notes |\n"
 | 
						|
markdown_content += "|------|--------|---------|-------|-------|--------|-------|\n"
 | 
						|
 | 
						|
for area in data['areas']:
 | 
						|
    name = area['name']
 | 
						|
    project = area['project']
 | 
						|
    board = area['board']
 | 
						|
 | 
						|
    owners = ",<br/>".join(
 | 
						|
        [
 | 
						|
            f"[{owner['name']}](https://github.com/orgs/open-telemetry/teams/{owner['github']})"
 | 
						|
            for owner in area.get('owner', [])
 | 
						|
            if owner.get('name') and owner.get('github')
 | 
						|
        ]
 | 
						|
    )
 | 
						|
 | 
						|
    labels = ", ".join(
 | 
						|
        [f"`{label}`"
 | 
						|
         for label in area.get('labels', [])
 | 
						|
         if label]
 | 
						|
    )
 | 
						|
 | 
						|
    status = ", ".join(
 | 
						|
        [f"`{s}`"
 | 
						|
         for s in area.get('status', [])
 | 
						|
         if s]
 | 
						|
    )
 | 
						|
 | 
						|
    # Add a default note for common states
 | 
						|
    if area.get('notes'):
 | 
						|
        notes = " ".join(area['notes'].split())
 | 
						|
    elif not area.get('notes') and 'inactive' in status:
 | 
						|
        notes = "The SIG is inactive. Bugs and bugfixes are welcome. For substantial changes, follow the [new project process](https://github.com/open-telemetry/community/blob/main/project-management.md)"
 | 
						|
    elif not area.get('notes') and 'accepting_contributions' in status:
 | 
						|
        notes = "The SIG is looking for contributions!"
 | 
						|
 | 
						|
    markdown_content += f"| {name} | {owners} | {project} | {board} | {labels} | {status} | {notes} |\n"
 | 
						|
 | 
						|
markdown_content += end_marker
 | 
						|
 | 
						|
result = top_part + markdown_content + bottom_part
 | 
						|
 | 
						|
if run_in_check_mode:
 | 
						|
    with open(markdown_file, 'r') as file:
 | 
						|
        original = file.read()
 | 
						|
    if original == result:
 | 
						|
        sys.exit(0)
 | 
						|
    else:
 | 
						|
        print("AREAS.md is outdated. Run make areas-table-generation to update")
 | 
						|
        sys.exit(1)
 | 
						|
else:
 | 
						|
    # Write the updated markdown content to file
 | 
						|
    with open(markdown_file, 'w') as file:
 | 
						|
        file.write(top_part)
 | 
						|
        file.write(markdown_content)
 | 
						|
        file.write(bottom_part)
 | 
						|
 | 
						|
# Inform the user that the markdown file has been updated
 | 
						|
print("The markdown file has been updated with the new area tables.")
 |