在撰寫一些自動化流程的時候覺得 Makefile 的寫法不習慣,或是環境的支援太薄弱嘛?覺得 Makefile 的寫法太過古老,每次撰寫都像是在寫古文嘛?給 Taskfile 一個機會吧
有別於 Makefile 的地方
基本上 Taskfile 跟 Makefile 都是為了一些自動化流程需求所發展出來的工具,既然目的相同又謂何要換呢?
- 它只相依一個 library 檔案,而且檔案只有約 9MB
- YAML 語法以及一些內建語法的支援
- Makefile 在 windows 太老舊
- 方便整合在現在流行的 CI 方式,包括 Github Action
Windows 上的安裝
若是有 Chocolatey
或是 Scoop
的話有很方便的安裝指令
|
|
|
|
當然 winget
也是可以
|
|
若上述的工具都沒有,官網有詳細介紹各種安裝方式。
使用不同版本 (Taskfile versions)
標示 Taskfile 所使用的版本可以使用特定版本才開放的功能。可以從這邊確認一下新的版本有提供什麼不同的功能。
變數 (Variables)
在介紹變數前先參考這份簡易的範例。
|
|
Taskfile 可以接受的變數類型有以下幾種:
.env 檔案
Taskfile 可以接受
.env
檔案,並將裡面的 Key/Value pair 識別為全域變數 (global variable)。 在 Taskfile 內可以使用${Your_Variable_Name_In_File}
存取。全域變數
可以在 Task file 內最外層宣告
env
來存放全域變數。在 Taskfile 內可以使用${Your_Variable_Name_In_File}
存取。另外一種是宣告
vars
來存放全域變數,不過在 Taskfile 內需要使用{{.Your_Variable_Name_In_File}}
來存取變數。PS 若
{{}}
內沒有.
在前面的變數那些就是內建的變數,請參考這裡。task 內變數
在 tasks 區塊內的變數跟全域相比就是無法跨越 task 分享變數的內容,而存取的方式跟一樣跟如何宣告有關。
若用
env
存放變數則用,${Your_Variable_Name_In_File}
來取用變數,若是vars
存放變數則用{{.Your_Variable_Name_In_File}}
來取用。CLI 傳入變數
宣告在 tasks 區塊內的變數也可以從呼叫端傳入,可以是 task 互相呼叫時傳入的動態值,也可以是下 CLI 時傳入。
但要特別注意的是,需要有 default 保留字,他才會吃傳入的變數,不然就只是固定的值
1
task demo:vars-task QQ='Hello World~'
相依任務 (Task dependencies)
很多時候一個任務會需要由多個小任務來組成,一來是這樣寫單一任務比較單純好維護,二來是這樣做可以讓任務有機會可以被其他任務複用。
一個簡單的例子:
|
|
上面這個 task 顯示執行這個 task 的 cmds
之前,他會需要先執行完 foo
跟 bar
這兩個 task。還有另外一種方式可以作到類似的事情。可以參考以下的寫法:
|
|
Sample
這邊放上我個人練習用的 script
Reference
- Taskfile
- Taskfile - Github
- Taskfile special variables
- [CI/CD] 自動化建構工具Taskfile — 初階
- Why you should be using Go-Task
- Taskfile or GNU make – the battle of automation tools. Let’s make the developer’s life easier!
- Taskfile - A better build tool than Makefile
- Taskfiles for Go Developers
- Taskfile: a modern alternative to Makefile
- GUN make manual
- GUN make
- GUN make build-in Functions, Variables and Directives