Open5

Github Actions 雑メモ

またぞーまたぞー

環境変数のスコープについては下記の記事が分かりやすかった。
https://zenn.dev/mizti/articles/04e7ba5246289b

環境変数の参照はシェルの構文、もしくはコンテキスト経由で参照することができる。

jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest
    steps:
      - name: test-1
        run: echo ${{ env.NAME }}

      - name: test-2
        run: echo ${{ env['NAME'] }}

      - name: test-3
        run: echo $NAME

コンテキストは run 以外でも利用することができるので、利便性等を考えるとコンテキストから参照するのが統一感が出るのでそちらを利用する。

中間環境変数という仕組みを利用するのが良い。

https://zenn.dev/tmknom/articles/github-cicd-book#中間環境変数でスクリプトインジェクションを回避する

https://docs.github.com/ja/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable

またぞーまたぞー

環境変数をステップを跨いで異なるステップへ渡すには、GitHub Actions が提供する一時ファイルへ書き込むことで実現できる。
一時ファイルへのパスは$GITHUB_ENV で参照可能。
https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-an-environment-variable

jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest
    steps:
      - name: test-1
        run: echo "HOGE=${{ env.NAME }}" >> "$GITHUB_ENV"
        env:
          NAME: 'matazou'
      - name: test-2
        run: |
          echo $HOGE
          echo ${{ env.HOGE }}

github-script というライブラリを使用すれば、JS を使用して書くこともできる。
他にも色々とできそう!

https://github.com/actions/github-script

jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/github-script@v7
        id: test-1
        with:
          script: |
            const name = 'matazou';
            console.log(`Hello, ${name}!`);
            core.exportVariable('HOGE', name);
      - name: test-2
        run: |
          echo $HOGE
またぞーまたぞー

ジョブ間で、任意のステップを値を共有する場合は、$GITHUB_OUTPUTを利用する。

jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest
    outputs:
      SELECTED_COLOR: ${{ steps.test1.outputs.SELECTED_COLOR }}
    steps:
      - name: test1
        # id の指定が必要
        id: test1
        run: |
          echo "SELECTED_COLOR=green" >> "$GITHUB_OUTPUT"
      - name: test2
        env:
          SELECTED_COLOR: ${{ steps.test1.outputs.SELECTED_COLOR }}
        run: |
          echo "The selected color is $SELECTED_COLOR"
  Other:
    runs-on: ubuntu-latest
    # needs の指定が必要
    needs: Explore-GitHub-Actions
    steps:
      - name: test3
        env:
          SELECTED_COLOR: ${{ needs.Explore-GitHub-Actions.outputs.SELECTED_COLOR }}
        run: |
          echo "The selected color is $SELECTED_COLOR"

https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/passing-information-between-jobs

またぞーまたぞー

jobs.<job_id>.defaults.run.shellに明示的に bash を指定することで、未設定の場合の時と違い -o pipefailが設定される!
これにより、パイプライン中にエラーが発生した場合、そのエラーコードが返されるようになる!
(知らなかった。。)

https://docs.github.com/ja/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_iddefaultsrunshell

job のコンカレンシーを設定することで、ジョブの同時実行数を制御できるのでコスト削減等に繋がりそう。
https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/control-the-concurrency-of-workflows-and-jobs