Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ChangesMadeBySarthakShishodia #1554

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 64 additions & 12 deletions .github/scripts/render-readme.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
from jinja2 import Environment, FileSystemLoader
import json
import os
import logging

# Configuring logging
logging.basicConfig(level=logging.INFO)

DATAFILE = "./data.json"
TEMPLATEPATH = "./.github/"
Expand All @@ -9,34 +14,61 @@
def new_technology_dict(repo_technology):
return {"link_id": repo_technology.lower(), "entries": []}

technologies = {}
# Function to log warnings for missing data
def log_warning(message):
logging.warning(message)

# Check if the data file exists
if not os.path.exists(DATAFILE):
log_warning(f"Data file {DATAFILE} does not exist.")
exit(1)

# Load data from the JSON file
try:
with open(DATAFILE, "r") as datafile:
data = json.loads(datafile.read())
except json.JSONDecodeError:
log_warning("Error: Failed to parse JSON data in the file.")
exit(1)

with open(DATAFILE, "r") as datafile:
data = json.loads(datafile.read())
# Initialize technologies dictionary
technologies = {}

for technology in data["technologies"]:
# Processing technologies
for technology in data.get("technologies", {}):
technologies[technology] = {
"link_id": data["technologies"][technology],
"link_id": data["technologies"].get(technology),
"entries": [],
}

for repository in data["repositories"]:
repo_technologies = repository["technologies"]
# Processing repositories
for repository in data.get("repositories", []):
repo_technologies = repository.get("technologies", [])
if not repo_technologies:
log_warning(f"Repository {repository['name']} has no technologies listed.")
for repo_technology in repo_technologies:
if not technologies.get(repo_technology, False):
if repo_technology not in technologies:
technologies[repo_technology] = new_technology_dict(repo_technology)
log_warning(f"Technology {repo_technology} is newly added.")
technologies[repo_technology]["entries"].append(repository)

# Create Jinja2 environment and load the template
env = Environment(loader=FileSystemLoader(TEMPLATEPATH))
if not os.path.exists(os.path.join(TEMPLATEPATH, TEMPLATEFILE)):
log_warning(f"Template file {TEMPLATEFILE} does not exist in the provided path.")
exit(1)
template = env.get_template(TEMPLATEFILE)

# Create categories from the technologies
categories = []
for key, value in zip(technologies.keys(), technologies.values()):
for key, value in technologies.items():
categories.append(
{"title": key, "link_id": value["link_id"], "entries": value["entries"]}
)

# Sorting categories and entries
categories = sorted(categories, key=lambda x: x["title"].upper())

category_groups = {"Misc": []}
for category in categories:
category["entries"] = sorted(category["entries"], key=lambda x: x["name"].upper())
Expand All @@ -48,8 +80,28 @@ def new_technology_dict(repo_technology):
else:
category_groups["Misc"].append(category)

sponsors = data["sponsors"]
# Process sponsors
sponsors = data.get("sponsors", [])

# Generate Table of Contents (TOC)
toc = []
for category in categories:
toc.append(f"- [{category['title']}]({category['link_id']})")

output = template.render(category_groups=category_groups, categories=categories, sponsors=sponsors)
# Prepare context for rendering the template
context = {
"category_groups": category_groups,
"categories": categories,
"sponsors": sponsors,
"toc": toc # Adding TOC to context
}

open(TARGETFILE, "w").write(output)
# Rendering the README file
try:
output = template.render(context)
with open(TARGETFILE, "w") as targetfile:
targetfile.write(output)
logging.info("README file generated successfully.")
except Exception as e:
log_warning(f"Error while rendering template: {e}")
exit(1)