GitHub Actions - 利用 GitHub API 與 Workflow Dispatch 達成跨 Repo 觸發
在 GitLab 有 multi-project pipelines 可以做到跨專案 (repo) 觸發對方 pipeline 的事情。
不過看來在 GitHub Actions 沒有辦法做到,目前還是只能先靠透過 API 觸發另外一個 repo 的 workflow 。
組成
發動方
這篇先以 curl 為例。之後可以把 curl 移入一個專案的 workflow 裡面執行。被觸發方
一個可以執行 GitHub Actions 專案。這一篇會直接沿用 GitHub Actions - Hello World! 最低限度實作 這篇的設定檔- 一個具備 repo 權限的 Personal Access Token
流程
被觸發方的修改
1 | name: hello-world |
API
Accept
官方建議用 application/vnd.github.v3+json
就用它吧!
curl
1 | -H "Accept: application/vnd.github.everest-preview+json" |
認證
使用 HTTP Basic Auth 認證
- username: 能夠取用目標 repo 的 GitHub id
- password: Personal access token
curl
1 | -u "<username>:<password>" |
Endpoint
Method | Endpoint |
---|---|
POST |
/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches |
- owner - 目標 repo 的擁有者
- repo - 目標 repo 的 id
- workflow_id - workflow 的檔案名稱
Body
ref 是必要資訊,可以指定 branch, tag 或是 commit SHA ,這邊就先指定為 main
吧!
1 | -d '{"ref": "main"}' |
組合
組合完之後就長這樣:
1 | curl -XPOST \ |
執行後沒錯誤的話應該會得到 204 No Content
可以透過加上 -v
取得詳細資訊
1 | < HTTP/1.1 204 No Content |
被觸發方的 Actions
可以看出來是被 workflow_dispatch 觸發的:
![](/2020/10/15/github-actions-workflow-dispatch/workflow-result.png)
這樣子就算成功了
結語
雖然觸發的方式有點原始,不過至少確定能夠透過這個方法讓兩個 repo 之間能夠連通了。
打 API 沒問題了,接下就可以來試試 repo 互打。
以上,這篇就到這邊囉。