mirror of
https://github.com/MunGell/awesome-for-beginners.git
synced 2026-01-24 04:19:06 -08:00
Compare commits
9 Commits
015c63597e
...
34f04901c4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34f04901c4 | ||
|
|
9402eb7f92 | ||
|
|
9a564fd37b | ||
|
|
46d0830e0b | ||
|
|
66bd9315aa | ||
|
|
0ac6520bfb | ||
|
|
bbbd6e907e | ||
|
|
e0d5ac11c6 | ||
|
|
663f4c351e |
76
.github/scripts/render-readme.py
vendored
76
.github/scripts/render-readme.py
vendored
@@ -1,5 +1,10 @@
|
|||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# Configuring logging
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
DATAFILE = "./data.json"
|
DATAFILE = "./data.json"
|
||||||
TEMPLATEPATH = "./.github/"
|
TEMPLATEPATH = "./.github/"
|
||||||
@@ -9,34 +14,61 @@ TARGETFILE = "./README.md"
|
|||||||
def new_technology_dict(repo_technology):
|
def new_technology_dict(repo_technology):
|
||||||
return {"link_id": repo_technology.lower(), "entries": []}
|
return {"link_id": repo_technology.lower(), "entries": []}
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
# Initialize technologies dictionary
|
||||||
technologies = {}
|
technologies = {}
|
||||||
|
|
||||||
with open(DATAFILE, "r") as datafile:
|
# Processing technologies
|
||||||
data = json.loads(datafile.read())
|
for technology in data.get("technologies", {}):
|
||||||
|
|
||||||
for technology in data["technologies"]:
|
|
||||||
technologies[technology] = {
|
technologies[technology] = {
|
||||||
"link_id": data["technologies"][technology],
|
"link_id": data["technologies"].get(technology),
|
||||||
"entries": [],
|
"entries": [],
|
||||||
}
|
}
|
||||||
|
|
||||||
for repository in data["repositories"]:
|
# Processing repositories
|
||||||
repo_technologies = repository["technologies"]
|
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:
|
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)
|
technologies[repo_technology] = new_technology_dict(repo_technology)
|
||||||
|
log_warning(f"Technology {repo_technology} is newly added.")
|
||||||
technologies[repo_technology]["entries"].append(repository)
|
technologies[repo_technology]["entries"].append(repository)
|
||||||
|
|
||||||
|
# Create Jinja2 environment and load the template
|
||||||
env = Environment(loader=FileSystemLoader(TEMPLATEPATH))
|
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)
|
template = env.get_template(TEMPLATEFILE)
|
||||||
|
|
||||||
|
# Create categories from the technologies
|
||||||
categories = []
|
categories = []
|
||||||
for key, value in zip(technologies.keys(), technologies.values()):
|
for key, value in technologies.items():
|
||||||
categories.append(
|
categories.append(
|
||||||
{"title": key, "link_id": value["link_id"], "entries": value["entries"]}
|
{"title": key, "link_id": value["link_id"], "entries": value["entries"]}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Sorting categories and entries
|
||||||
categories = sorted(categories, key=lambda x: x["title"].upper())
|
categories = sorted(categories, key=lambda x: x["title"].upper())
|
||||||
|
|
||||||
category_groups = {"Misc": []}
|
category_groups = {"Misc": []}
|
||||||
for category in categories:
|
for category in categories:
|
||||||
category["entries"] = sorted(category["entries"], key=lambda x: x["name"].upper())
|
category["entries"] = sorted(category["entries"], key=lambda x: x["name"].upper())
|
||||||
@@ -48,8 +80,28 @@ for category in categories:
|
|||||||
else:
|
else:
|
||||||
category_groups["Misc"].append(category)
|
category_groups["Misc"].append(category)
|
||||||
|
|
||||||
sponsors = data["sponsors"]
|
# Process sponsors
|
||||||
|
sponsors = data.get("sponsors", [])
|
||||||
|
|
||||||
output = template.render(category_groups=category_groups, categories=categories, sponsors=sponsors)
|
# Generate Table of Contents (TOC)
|
||||||
|
toc = []
|
||||||
|
for category in categories:
|
||||||
|
toc.append(f"- [{category['title']}]({category['link_id']})")
|
||||||
|
|
||||||
open(TARGETFILE, "w").write(output)
|
# Prepare context for rendering the template
|
||||||
|
context = {
|
||||||
|
"category_groups": category_groups,
|
||||||
|
"categories": categories,
|
||||||
|
"sponsors": sponsors,
|
||||||
|
"toc": toc # Adding TOC to context
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ If you would like to be guided through how to contribute to a repository on GitH
|
|||||||
|--|--|
|
|--|--|
|
||||||
|Misc|[.NET](#net)|
|
|Misc|[.NET](#net)|
|
||||||
|A|[Angular](#angular), [Ansible](#ansible)|
|
|A|[Angular](#angular), [Ansible](#ansible)|
|
||||||
|C|[C](#c), [C#](#c-1), [C++](#c-2), [Clojure](#clojure)|
|
|C|[C](#c), [C#](#c-1), [C++](#c-2), [Clojure](#clojure), [CSS](#css)|
|
||||||
|D|[Dart](#dart)|
|
|D|[Dart](#dart)|
|
||||||
|E|[Elixir](#elixir), [Elm](#elm)|
|
|E|[Elixir](#elixir), [Elm](#elm)|
|
||||||
|G|[Go](#go)|
|
|G|[Go](#go)|
|
||||||
@@ -38,7 +38,6 @@ If you would like to be guided through how to contribute to a repository on GitH
|
|||||||
- [Legerity for Uno Platform](https://github.com/MADE-Apps/legerity-uno) _(label: good first issue)_ <br> An extension framework to Legerity for speeding up the development of automated UI tests for Uno Platform applications with Appium/Selenium on .NET.
|
- [Legerity for Uno Platform](https://github.com/MADE-Apps/legerity-uno) _(label: good first issue)_ <br> An extension framework to Legerity for speeding up the development of automated UI tests for Uno Platform applications with Appium/Selenium on .NET.
|
||||||
- [MvvmCross](https://github.com/MvvmCross/MvvmCross) _(label: first-timers-only)_ <br> The .NET MVVM framework for cross-platform solutions, including Xamarin.iOS, Xamarin.Android, Windows and Mac.
|
- [MvvmCross](https://github.com/MvvmCross/MvvmCross) _(label: first-timers-only)_ <br> The .NET MVVM framework for cross-platform solutions, including Xamarin.iOS, Xamarin.Android, Windows and Mac.
|
||||||
- [RawCMS](https://github.com/arduosoft/RawCMS) _(label: good first issue)_ <br> RawCMS is a headless CMS written in ASP.NET Core, built for developers that embrace API-first technology.
|
- [RawCMS](https://github.com/arduosoft/RawCMS) _(label: good first issue)_ <br> RawCMS is a headless CMS written in ASP.NET Core, built for developers that embrace API-first technology.
|
||||||
- [Shouldly](https://github.com/shouldly/shouldly) _(label: Jump-In)_ <br> Should testing for .NET - the way Asserting Should be!
|
|
||||||
|
|
||||||
## Angular
|
## Angular
|
||||||
|
|
||||||
@@ -76,6 +75,10 @@ If you would like to be guided through how to contribute to a repository on GitH
|
|||||||
|
|
||||||
- [Metabase](https://github.com/metabase/metabase) _(label: good first issue)_ <br> Open source business intelligence and analytics platform
|
- [Metabase](https://github.com/metabase/metabase) _(label: good first issue)_ <br> Open source business intelligence and analytics platform
|
||||||
|
|
||||||
|
## CSS
|
||||||
|
|
||||||
|
- [ImprovedTube](https://github.com/code-charity/youtube) _(label: good first issue)_ <br> A powerful but lightweight extension, to enrich your video experience & enable your content selection.
|
||||||
|
|
||||||
## Dart
|
## Dart
|
||||||
|
|
||||||
- [dart.dev](https://github.com/dart-lang/site-www) _(label: beginner)_ <br> A website covering Dart language and common libraries, for developers of Dart libraries, web apps, server-side code, and mobile (Flutter) apps.
|
- [dart.dev](https://github.com/dart-lang/site-www) _(label: beginner)_ <br> A website covering Dart language and common libraries, for developers of Dart libraries, web apps, server-side code, and mobile (Flutter) apps.
|
||||||
@@ -163,6 +166,7 @@ If you would like to be guided through how to contribute to a repository on GitH
|
|||||||
- [Hoppscotch](https://github.com/hoppscotch/hoppscotch) _(label: good first issue)_ <br> A free, fast and beautiful API request builder.
|
- [Hoppscotch](https://github.com/hoppscotch/hoppscotch) _(label: good first issue)_ <br> A free, fast and beautiful API request builder.
|
||||||
- [HueHive](https://github.com/croma-app/croma) _(label: good first issue)_ <br> A open source react native app iOS and android for color palette management
|
- [HueHive](https://github.com/croma-app/croma) _(label: good first issue)_ <br> A open source react native app iOS and android for color palette management
|
||||||
- [iD](https://github.com/openstreetmap/iD) _(label: good first issue)_ <br> The easy-to-use OpenStreetMap editor in JavaScript.
|
- [iD](https://github.com/openstreetmap/iD) _(label: good first issue)_ <br> The easy-to-use OpenStreetMap editor in JavaScript.
|
||||||
|
- [ImprovedTube](https://github.com/code-charity/youtube) _(label: good first issue)_ <br> A powerful but lightweight extension, to enrich your video experience & enable your content selection.
|
||||||
- [Jasmine](https://github.com/jasmine/jasmine) _(label: good first issue)_ <br> Simple JavaScript testing framework for browsers and node.js.
|
- [Jasmine](https://github.com/jasmine/jasmine) _(label: good first issue)_ <br> Simple JavaScript testing framework for browsers and node.js.
|
||||||
- [Jest](https://github.com/facebook/jest) _(label: good first issue)_ <br> A complete and easy to set up JavaScript testing solution.
|
- [Jest](https://github.com/facebook/jest) _(label: good first issue)_ <br> A complete and easy to set up JavaScript testing solution.
|
||||||
- [json-editor](https://github.com/json-editor/json-editor) _(label: good first issue)_ <br> JSON Schema Based Editor. JSON Editor takes a JSON Schema and uses it to generate an HTML form. It has full support for JSON Schema version 3 and 4 and can integrate with several popular CSS frameworks (bootstrap, spectre, tailwind).
|
- [json-editor](https://github.com/json-editor/json-editor) _(label: good first issue)_ <br> JSON Schema Based Editor. JSON Editor takes a JSON Schema and uses it to generate an HTML form. It has full support for JSON Schema version 3 and 4 and can integrate with several popular CSS frameworks (bootstrap, spectre, tailwind).
|
||||||
|
|||||||
19
data.json
19
data.json
@@ -30,15 +30,6 @@
|
|||||||
],
|
],
|
||||||
"description": "RawCMS is a headless CMS written in ASP.NET Core, built for developers that embrace API-first technology."
|
"description": "RawCMS is a headless CMS written in ASP.NET Core, built for developers that embrace API-first technology."
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Shouldly",
|
|
||||||
"link": "https://github.com/shouldly/shouldly",
|
|
||||||
"label": "Jump-In",
|
|
||||||
"technologies": [
|
|
||||||
".NET"
|
|
||||||
],
|
|
||||||
"description": "Should testing for .NET - the way Asserting Should be!"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "grok.net",
|
"name": "grok.net",
|
||||||
"link": "https://github.com/Marusyk/grok.net",
|
"link": "https://github.com/Marusyk/grok.net",
|
||||||
@@ -624,6 +615,16 @@
|
|||||||
],
|
],
|
||||||
"description": "A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates."
|
"description": "A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "ImprovedTube",
|
||||||
|
"link": "https://github.com/code-charity/youtube",
|
||||||
|
"label": "good first issue",
|
||||||
|
"technologies": [
|
||||||
|
"JavaScript",
|
||||||
|
"CSS"
|
||||||
|
],
|
||||||
|
"description": "A powerful but lightweight extension, to enrich your video experience & enable your content selection."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "serverless",
|
"name": "serverless",
|
||||||
"link": "https://github.com/serverless/serverless",
|
"link": "https://github.com/serverless/serverless",
|
||||||
|
|||||||
Reference in New Issue
Block a user