本地端執行 GitHub Action Workflow: act

Image Source: https://github.blog/news-insights/product-news/github-actions-now-supports-ci-cd/

今天想要分享的是 GitHub Action Workflow 在本地端執行的方法。

為什麼要在本地端執行呢?

因為大多時候很多 Workflow 都會被多個 Repo 給共用,假如我其中一段想要修改或是測試時,就需要在多個 Repo 發送多個 PR 且有時則需要 Merge 後才能夠測試其正確性。

又因為這些 Workflow 運行在正式環境當中,深怕改錯或測試頻頻發出各種 Alert 訊息。

為此,如果有一個方法可以讓我們在本地端執行測試 GitHub Workflow 的正確性後才發送 PR,我想對開發環境也好或是正式環境都有乾淨的 code。

發生的案例

這次想要介紹的案例就是 Repo 1 有使用到 Repo 2 的測試 Workflow,但現在不確定為什麼當 Merge 的時候不會發送 Slack 訊息到指定頻道當中。

需要注意的是 Repo 1 裡面有 pre_commit 以及 merge Workflow 都有使用到 test workflow。



改動內容

根據上述描述的情境,我需要在 Repo 1 和 Repo 2 當中的 Workflow 確認是否有發送 slack 訊息的 step。

依照我想改動的方式就需要同時發送兩個 PR 才能進行測試,當然也可以只發 Repo 2 的 PR,並在 Repo 1 當中的 Workflow 引用 Repo 2 的 Url 改成相應的 Branch 即可。

但是要測試 Workflow 是否正常運作,仍然還是得需要再次發一個 PR Trigger Workflow 才能知道。

基於上述這些總總發 PR 的麻煩,就讓我思考是否有方法可以在本地端測試 GitHub Action Workflow 的方法或是工具。

nektos/act

當我在搜尋資料的時候發現有一個工具就叫做 act,它是一個支援在本地端執行 GitHub Action Workflow 的工具。

根據官方文件所提供的資訊,可以透過 brew install act 的指令來安裝,官方也有提供其它方法,就依照自己的需求去安裝

安裝完成以後,接下來需要在本地端再安裝一個 Runner,可以把它想成是一個執行環境;它基本上就是一個在本地端起的 Docker Container。

環境設置

上述工具安裝完成後,接下來就是一些環境設置的部分,因為要在本地端執行 Workflow,所以要先安裝好 Docker 以及 Runner。

另外一點,如果要執行的 Repo 是有鎖起來的情況,你需要額外建立一把 GitHub personal access token 才行。

執行方法

act -W .github/workflow/<workflow_name> -e event.json 

event.json 的用途是模擬 GitHub 觸發 event 的情況,範例如下:

  • 如果要使用公司內部的就需要 --github-instance <domain_url> + -s <github_token>

張貼留言

較新的 較舊