在上一篇我們學到了Github Actions的變數、變數的scope,以及如何使用GITHUB_ENV、GITHUB_OUTPUT在job、step之間傳遞資料
在這篇我們會來了解一下Github Actions的context
context 是一種物件,透過它可以取得 workflow、變數、runner...等的資訊
當job被送到runner執行時,就可以透過github context 和 runner context取用存在於runner的預設環境變數
取用方式為${{context名.屬性}}
, ${{ github.job.needs.set-style.outputs.primary-color}}
就是一個例子,不過沒寫github.job也可以使用needs context,所以基本上都會省略
在不同的 workflow 下,context 的內容會有極大的不同,例如matrix
context 只存在於 matrix 內的 job
github context存了workflow和trigger event的資訊
{
"token": "***", // auth token
"repository": "tempura327/hello-world", // repo名
"event_name": "input", // workflow觸發事件
"workflow": "Context testing", // workflow名
"job": "print out something", // job名
"event": {
"input": {
//...
},
},
"ref": "refs/heads/my_branch", // ref為分支或tag或其他視觸發事件的類型而定
"ref_type": "branch", // ref的種類
"ref_name": "my_branch", // 分支名
}
使用step id可以取得某個step內的資訊
{
"<step1 id>": {
"outputs": {
// 寫入GITHUB_OUTPUT的值
},
"outcome": "success", // step的結果
"conclusion": "success" // step的結果
},
}
{
"github_token": "***", // 自動產生給workflow的token,使用某一些牽涉到授權的action時會需要提供
"NPM_TOKEN": "***",
// 其他自訂的token
}
使用job id可以取得其他job內的資訊
{
"<job1 id>": {
"result": "success", // job的結果
"outputs": {
// 在job內的step寫入GITHUB_OUTPUT的值
}
}
}
輸入給workflow、action的值
// 以上圖舉例
{
"branch": "main",
"log_level": "warning",
"environment":"github-pages"
}
使用event context可以查看workflow觸發事件的資訊,關於觸發事件會在後面的篇章詳細說明
{
"ref": "refs/heads/my_branch", // ref為分支或tag或其他,視觸發事件的類型而定
"number": 123, // PR或issue編號,視觸發事件的類型而定
"repository": "tempura327/hello-world", // repo名
// 以下三種視觸發事件的類型而定
"issue": {
"title": "test issue", // issue標題
"label": "Good first taken", // label
"comments": 10 // 留言數
// ...
},
"pull_request":{
"merged": true,
"head":{
"sha":"feoe15w33q" // 取得HEAD的commit sha
}
// ...
},
"review": {
"state": "approved" // PR的review狀況
// ...
},
}