- Fixed trailing slash in 'Images' navbar link to ensure consistent routing - Added Odoo 19.0 to supported versions in module documentation generator
132 lines
4.1 KiB
Python
Executable File
132 lines
4.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import configparser
|
|
import subprocess
|
|
from itertools import groupby
|
|
from operator import itemgetter
|
|
|
|
|
|
def read_gitmodules(file_path):
|
|
config = configparser.ConfigParser(allow_no_value=True, delimiters=("=", ":"))
|
|
config.read(file_path)
|
|
modules = []
|
|
for section in config.sections():
|
|
path = config[section].get("path", "Not found")
|
|
url = config[section].get("url", "Not found")
|
|
submodule_info = {"path": path, "url": url}
|
|
if path not in ["odoo", "enterprise", "themes"]:
|
|
modules.append(submodule_info)
|
|
return modules
|
|
|
|
|
|
# Settings
|
|
versions = ["13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "19.0"]
|
|
output_file = "modules.md"
|
|
|
|
# Define dictionary for module data
|
|
module_info = {}
|
|
|
|
# Iterate over each branch
|
|
for version in versions:
|
|
|
|
# Switch to the version
|
|
subprocess.run(["./task", "checkout", version])
|
|
|
|
# Pull all submodules
|
|
subprocess.run(["./task", "sync-git-folder"])
|
|
|
|
# Get all submodules
|
|
submodules = read_gitmodules(".gitmodules")
|
|
|
|
# Iterate over each submodule
|
|
for submodule in submodules:
|
|
|
|
if submodule["url"].startswith("git@"):
|
|
org = submodule["url"].split(":")[1].split("/")[0]
|
|
repo = (
|
|
submodule["url"].split(":")[1].split("/")[1].replace(".git", "").lower()
|
|
)
|
|
elif submodule["url"].startswith("https://"):
|
|
org = submodule["url"].replace("https://github.com/", "").split("/")[0]
|
|
repo = (
|
|
submodule["url"]
|
|
.replace("https://github.com/", "")
|
|
.split("/")[1]
|
|
.replace(".git", "")
|
|
.lower()
|
|
)
|
|
|
|
if org == "mint-system":
|
|
org = "Mint-System"
|
|
if repo.startswith("odoo-apps-"):
|
|
repo = repo.replace("odoo-apps-", "")
|
|
|
|
path = submodule["path"]
|
|
|
|
if not org:
|
|
raise ValueError(f"Org not found in {submodule['url']}")
|
|
|
|
# Get list of modules
|
|
try:
|
|
result = subprocess.run(
|
|
["git", "-C", path, "ls-tree", "--name-only", "-d", version],
|
|
capture_output=True,
|
|
text=True,
|
|
check=True,
|
|
)
|
|
modules = result.stdout.split("\n")
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Error executing command: {e}")
|
|
print(f"Return code: {e.returncode}")
|
|
print(f"stderr: {e.stderr}")
|
|
modules = []
|
|
|
|
# Cleanup list
|
|
modules = list(filter(None, modules))
|
|
modules = list(filter(lambda x: x not in ["setup", ".github"], modules))
|
|
|
|
# Add module data to the dictionary
|
|
for module in modules:
|
|
module_key = f"{org}|{repo}|{module}"
|
|
|
|
if org == "Mint-System":
|
|
url = f"https://github.com/{org}/odoo-apps-{repo}"
|
|
else:
|
|
url = f"https://github.com/{org}/{repo}"
|
|
branch_link = f" [{version}]({url}/tree/{version}/{module})"
|
|
|
|
if module_key in module_info:
|
|
module_info[module_key] += branch_link
|
|
else:
|
|
module_info[module_key] = branch_link
|
|
|
|
|
|
# Sort module data by key
|
|
module_info = dict(sorted(module_info.items()))
|
|
|
|
# Process module data
|
|
module_data = []
|
|
for key, value in module_info.items():
|
|
org, repo, name = key.split("|")
|
|
module_data.append({"org": org, "repo": repo, "name": name, "link": value})
|
|
|
|
with open(output_file, "w") as f:
|
|
f.write("# Modules\n\n")
|
|
f.write(
|
|
"This page shows all the modules managed with Odoo Build grouped by organization and repository.\n\n"
|
|
)
|
|
|
|
for org, repos in groupby(module_data, key=itemgetter("org")):
|
|
f.write(f"## {org}\n\n")
|
|
|
|
for repo, modules in groupby(repos, key=itemgetter("repo")):
|
|
f.write(f"### {repo}\n\n")
|
|
f.write(" | name | links |\n")
|
|
f.write("|---|---|\n")
|
|
|
|
for module in modules:
|
|
f.write(f"| {module['name']} |{module['link']} |\n")
|
|
f.write("\n")
|
|
|
|
print(f"Markdown table created in {output_file}")
|