🚀

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