Merge pull request #2015 from Salamandar/rework_autoupdater_part_1
Rework autoupdater part 1
This commit is contained in:
commit
29c0bb9c46
1 changed files with 54 additions and 65 deletions
|
@ -1,16 +1,26 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
import glob
|
import glob
|
||||||
import hashlib
|
import hashlib
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
from pathlib import Path
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import toml
|
import toml
|
||||||
|
import tqdm
|
||||||
|
from tqdm.contrib.logging import logging_redirect_tqdm
|
||||||
|
|
||||||
|
# add apps/tools to sys.path
|
||||||
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||||
|
|
||||||
from rest_api import GithubAPI, GitlabAPI, GiteaForgejoAPI, RefType
|
from rest_api import GithubAPI, GitlabAPI, GiteaForgejoAPI, RefType
|
||||||
|
from appslib.utils import REPO_APPS_ROOT, get_catalog # pylint: disable=import-error
|
||||||
|
|
||||||
|
|
||||||
STRATEGIES = [
|
STRATEGIES = [
|
||||||
"latest_github_release",
|
"latest_github_release",
|
||||||
|
@ -27,39 +37,18 @@ STRATEGIES = [
|
||||||
"latest_forgejo_commit"
|
"latest_forgejo_commit"
|
||||||
]
|
]
|
||||||
|
|
||||||
if "--commit-and-create-PR" not in sys.argv:
|
|
||||||
dry_run = True
|
dry_run = True
|
||||||
else:
|
|
||||||
dry_run = False
|
|
||||||
|
|
||||||
args = [arg for arg in sys.argv[1:] if arg != "--commit-and-create-PR"]
|
# For github authentication
|
||||||
|
|
||||||
if len(args):
|
|
||||||
auth = None
|
auth = None
|
||||||
else:
|
github = None
|
||||||
GITHUB_LOGIN = (
|
author = None
|
||||||
open(os.path.dirname(__file__) + "/../../.github_login").read().strip()
|
|
||||||
)
|
|
||||||
GITHUB_TOKEN = (
|
|
||||||
open(os.path.dirname(__file__) + "/../../.github_token").read().strip()
|
|
||||||
)
|
|
||||||
GITHUB_EMAIL = (
|
|
||||||
open(os.path.dirname(__file__) + "/../../.github_email").read().strip()
|
|
||||||
)
|
|
||||||
|
|
||||||
from github import Github, InputGitAuthor
|
|
||||||
|
|
||||||
auth = (GITHUB_LOGIN, GITHUB_TOKEN)
|
|
||||||
github = Github(GITHUB_TOKEN)
|
|
||||||
author = InputGitAuthor(GITHUB_LOGIN, GITHUB_EMAIL)
|
|
||||||
|
|
||||||
|
|
||||||
def apps_to_run_auto_update_for():
|
def apps_to_run_auto_update_for():
|
||||||
catalog = toml.load(open(os.path.dirname(__file__) + "/../../apps.toml"))
|
|
||||||
|
|
||||||
apps_flagged_as_working_and_on_yunohost_apps_org = [
|
apps_flagged_as_working_and_on_yunohost_apps_org = [
|
||||||
app
|
app
|
||||||
for app, infos in catalog.items()
|
for app, infos in get_catalog().items()
|
||||||
if infos["state"] == "working"
|
if infos["state"] == "working"
|
||||||
and "/github.com/yunohost-apps" in infos["url"].lower()
|
and "/github.com/yunohost-apps" in infos["url"].lower()
|
||||||
]
|
]
|
||||||
|
@ -445,28 +434,6 @@ class AppAutoUpdater:
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
|
||||||
# Progress bar helper, stolen from https://stackoverflow.com/a/34482761
|
|
||||||
def progressbar(it, prefix="", size=60, file=sys.stdout):
|
|
||||||
it = list(it)
|
|
||||||
count = len(it)
|
|
||||||
|
|
||||||
def show(j, name=""):
|
|
||||||
name += " "
|
|
||||||
x = int(size * j / count)
|
|
||||||
file.write(
|
|
||||||
"\n%s[%s%s] %i/%i %s\n"
|
|
||||||
% (prefix, "#" * x, "." * (size - x), j, count, name)
|
|
||||||
)
|
|
||||||
file.flush()
|
|
||||||
|
|
||||||
show(0)
|
|
||||||
for i, item in enumerate(it):
|
|
||||||
show(i + 1, item)
|
|
||||||
yield item
|
|
||||||
file.write("\n")
|
|
||||||
file.flush()
|
|
||||||
|
|
||||||
|
|
||||||
def paste_on_haste(data):
|
def paste_on_haste(data):
|
||||||
# NB: we hardcode this here and can't use the yunopaste command
|
# NB: we hardcode this here and can't use the yunopaste command
|
||||||
# because this script runs on the same machine than haste is hosted on...
|
# because this script runs on the same machine than haste is hosted on...
|
||||||
|
@ -484,16 +451,34 @@ def paste_on_haste(data):
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
def main() -> None:
|
||||||
args = [arg for arg in sys.argv[1:] if arg != "--commit-and-create-PR"]
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("app_dir", nargs="?", type=Path)
|
||||||
|
parser.add_argument("--commit-and-create-PR", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
if len(args):
|
global dry_run, auth, github, author
|
||||||
AppAutoUpdater(args[0], app_id_is_local_app_dir=True).run()
|
dry_run = args.commit_and_create_PR
|
||||||
|
|
||||||
|
if args.app_dir:
|
||||||
|
AppAutoUpdater(str(args.app_dir), app_id_is_local_app_dir=True).run()
|
||||||
else:
|
else:
|
||||||
|
GITHUB_LOGIN = (REPO_APPS_ROOT / ".github_login").open("r", encoding="utf-8").read().strip()
|
||||||
|
GITHUB_TOKEN = (REPO_APPS_ROOT / ".github_token").open("r", encoding="utf-8").read().strip()
|
||||||
|
GITHUB_EMAIL = (REPO_APPS_ROOT / ".github_email").open("r", encoding="utf-8").read().strip()
|
||||||
|
|
||||||
|
from github import Github, InputGitAuthor
|
||||||
|
|
||||||
|
auth = (GITHUB_LOGIN, GITHUB_TOKEN)
|
||||||
|
github = Github(GITHUB_TOKEN)
|
||||||
|
author = InputGitAuthor(GITHUB_LOGIN, GITHUB_EMAIL)
|
||||||
|
|
||||||
apps_failed = []
|
apps_failed = []
|
||||||
apps_failed_details = {}
|
apps_failed_details = {}
|
||||||
apps_updated = []
|
apps_updated = []
|
||||||
for app in progressbar(apps_to_run_auto_update_for(), "Checking: ", 40):
|
|
||||||
|
with logging_redirect_tqdm():
|
||||||
|
for app in tqdm.tqdm(apps_to_run_auto_update_for(), ascii=" ·#"):
|
||||||
try:
|
try:
|
||||||
updated = AppAutoUpdater(app).run()
|
updated = AppAutoUpdater(app).run()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -522,3 +507,7 @@ if __name__ == "__main__":
|
||||||
)
|
)
|
||||||
if apps_updated:
|
if apps_updated:
|
||||||
print(f"Apps updated: {', '.join(apps_updated)}")
|
print(f"Apps updated: {', '.join(apps_updated)}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
Loading…
Reference in a new issue