Github Action에서 A 저장소의 빌드 또는 어떤 Github Action이 종료되면, 다른 B 저장소의 Action을 호출하는 방식을 통해
테스트 Workflow를 하면 좋겠다라고 생각을 많이 했지만, 요즘 시간이 남아도니 실제로 알아보고 테스트 해봤다.
기본적으로 다른 저장소에 트리거를 거는 방법은 repository_dispatch 을 사용한다.
워크플로를 트리거하는 이벤트 - GitHub Docs
GitHub에 대한 특정 작업이 예약된 시간에 발생하거나 GitHub 외부의 이벤트가 발생할 때 실행되도록 워크플로를 구성할 수 있습니다.
docs.github.com
추가적으로 저 dispatch는 api 호출에서 event_type을 맞추면 되기 때문에, 사실상 다른 github actions 뿐만 아니라, Postman 또는 Slack으로 웹훅을 쏴서 작동 시킬 수 있는 방식이다.
https://docs.github.com/ko/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event
리포지토리 - GitHub Docs
Status: 200 { "id": 1296269, "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", "name": "Hello-World", "full_name": "octocat/Hello-World", "owner": { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_hap
docs.github.com
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>"\
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/OWNER/REPO/dispatches \
-d '{"event_type":"on-demand-test","client_payload":{"unit":false,"integration":true}}'
우선 B 즉, 이벤트를 수신 받아서 진행할 저장소에서 repository_dispatch: types에 위에 event_type 을 맞춰 작성한다.
on:
repository_dispatch:
types: [on-demand-test]
이러면 사실 위에 curl 만 날려도, github action가 동작할 것이다.

그럼 다시 A저장소의 run 에서 저 curl을 동작하면 될 것이다.
steps:
- run: gh api /repos/<USERNAME>/<B REPO>/dispatches -f event_type='on-demand-test'
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
B 저장소의 dispatches에 이벤트 타입에 맞춰 run을 추가한다.
그리고 github의 token을 env로 맞춰 보낸다.
만약 클라이언트 또는 API 등의 저장소가 Release 가 create 되거나 main이 merge 될 때, 트리거를 통해 테스트 레파지토리를 실행해서 테스트 결과를 Slack으로 보내준다면, 자동화 프로세스가 좀 더 가까워진게 아닐까?
'Etc' 카테고리의 다른 글
사이드 프로젝트 배포! (0) | 2024.08.10 |
---|---|
2023 한 해를 돌아보는 찌끄레기 QA (0) | 2023.12.23 |
이력서 잡담 (0) | 2022.04.23 |
작년에 나는 올해에 나는 (0) | 2022.01.09 |
티스토리 OPEN API 신청 및 access token 발급 (0) | 2021.05.16 |