mirror of
https://github.com/YunoHost/yunorunner.git
synced 2024-09-03 20:05:52 +02:00
Fix changes related to sanic version bump
This commit is contained in:
parent
3917207541
commit
ace59e9f70
1 changed files with 19 additions and 19 deletions
38
run.py
38
run.py
|
@ -29,7 +29,7 @@ from websockets.exceptions import ConnectionClosed
|
||||||
from websockets import WebSocketCommonProtocol
|
from websockets import WebSocketCommonProtocol
|
||||||
|
|
||||||
from sanic import Sanic, response
|
from sanic import Sanic, response
|
||||||
from sanic.exceptions import NotFound, abort
|
from sanic.exceptions import NotFound
|
||||||
from sanic.log import LOGGING_CONFIG_DEFAULTS
|
from sanic.log import LOGGING_CONFIG_DEFAULTS
|
||||||
|
|
||||||
from jinja2 import FileSystemLoader
|
from jinja2 import FileSystemLoader
|
||||||
|
@ -630,7 +630,7 @@ async def ws_index(request, websocket):
|
||||||
"data": chunk,
|
"data": chunk,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
await websocket.wait_closed()
|
await websocket.wait_for_connection_lost()
|
||||||
|
|
||||||
|
|
||||||
@app.websocket('/job-ws/<job_id:int>')
|
@app.websocket('/job-ws/<job_id:int>')
|
||||||
|
@ -650,7 +650,7 @@ async def ws_job(request, websocket, job_id):
|
||||||
"data": model_to_dict(job),
|
"data": model_to_dict(job),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
await websocket.wait_closed()
|
await websocket.wait_for_connection_lost()
|
||||||
|
|
||||||
|
|
||||||
@app.websocket('/apps-ws')
|
@app.websocket('/apps-ws')
|
||||||
|
@ -750,7 +750,7 @@ async def ws_apps(request, websocket):
|
||||||
"data": repos,
|
"data": repos,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
await websocket.wait_closed()
|
await websocket.wait_for_connection_lost()
|
||||||
|
|
||||||
|
|
||||||
@app.websocket('/app-ws/<app_name>')
|
@app.websocket('/app-ws/<app_name>')
|
||||||
|
@ -768,7 +768,7 @@ async def ws_app(request, websocket, app_name):
|
||||||
"data": job,
|
"data": job,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
await websocket.wait_closed()
|
await websocket.wait_for_connection_lost()
|
||||||
|
|
||||||
|
|
||||||
def require_token():
|
def require_token():
|
||||||
|
@ -1071,18 +1071,18 @@ async def github(request):
|
||||||
# we define the webhook secret)
|
# we define the webhook secret)
|
||||||
if not os.path.exists("./github_webhook_secret") or not os.path.exists("./github_bot_token"):
|
if not os.path.exists("./github_webhook_secret") or not os.path.exists("./github_bot_token"):
|
||||||
api_logger.info(f"Received a webhook but no ./github_webhook_secret or ./github_bot_token file exists ... ignoring")
|
api_logger.info(f"Received a webhook but no ./github_webhook_secret or ./github_bot_token file exists ... ignoring")
|
||||||
abort(403)
|
return response.json({'error': 'GitHub hooks not configured'}, 403)
|
||||||
|
|
||||||
# Only SHA1 is supported
|
# Only SHA1 is supported
|
||||||
header_signature = request.headers.get("X-Hub-Signature")
|
header_signature = request.headers.get("X-Hub-Signature")
|
||||||
if header_signature is None:
|
if header_signature is None:
|
||||||
api_logger.info("Received a webhook but there's no header X-Hub-Signature")
|
api_logger.info("Received a webhook but there's no header X-Hub-Signature")
|
||||||
abort(403)
|
return response.json({'error': 'No X-Hub-Signature'}, 403)
|
||||||
|
|
||||||
sha_name, signature = header_signature.split("=")
|
sha_name, signature = header_signature.split("=")
|
||||||
if sha_name != "sha1":
|
if sha_name != "sha1":
|
||||||
api_logger.info("Received a webhook but signing algo isn't sha1, it's '%s'" % sha_name)
|
api_logger.info("Received a webhook but signing algo isn't sha1, it's '%s'" % sha_name)
|
||||||
abort(501, "Signing algorightm is not sha1 ?!")
|
return response.json({'error': "Signing algorightm is not sha1 ?!"}, 501)
|
||||||
|
|
||||||
secret = open("./github_webhook_secret", "r").read().strip()
|
secret = open("./github_webhook_secret", "r").read().strip()
|
||||||
# HMAC requires the key to be bytes, but data is string
|
# HMAC requires the key to be bytes, but data is string
|
||||||
|
@ -1090,7 +1090,7 @@ async def github(request):
|
||||||
|
|
||||||
if not hmac.compare_digest(str(mac.hexdigest()), str(signature)):
|
if not hmac.compare_digest(str(mac.hexdigest()), str(signature)):
|
||||||
api_logger.info(f"Received a webhook but signature authentication failed (is the secret properly configured?)")
|
api_logger.info(f"Received a webhook but signature authentication failed (is the secret properly configured?)")
|
||||||
abort(403, "Bad signature ?!")
|
return response.json({'error': "Bad signature ?!"}, 403)
|
||||||
|
|
||||||
hook_type = request.headers.get("X-Github-Event")
|
hook_type = request.headers.get("X-Github-Event")
|
||||||
hook_infos = request.json
|
hook_infos = request.json
|
||||||
|
@ -1103,14 +1103,14 @@ async def github(request):
|
||||||
or hook_infos["issue"]["state"] != "open" \
|
or hook_infos["issue"]["state"] != "open" \
|
||||||
or "pull_request" not in hook_infos["issue"]:
|
or "pull_request" not in hook_infos["issue"]:
|
||||||
# Nothing to do but success anyway (204 = No content)
|
# Nothing to do but success anyway (204 = No content)
|
||||||
abort(204, "Nothing to do")
|
return response.json({'msg': "Nothing to do"}, 204)
|
||||||
|
|
||||||
# Check the comment contains proper keyword trigger
|
# Check the comment contains proper keyword trigger
|
||||||
body = hook_infos["comment"]["body"].strip()[:100].lower()
|
body = hook_infos["comment"]["body"].strip()[:100].lower()
|
||||||
triggers = ["!testme", "!gogogadgetoci", "By the power of systemd, I invoke The Great App CI to test this Pull Request!"]
|
triggers = ["!testme", "!gogogadgetoci", "By the power of systemd, I invoke The Great App CI to test this Pull Request!"]
|
||||||
if not any(trigger.lower() in body for trigger in triggers):
|
if not any(trigger.lower() in body for trigger in triggers):
|
||||||
# Nothing to do but success anyway (204 = No content)
|
# Nothing to do but success anyway (204 = No content)
|
||||||
abort(204, "Nothing to do")
|
return response.json({'msg': "Nothing to do"}, 204)
|
||||||
|
|
||||||
# We only accept this from people which are member of the org
|
# We only accept this from people which are member of the org
|
||||||
# https://docs.github.com/en/rest/reference/orgs#check-organization-membership-for-a-user
|
# https://docs.github.com/en/rest/reference/orgs#check-organization-membership-for-a-user
|
||||||
|
@ -1124,28 +1124,28 @@ async def github(request):
|
||||||
|
|
||||||
if not await is_user_in_organization(hook_infos["comment"]["user"]["login"]):
|
if not await is_user_in_organization(hook_infos["comment"]["user"]["login"]):
|
||||||
# Unauthorized
|
# Unauthorized
|
||||||
abort(403, "Unauthorized")
|
return response.json({'error': "Unauthorized"}, 403)
|
||||||
# Fetch the PR infos (yeah they ain't in the initial infos we get @_@)
|
# Fetch the PR infos (yeah they ain't in the initial infos we get @_@)
|
||||||
pr_infos_url = hook_infos["issue"]["pull_request"]["url"]
|
pr_infos_url = hook_infos["issue"]["pull_request"]["url"]
|
||||||
|
|
||||||
elif hook_type == "pull_request":
|
elif hook_type == "pull_request":
|
||||||
if hook_infos["action"] != "opened":
|
if hook_infos["action"] != "opened":
|
||||||
# Nothing to do but success anyway (204 = No content)
|
# Nothing to do but success anyway (204 = No content)
|
||||||
abort(204, "Nothing to do")
|
return response.json({'msg': "Nothing to do"}, 204)
|
||||||
# We only accept PRs that are created by github-action bot
|
# We only accept PRs that are created by github-action bot
|
||||||
if hook_infos["pull_request"]["user"]["login"] != "github-actions[bot]" \
|
if hook_infos["pull_request"]["user"]["login"] != "github-actions[bot]" \
|
||||||
or not hook_infos["pull_request"]["head"]["ref"].startswith("ci-auto-update-"):
|
or not hook_infos["pull_request"]["head"]["ref"].startswith("ci-auto-update-"):
|
||||||
# Unauthorized
|
# Unauthorized
|
||||||
abort(204, "Nothing to do")
|
return response.json({'msg': "Nothing to do"}, 204)
|
||||||
if not app.config.ANSWER_TO_AUTO_UPDATER:
|
if not app.config.ANSWER_TO_AUTO_UPDATER:
|
||||||
# Unauthorized
|
# Unauthorized
|
||||||
abort(204, "Nothing to do, I am configured to ignore the auto-updater")
|
return response.json({'msg': "Nothing to do, I am configured to ignore the auto-updater"}, 204)
|
||||||
# Fetch the PR infos (yeah they ain't in the initial infos we get @_@)
|
# Fetch the PR infos (yeah they ain't in the initial infos we get @_@)
|
||||||
pr_infos_url = hook_infos["pull_request"]["url"]
|
pr_infos_url = hook_infos["pull_request"]["url"]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Nothing to do but success anyway (204 = No content)
|
# Nothing to do but success anyway (204 = No content)
|
||||||
abort(204, "Nothing to do")
|
return response.json({'msg': "Nothing to do"}, 204)
|
||||||
|
|
||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
async with session.get(pr_infos_url) as resp:
|
async with session.get(pr_infos_url) as resp:
|
||||||
|
@ -1166,7 +1166,7 @@ async def github(request):
|
||||||
job = await create_job(app_id, url_to_test, job_comment=f"PR #{pr_id}, {branch_name}")
|
job = await create_job(app_id, url_to_test, job_comment=f"PR #{pr_id}, {branch_name}")
|
||||||
|
|
||||||
if not job:
|
if not job:
|
||||||
abort(204, "Corresponding job already scheduled")
|
return response.json({'msg': "Nothing to do, corresponding job already scheduled"}, 204)
|
||||||
|
|
||||||
# Answer with comment with link+badge for the job
|
# Answer with comment with link+badge for the job
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue