:::

用GitHub Actions的Windows虛擬機器來編譯AutoIT / Compile AutoIT on the Windows Runer in GitHub Actions

2023-0208-011006.png

GitHub Actions能跑Ubuntu,那能用它來跑其他的作業系統嗎?答案是肯定的。


虛擬機器 / Runner

2023-0208-003811.png

https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources

GitHub Actions提供了很多用來運作任務的Runner。為了方便理解,我通常稱它們叫做虛擬機器。這些虛擬機器的是讓你每次在運作任務時都有個「乾淨」的環境。除了基本的作業系統和基本元件之外,許多工具都要額外安裝或配置。於是我們就需要在workflow的YAML中設定各個step

2023-0208-004430.png

https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#create-an-example-workflow 

GitHub Actions預設提供了Ubuntu、MacOS和Windows等不同作業系統,也有提供一些不同的版本。大多時候我們的虛擬機器都是用「ubuntu-latest」,也就是最新版的Ubuntu,但我們也可以在GitHub Actions裡使用Windows虛擬機器。

2023-0208-004607.png

https://www.autoitscript.com/forum/topic/205731-setting-up-ci-on-github-for-autoit-scripts/ 

rcmaehl在AutoIT的論壇上提出了它的workflow設定檔案。不過他的步驟中加入了很多檔案存取的步驟,讓整個流程變得有點複雜。

所以我就來自己動手做一個吧。


action-AutoIT-Builder

https://github.com/pulipulichen/action-AutoIT-Builder

https://github.com/pulipulichen/action-AutoIT-Builder

我建立了一個用GitHub Actions來編譯AutoIT的保存庫。

2023-0208-005058.png

這個保存庫的使用方式是必須要在GitHub的Visual Studio Code裡面運作。在已登入且有權限編輯此保存庫的前提下,按「.」可以進入該保存庫的網頁版Visual Studio Code。接下來需要修改以下兩個檔案:

2023-0208-005508.png

修改並進行commit跟push之後,GitHub Actions就會運作。

2023-0208-005616.png

最後把編譯結果輸出在下面的Artifacts當中。

工作流設定檔 / Workflow

https://github.com/pulipulichen/action-AutoIT-Builder/blob/main/.github/workflows/ci.yml

https://github.com/pulipulichen/action-AutoIT-Builder/blob/main/.github/workflows/ci.yml

如果使用Windows作為虛擬機器,那執行環境就會是PowerShell,而不是Ubuntu的bash。兩者大多都有對應的功能,但語法需要查詢一下。跟rcmaehl的做法不同,我加入了一些設定:

  • 用actions/checkout取出要編譯的檔案,就是上面那兩個。
  • 用actions/cache保存AutoIT的安裝狀態:第一次執行時需要安裝,第二次之後就會直接從快取還原AutoIT安裝狀態,不用再次重安裝。同時還要用Test-Path檢查是否已經有從快取狀態還原。
  • josStorer/get-current-time宣告時間變數:宣告變數之後可以給Artifect的檔案命名。網路上很多人都有類似的問題,但似乎很少人知道這個好用的action。
  • 用actions/upload-artifact匯出編譯結果:編譯結果只會給有權限控制workflow的使用者下載。

這樣說來,以前我在Kubernetes的GitLab CI使用artifact的時候是用來保存Cypress出錯時的結果。現在用它來保存編譯結果檔,也是挺不錯的呀。

能用Windows虛擬機器編譯,對我這個Linux使用者來說真的方便很多。WINE編譯的AutoIT一直有些問題啊orz


你會想用Windows虛擬機器做些什麼呢?

歡迎下面留下你大膽的想法~

(封面圖片來源:AutoIT)