0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GitHub Acrions】Argument list too longエラーが発生する

Posted at

はじめに

先日作成したワークフローでArgument list too longエラーが発生しました。
解決までに時間を要したので備忘録として解決方法をまとめます。

問題

ワークフロー実行時にArgument list too longエラーが発生する

image.png

原因

エラー分析を行う際のログが膨大だった。
AI分析する前に、対象のログを全て取得していたため、ログの容量が大きい場合は全て取得できずにエラーとなっていました。

解決方法

ログからエラーメッセージのみをgrepして出力する。
エラーログを取得する処理を全量取得から、errorとして出力しているものをgrepして取得することで、ログの容量を減らしました。

また、promptの書き方も簡潔にしました。

      - name: Get error info
        id: get-error
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # ワークフローの実行IDを取得
          RUN_ID=${{ github.event.workflow_run.id }}
          echo "RUN_ID: $RUN_ID"
          # ワークフロー情報を環境変数に保存
          echo "WORKFLOW_NAME=${{ github.event.workflow_run.name }}" >> $GITHUB_ENV
          echo "BRANCH_NAME=${{ github.event.workflow_run.head_branch }}" >> $GITHUB_ENV
          echo "COMMIT_SHA=${{ github.event.workflow_run.head_sha }}" >> $GITHUB_ENV

          # ジョブの一覧を取得
          JOBS=$(gh api repos/${{ github.repository }}/actions/runs/${RUN_ID}/jobs --jq '.jobs')

          # 失敗したジョブのログを取得
          echo "FAILED_LOGS<<EOF" >> $GITHUB_ENV

          for job in $(echo "$JOBS" | jq -r '.[] | select(.conclusion == "failure") | .id'); do
-           echo "=== Job ID: $job ===" >> $GITHUB_ENVAdd commentMore actions
-           gh api repos/${{ github.repository }}/actions/jobs/${job}/logs >> $GITHUB_ENV 2>&1 || echo "ログの取得に失敗しました" >> $GITHUB_ENV
            # ジョブ名を取得
+            JOB_NAME=$(echo "$JOBS" | jq -r --arg id "$job" '.[] | select(.id == ($id | tonumber)) | .name')
+            echo "失敗したジョブ: $JOB_NAME" >> $GITHUB_ENV
+            echo "" >> $GITHUB_ENV
            
+            # エラーの部分だけを取得(最大30行)
+           echo "エラー内容:" >> $GITHUB_ENV
+            gh api repos/${{ github.repository }}/actions/jobs/${job}/logs 2>&1 | \
+              grep -B 2 -A 5 -i "error\|fail\|Found multiple\|Expected\|Received" | \
+              head -30 >> $GITHUB_ENV || echo "ログを取得できませんでした" >> $GITHUB_ENV
            
            echo "" >> $GITHUB_ENV
+            echo "---" >> $GITHUB_ENV
          done

          echo "EOF" >> $GITHUB_ENV

      - name: Run AI check
        id: ai-check
        uses: actions/ai-inference@v1
        with:
          model: "openai/gpt-4o"
          prompt: |
-            あなたは、GitHub ActionsとJavaScript/TypeScriptのテストのプロです。
+            あなたは、GitHub ActionsとJavaScript/TypeScriptのテストのプロです。
           初心者でも理解できるように
            以下の形式で簡潔に(全体で10行以内)説明してください。
            エラーの内容は以下です。

            **失敗したワークフロー:**
            - ワークフロー名: ${{ env.WORKFLOW_NAME }}
            - ブランチ: ${{ env.BRANCH_NAME }}
            - コミットSHA: ${{ env.COMMIT_SHA }}
            - 使用技術: Vite, Supabase, Firebase

            **エラーログ:**
            ```
            ${{ env.FAILED_LOGS }}
            ```

            **回答形式フォーマット:**
            【原因】1-2行で説明
            【解決方法】具体的な手順を1-2個
            【予防策】1つだけ

      - name: Save AI response to summary
        if: always()
        run: |
          # GitHub Actionsのサマリーに出力(Web UIで確認可能)
          echo "## 分析結果" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo '${{ steps.ai-check.outputs.response }}' | base64 | base64 -d >> $GITHUB_STEP_SUMMARY

おわりに

promptの一行を変えるだけで、結果が大きく変わることに驚きました。AIの指示の出し方もスキルとして必要なのではと思うエラーでした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?