diff --git a/academic_observatory_workflows/github.py b/academic_observatory_workflows/github.py index 46492bb17..ea2328d95 100644 --- a/academic_observatory_workflows/github.py +++ b/academic_observatory_workflows/github.py @@ -19,13 +19,16 @@ import json import requests +from airflow import AirflowException -def trigger_repository_dispatch(*, token: str, event_type: str): - """Trigger a Github repository dispatch event. +def trigger_repository_dispatch(*, org: str, repo_name: str, token: str, event_type: str): + """Trigger a GitHub repository dispatch event. + :param org: the GitHub organisation / username. + :param repo_name: the repository name. + :param token: the GitHub token. :param event_type: the event type - :param token: the Github token. :return: the response. """ @@ -35,8 +38,10 @@ def trigger_repository_dispatch(*, token: str, event_type: str): } data = {"event_type": event_type} - return requests.post( - "https://api.github.com/repos/The-Academic-Observatory/coki-oa-web/dispatches", + response = requests.post( + f"https://api.github.com/repos/{org}/{repo_name}/dispatches", headers=headers, data=json.dumps(data), ) + if response.status_code != 204: + raise AirflowException(f"trigger_repository_dispatch: {response.status_code}, {response.text}") diff --git a/academic_observatory_workflows/tests/test_github.py b/academic_observatory_workflows/tests/test_github.py index 6341dafbf..f2726bd1a 100644 --- a/academic_observatory_workflows/tests/test_github.py +++ b/academic_observatory_workflows/tests/test_github.py @@ -17,11 +17,22 @@ import unittest from unittest.mock import patch +import requests +from airflow import AirflowException + from academic_observatory_workflows.github import trigger_repository_dispatch class TestGithub(unittest.TestCase): @patch("academic_observatory_workflows.github.requests.post") def test_trigger_repository_dispatch(self, mock_requests_post): - trigger_repository_dispatch(token="my-token", event_type="my-event-type") + response = requests.Response() + response.status_code = 204 + mock_requests_post.return_value = response + + trigger_repository_dispatch(org="org", repo_name="my-repo", token="my-token", event_type="my-event-type") mock_requests_post.called_once() + + response.status_code = 401 + with self.assertRaises(AirflowException): + trigger_repository_dispatch(org="org", repo_name="my-repo", token="my-token", event_type="my-event-type") diff --git a/academic_observatory_workflows/workflows/oa_web_workflow.py b/academic_observatory_workflows/workflows/oa_web_workflow.py index 2be7ee851..ce077c8e7 100644 --- a/academic_observatory_workflows/workflows/oa_web_workflow.py +++ b/academic_observatory_workflows/workflows/oa_web_workflow.py @@ -765,7 +765,9 @@ def repository_dispatch(self, release: OaWebRelease, **kwargs): token = get_airflow_connection_password(self.github_conn_id) event_types = ["data-update/develop", "data-update/staging", "data-update/production"] for event_type in event_types: - trigger_repository_dispatch(token=token, event_type=event_type) + trigger_repository_dispatch( + org="The-Academic-Observatory", repo_name="coki-oa-web", token=token, event_type=event_type + ) def cleanup(self, release: OaWebRelease, **kwargs): """Delete all files and folders associated with this release.