From dd28f754b33c68d1d4ff3e8d53ae24b19b5b6baa Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Wed, 29 Aug 2018 00:57:11 +0200 Subject: [PATCH] [enh] add CI type and option to now monitor app list --- cli.py | 1 + run.py | 65 +++++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/cli.py b/cli.py index 01383b2..9103982 100644 --- a/cli.py +++ b/cli.py @@ -79,6 +79,7 @@ def list_(all=False, domain=DOMAIN): for i in response.json(): print(f"{i['id']:4d} - {i['name']}") + def delete(job_id, domain=DOMAIN): pass def update(job_id, domain=DOMAIN): pass def stop(job_id, domain=DOMAIN): pass diff --git a/run.py b/run.py index d32359e..49e49a4 100644 --- a/run.py +++ b/run.py @@ -103,9 +103,42 @@ def reset_busy_workers(): Worker.update(state="available").execute() -async def monitor_apps_lists(): +async def create_job(app_id, app_list_name, repo, job_command_last_part): + if isinstance(job_command_last_part, str): + job = Job.create( + name=f"{app_id} ({app_list_name})" + job_command_last_part, + url_or_path=repo.url, + state="scheduled", + ) + + await broadcast({ + "action": "new_job", + "data": model_to_dict(job), + }, "jobs") + + else: + for i in job_command_last_part: + job = Job.create( + name=f"{app_id} ({app_list_name})" + i, + url_or_path=repo.url, + state="scheduled", + ) + + await broadcast({ + "action": "new_job", + "data": model_to_dict(job), + }, "jobs") + + +async def monitor_apps_lists(type="stable"): "parse apps lists every hour or so to detect new apps" + job_command_last_part = "" + if type == "arm": + job_command_last_part = " (~ARM~)" + elif type == "testing-unstable": + job_command_last_part = [" (testing)", " (unstable)"] + # only support github for now :( async def get_master_commit_sha(url): command = await asyncio.create_subprocess_shell(f"git ls-remote {url} master", stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) @@ -138,16 +171,7 @@ async def monitor_apps_lists(): repo.revision = commit_sha repo.save() - job = Job.create( - name=f"{app_id} ({app_list_name})", - url_or_path=repo.url, - state="scheduled", - ) - - await broadcast({ - "action": "new_job", - "data": model_to_dict(job), - }, "jobs") + await create_job(app_id, app_list_name, repo, job_command_last_part) # new app else: @@ -159,16 +183,7 @@ async def monitor_apps_lists(): app_list=app_list_name, ) - job = Job.create( - name=f"{app_id} ({app_list_name})", - url_or_path=repo.url, - state="scheduled", - ) - - await broadcast({ - "action": "new_job", - "data": model_to_dict(job), - }, "jobs") + await create_job(app_id, app_list_name, repo, job_command_last_part) await asyncio.sleep(3) @@ -461,12 +476,16 @@ async def index(request): return {'relative_path_to_root': '', 'path': request.path} -def main(path_to_analyseCI, ssl=False, keyfile_path="/etc/yunohost/certs/ci-apps.yunohost.org/key.pem", certfile_path="/etc/yunohost/certs/ci-apps.yunohost.org/crt.pem"): +@argh.arg('-t', '--type', choices=['stable', 'arm', 'testing-unstable', 'dev'], default="stable") +def main(path_to_analyseCI, ssl=False, keyfile_path="/etc/yunohost/certs/ci-apps.yunohost.org/key.pem", certfile_path="/etc/yunohost/certs/ci-apps.yunohost.org/crt.pem", type="stable", dont_minotor_apps_list=False): reset_pending_jobs() reset_busy_workers() app.config.path_to_analyseCI = path_to_analyseCI - app.add_task(monitor_apps_lists()) + + if not dont_minotor_apps_list: + app.add_task(monitor_apps_lists(type=type)) + app.add_task(jobs_dispatcher()) if not ssl: