🚀
GitHub ActionsのGITHUB_OUTPUTをスクリプトから書く
最近、少しでも複雑だなと思った操作は、runの中にシェルスクリプトで書くのではなく、スクリプト言語で書いてユニットテストできるようにしています。
今回は、それに近しいお話。
1つだけGITHUB_OUTPUTに書くような時は、stepsのrunでechoする方法で良いんだけど、多少の値操作がありつつ複数の値を書きたいような時にテストできた方が良いので、TypeScriptで書いている。
スクリプトからGITHUB_OUTPUTに書く時は、明示的にファイル書き込みする形になるので、その書き方。
まずは、Actions。
jobs:
output-from-ts:
runs-on: ubuntu-latest
outputs:
HOGE: ${{ steps.run-script.outputs.hoge }}
FUGA: ${{ steps.run-script.outputs.fuga }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2.0.1
with:
bun-version: 1.2.6
- name: Run script
id: run-script
run: |
bun install
bun run output-test.ts
- name: Print output
env:
HOGE: ${{ steps.run-script.outputs.hoge }}
FUGA: ${{ steps.run-script.outputs.fuga }}
run: |
echo "HOGE: $HOGE"
echo "FUGA: $FUGA"
続いてTypeScript。
const githuOutputPath = process.env.GITHUB_OUTPUT;
if (!githuOutputPath) {
throw new Error('GITHUB_OUTPUT is not set');
}
const writer = Bun.file(githuOutputPath).writer();
writer.write('HOGE=hogehoge\n');
writer.write('FUGA=fugafuga\n');
writer.end();
こんな感じで、あとはHOGEやFUGAの値を決めるところを切り出してテストしておくと安心。
Discussion