mshick / add-pr-comment

uses: mshick/add-pr-comment@v2
MIT License
196 stars 54 forks source link

Argument list is too long #107

Open Nayana-Nagaraj opened 1 year ago

Nayana-Nagaraj commented 1 year ago

We are not able to Commnet the PR for more than 262,144 characteristics. We are getting a Argument list is too long error. Requesting you to please let us know if we can increase the limit of the PR characteristics

shayonj commented 1 year ago

Running into the same issue. ulimit -s shows the stack size to be 16kb in Github action. Some way to bump the stack size would be nice as a mitigation?

codebydant commented 8 months ago

I am having the same problem with a terraform plan

image

sammcj commented 6 months ago

We're hitting this as well.

JorritSalverda commented 2 months ago

I use this very nice action to write a terraform plan to a PR comment. But very often the plan is too long and I see this same error. Is there an easy way to trim the length to the maximum allowed by GH?

codebydant commented 2 months ago

I use this very nice action to write a terraform plan to a PR comment. But very often the plan is too long and I see this same error. Is there an easy way to trim the length to the maximum allowed by GH?

I have found a solution @JorritSalverda

- name: Terraform - Show Plan in PR
  uses: actions/github-script@v7.0.1
  continue-on-error: true
  if: github.event_name == 'pull_request'
  with:
    script: |
      // Get the existing comments.
      const {data: comments} = await github.rest.issues.listComments({
        owner: context.repo.owner,
        repo: context.repo.repo,
        issue_number: context.payload.number,
      })

      // Find any comment already made by the bot that contains 'Plan for ${{ inputs.environment-name }}'
      const botComment = comments.find(comment => comment.user.login === 'github-actions[bot]' && comment.body.includes(`### Plan for ${{ inputs.environment-name }}`))

      // Terraform plan output
      const run_url = process.env.GITHUB_SERVER_URL + '/' + process.env.GITHUB_REPOSITORY + '/actions/runs/' + process.env.GITHUB_RUN_ID
      const run_link = '<a href="' + run_url + '">Actions</a>.'
      const fs = require('fs')
      const plan_file = fs.readFileSync('plan.txt', 'utf8')
      const plan = plan_file.length > 65000 ? plan_file.toString().substring(0, 65000) + " ..." : plan_file
      const truncated_message = plan_file.length > 65000 ? "Output is too long and was truncated. You can read full Plan in " + run_link + "<br /><br />" : ""
      const output = `### Plan for ${{ inputs.environment-name }} 😏😏
      #### Terraform Initialization ⚙️\`${{ steps.init.outcome }}\`
      #### Terraform Plan 📖\`${{ steps.plan_step.outcome }}\`

      <details><summary>Show Plan</summary>

      \`\`\`diff
      ${plan}
      \`\`\`

      </details>
      ${truncated_message}

      *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, Working Directory: \`${{ github.workspace }}\`, Workflow: \`${{ github.workflow }}\`*`;

      if (botComment) {
        console.log('Found existing comment... updating');
        await github.rest.issues.updateComment({
          owner: context.repo.owner,
          repo: context.repo.repo,
          comment_id: botComment.id,
          body: output
        })
      } else {
        console.log('Creating new comment...');
        await github.rest.issues.createComment({
          issue_number: context.issue.number,
          owner: context.repo.owner,
          repo: context.repo.repo,
          body: output
        })
      }

This is an example when the output is greater than the limit:

image

JorritSalverda commented 2 months ago

Thanks @dtcMLOps,

That actually set me on the path of doing this in the following way while still using this mshick/add-pr-comment action:

      - name: Create Terraform plan
        id: plan
        run: |
          terraform plan -out=tfplan
          terraform show tfplan -no-color > tfplan.txt
      - name: Truncate Terraform plan
        uses: mathiasvr/command-output@v2.0.0
        id: truncate
        with:
          run: |
            maxsize=65000
            actualsize=$(wc -c < tfplan.txt)
            if [ $actualsize -gt $maxsize ]; then
                truncate --size=$maxsize tfplan.txt
                echo -n $'\n\n-- truncated due to max PR comment length, check logs from step: Create Terraform plan --' >> tfplan.txt
            fi

            cat tfplan.txt
      - name: Add PR comment
        uses: mshick/add-pr-comment@v2
        if: ${{ always() }}
        with:
          message: |
            `terraform fmt`: ${{ steps.fmt.outcome }}
            `terraform init`: ${{ steps.init.outcome }}
            `terraform validate`: ${{ steps.validate.outcome }}

            <details open>
            <summary>

            #### Output from `terraform validate`

            </summary>

            ```hcl
            ${{ steps.validate.outputs.stdout }}
        </details>

        `terraform plan`: ${{ steps.plan.outcome }}

        <details open>
        <summary>

        #### Output from `terraform plan`

        </summary>

        ```hcl
        ${{ steps.truncate.outputs.stdout }}
        ```

        </details>


It also nicely color codes the plan, although not exactly the same as in the output from `terraform plan` itself.