在上一篇我們學到透過在workflow內呼叫另一個workflow的方式複用workflow(reusable workflow)
這篇我們會來會來看一下另一種叫做composite actions的複用workflow的方式
這個方法尤其適合workflow中的某些step經常重複且執行順序幾乎不變時使用
composite action包含多個step,這些step在caller workflow中會被當作job下的一個step運作
它和reusable workflow有幾個差異
無法使用secret
,不過可以透過input傳入secret在專案的非.github資料夾底下
的地方新增action.yaml
,但建議放在action(js檔)附近
metadata file 是用來定義該 composite action 的結構和屬性
大致上語法和撰寫一般workflow差不多,但因為並不是一個獨立的workflow,所以沒有on、jobs屬性
另外也是因為它不是獨立的workflow,所以在裡面使用actions/checkout的話clone的會是呼叫workflow的repo,而不是這個composite action所在的repo
name: 'Say Hello'
description: 'Today is a perfect day to day hello to everyone'
inputs:
name:
description: 'user name'
required: true
outputs:
reply:
description: "How's it going with your new workflow"
value: ${{ steps.reply-your-friend.outputs.output1 }}
runs:
using: 'composite'
steps:
- name: greeting
run: echo "Hello $INPUT_WHO_TO_GREET."
shell: bash
env:
INPUT_WHO_TO_GREET: ${{ inputs.name }}
- name: Reply question
id: reply-your-friend
run: |
echo "output1=Amazing! I can composite several steps into a action." >> $GITHUB_OUTPUT
shell: bash
然後打tag
git tag v1.0.0
# 或者
git tag -a -m "如果需要的話,可以在這打註解" v1.0.0
git push --follow-tags
不管是不是跨repo,都可以呼叫composite action
在要呼叫composite action的repo的.github/workflows底下新增<檔名>.yml即可
name: Try to use composite action
on:
push:
branches:
- master
jobs:
call_composite_action_1:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- id: trial
uses: tempura327/try-github-actions@v1.0.1
with:
name: 'Jasmine'
- run: |
echo How\'s it going with your new workflow?
echo ${{ steps.trial.outputs.reply }}
shell: bash
另外注意一定要以<owner name>/<repo name>@<tag>
去指定呼叫的composite action,不能以檔案路徑指定