GitHub ActionsでRepository内のJson fileをパースする

2022.05.22

こんにちは、CX事業本部 IoT事業部の若槻です。

以前のエントリで次のようなことを試しました。

しかしその後、このRepository内に作成したJson fileをGitHub Actionsでパースして使用する処理が必要となったため、方法を確認してみました。

確認してみた

パース対象として、Repository(PushしたBranch)上に次のJson fileを作成しておきます。

config.json

{
  "title": "データ取得APIを実装する",
  "createdAt": "2022/05/22T23:25:44"
}

方法その1

Jsonの内容をContextに指定し、fromJsonというBuilt-inのFunctionでパースする方法です。

parse_config_json_1.yml

on:
  push

jobs:
  parse_config_json:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set json content to context
        id: set_json_content
        run: |
          content=`cat ./config.json`
          //複数行の場合は特殊文字をパース可能な文字に置き換える
          content="${content//'%'/'%25'}"
          content="${content//$'\n'/'%0A'}"
          content="${content//$'\r'/'%0D'}"
          echo "::set-output name=configJson::$content"

      - name: Echo
        run: |
          echo "Title is \"$TITLE\"."
        env:
          TITLE: ${{fromJson(steps.set_json_content.outputs.configJson).title}}

Json fileの値がパースできて、titleの値が取得できています!

参考

方法その2

Jsonの内容をjqコマンドでパースする方法です。パースして取得した値をGITHUB_ENVにセットして、他のStepでも使えるようにしています。

parse_config_json_2.yml

on:
  push

jobs:
  parse_config_json:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set title to GITHUB_ENV
        run: |
          title=$(cat ./${ISSUE_NUMBER}/config.json | jq -r .title)
          echo "TITLE=${title}" >> $GITHUB_ENV

      - name: Echo
        run: |
          echo "Title is \"$TITLE\"."

Json fileの値がパースできて、titleの値が取得できています!

おわりに

GitHub ActionsでRepository内のJson fileをパースしてみました。

jqコマンドが使えない環境でばければ、記述がよりシンプルとなる方法2で良いかと思います。

参考

以上