From e3718c4b11d86a526615a7dc1e669d19134b151e Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 08 2016 17:30:38 +0000 Subject: Move the CI specific API endpoints to their own section of the API This should help us expand support for CI services --- diff --git a/pagure/api/__init__.py b/pagure/api/__init__.py index 7f7d838..1c97c29 100644 --- a/pagure/api/__init__.py +++ b/pagure/api/__init__.py @@ -202,6 +202,9 @@ from pagure.api import fork from pagure.api import project from pagure.api import user +if pagure.APP.config.get('PAGURE_CI', False): + from pagure.api.ci import jenkins + @API.route('/version/') @API.route('/version') diff --git a/pagure/api/ci/__init__.py b/pagure/api/ci/__init__.py new file mode 100644 index 0000000..ccbb2cb --- /dev/null +++ b/pagure/api/ci/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +""" + (c) 2016 - Copyright Red Hat Inc + + Authors: + Pierre-Yves Chibon + +""" diff --git a/pagure/api/ci/jenkins.py b/pagure/api/ci/jenkins.py new file mode 100644 index 0000000..ab05532 --- /dev/null +++ b/pagure/api/ci/jenkins.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +""" + (c) 2016 - Copyright Red Hat Inc + + Authors: + Pierre-Yves Chibon + +""" + +import flask + +from sqlalchemy.exc import SQLAlchemyError + +import pagure +import pagure.exceptions +import pagure.lib +from pagure import APP, SESSION +from pagure.api import API, APIERROR + + +@API.route('/ci/jenkins//build-finished', methods=['POST']) +def ci_notification(pagure_ci_token): + """ Flag a pull-request based on the info provided by the CI service. + """ + + try: + data = flask.request.json() + cfg = jenkins_hook.get_configs( + data['name'], jenkins_hook.Service.JENKINS)[0] + build_id = data['build']['number'] + + if not constant_time.bytes_eq( + to_bytes(pagure_ci_token), to_bytes(cfg.pagure_ci_token)): + return ('Token mismatch', 401) + + except (TypeError, ValueError, KeyError, jenkins_hook.ConfigNotFound) as exc: + APP.logger.error('Error processing jenkins notification', exc_info=exc) + flask.abort(400, "Bad Request") + + APP.logger.info('Received jenkins notification') + pagure_ci.process_build(APP.logger, cfg, build_id) + return ('', 204)