From 2e500bde0805147352d3b2581b47cb861f95c66a Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Fri, 29 Mar 2024 06:46:00 +0100 Subject: [PATCH] feat(readme-generator): add Aleks' script to regen README in batch --- readme_generator/regen_readme_in_batch.py | 71 +++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 readme_generator/regen_readme_in_batch.py diff --git a/readme_generator/regen_readme_in_batch.py b/readme_generator/regen_readme_in_batch.py new file mode 100644 index 0000000..59ce000 --- /dev/null +++ b/readme_generator/regen_readme_in_batch.py @@ -0,0 +1,71 @@ +import time +import json +import os +import hmac +import shlex +import asyncio +import tempfile + +from make_readme import generate_READMEs + +github_webhook_secret = open("github_webhook_secret", "r").read().strip() + +login = open("login").read().strip() +token = open("token").read().strip() + +my_env = os.environ.copy() +my_env["GIT_TERMINAL_PROMPT"] = "0" +my_env["GIT_AUTHOR_NAME"] = "yunohost-bot" +my_env["GIT_AUTHOR_EMAIL"] = "yunohost@yunohost.org" +my_env["GIT_COMMITTER_NAME"] = "yunohost-bot" +my_env["GIT_COMMITTER_EMAIL"] = "yunohost@yunohost.org" + + +async def git(cmd, in_folder=None): + + if not isinstance(cmd, list): + cmd = cmd.split() + if in_folder: + cmd = ["-C", in_folder] + cmd + cmd = ["git"] + cmd + cmd = " ".join(map(shlex.quote, cmd)) + print(cmd) + command = await asyncio.create_subprocess_shell(cmd, env=my_env, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT) + data = await command.stdout.read() + return data.decode().strip() + + +async def regen_readme(repository, branch): + + print(f"{repository} -> branch '{branch}'") + + with tempfile.TemporaryDirectory() as folder: + await git(["clone", f"https://{login}:{token}@github.com/{repository}", "--single-branch", "--branch", branch, folder]) + generate_READMEs(folder) + + await git(["add", "README*.md"], in_folder=folder) + + diff_not_empty = await asyncio.create_subprocess_shell(" ".join(["git", "diff", "HEAD", "--compact-summary"]), cwd=folder, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT) + diff_not_empty = await diff_not_empty.stdout.read() + diff_not_empty = diff_not_empty.decode().strip() + if not diff_not_empty: + print("nothing to do") + return + + await git(["commit", "-a", "-m", "Auto-update README", "--author='yunohost-bot '"], in_folder=folder) + await git(["push", "origin", branch, "--quiet"], in_folder=folder) + + print("Updated {repo}") + +skip = True +apps = json.load(open("../../builds/default/v3/apps.json"))["apps"] +for app, infos in apps.items(): + if not "github.com" in infos["git"]["url"]: + continue + if app == "dendrite": + skip = False + if skip: + continue + print(app) + time.sleep(2) + asyncio.run(regen_readme(infos["git"]["url"].replace("https://github.com/", ""), infos["git"]["branch"]))