GitHubActionsのステップは、実は完全に独立していなくて、ファイル操作をしたりすると、次のステップでも利用できる。
- name: Do something
run: |
do-something-command >> result.txt 2>&1
- name: Check result
if: ${{ always() }}
run: |
cat result.txt
これをする利点としては、何かするコマンドがたとえ失敗したとしても、その出力結果を以降のステップで使うことができる。
ただし、注意点として ::set-output
を使う時は改行などをエスケープしないといけない。
たとえば、先のコマンドの結果をIssueにコメントするとしたらこういう感じ。
https://github.com/marketplace/actions/comment-action というものを使った
- name: Check result
id: something_result
if: ${{ always() }}
run: |
result=$(cat result.txt)
echo $result
result='```'$'\n'"$result"$'\n''```'
result="${result//'%'/'%25'}"
result="${result//$'\n'/'%0A'}"
result="${result//$'\r'/'%0D'}"
echo "::set-output name=std_out::$result"
- name: Create comment
uses: jungwinter/comment@v1
if: ${{ always() }}
with:
type: create
body: ${{ steps.something_result.outputs.std_out }}
issue_number: 100
token: ${{ secrets.GITHUB_TOKEN }}