GitHub Actionsでset-envが非推奨になったので$GITHUB_ENV使う

公開:2020/10/14
更新:2020/10/15
3 min読了の目安(約2700字TECH技術記事

GitHub Actions: Deprecating set-env and add-path commands - GitHub Changelog October 1, 2020

2020-10-01の変更で、セキュリティの面から、set-envによる環境変数の設定が非推奨になった。

新しい設定方法

今まではset-envでしていたのを、以下のように書き換えるだけです

echo "{name}={value}" >> $GITHUB_ENV

pathの場合はこうします
echo "/path/to/dir" >> $GITHUB_PATH

複数行の場合は、区切り文字も$GITHUB_ENVに設定します。

{name}<<{delimiter}
{value}
{delimiter}
steps:
  - name: Set the value
    id: step_one
    run: |
        echo 'JSON_RESPONSE<<EOF' >> $GITHUB_ENV
        curl https://httpbin.org/json >> $GITHUB_ENV
        echo 'EOF' >> $GITHUB_ENV

やってみた:一行の場合

たとえば、自動デプロイのためにリリースタグを取得してActionsで使いたい場合、以下のように書いていましたが

echo ::set-env name=TAG::$(echo ${{GITHUB_REF#refs/*/}})

これを書き換えると以下のようになります

echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV

全体像はこんな感じです

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set env
        run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
      - name: Test
        run: |
          echo $RELEASE_VERSION
          echo ${{ env.RELEASE_VERSION }}

https://stackoverflow.com/questions/58177786/get-the-current-pushed-tag-in-github-actions
この質問の回答にも反映しときました

やってみた:複数行の場合

プルリクエスト作成時にリポジトリのコードステップを取得し、コメントで出力するフローを書きました
使用したツール

step-count.yaml
  
name: step count
on: [pull_request,workflow_dispatch]
jobs:
  build:
    name: code steps using gocloc
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@master

      - name: Login GitHub Registry
        run: docker login docker.pkg.github.com -u owner -p ${{ secrets.GITHUB_TOKEN }}

      - name: Run gocloc and Set env
        run: |
          echo 'content<<EOF' >> $GITHUB_ENV
          docker run --rm -v "${PWD}":/workdir docker.pkg.github.com/hhatto/gocloc/gocloc:latest . >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

      - uses: actions/github-script@v3
        with:
          github-token: ${{secrets.GITHUB_TOKEN}}
          script: |
            const env = process.env
            github.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: "``` \n" + env.content + "\n ```"
            })

これで、以下のようにツールの出力を環境変数に入れて、コメントの内容として再利用できました