octokit / request-action

A GitHub Action to send arbitrary requests to GitHub's REST API

Home Page:https://github.com/marketplace/actions/GitHub-API-Request

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JSON in body of request

aarontwf opened this issue · comments

Hey, just wondering how JSON is supposed to be sent?
Tried a few things but getting different errors back.

This is the API request I'm trying https://docs.github.com/en/rest/reference/issues#create-a-label

    steps:
      - uses: octokit/request-action@v2.x
        with:
          route: POST /repos/${{ github.repository }}/labels
          body: "'\\'{\"name\":\"React ${{ github.event.ref }}\"}\\''"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Error: end of the stream or a document separator is expected (1:4)

 1 | '\'{"name":"React aarontwf-patch-2"}\''
--------^

body: "''{\"name\":\"React ${{ github.event.ref }}\"}''"
Error: end of the stream or a document separator is expected (1:3)

 1 | ''{"name":"React aarontwf-patch-1"}''
-------^

body: "'{\"name\":\"React ${{ github.event.ref }}\"}'"
Error: Invalid request.

"name" wasn't supplied.

body: '{"name":"React ${{ github.event.ref }}"}'
Error: Invalid request.

"name" wasn't supplied.

Try putting it in with directly instead of body:

steps:
      - uses: octokit/request-action@v2.x
        with:
          route: POST /repos/${{ github.repository }}/labels
          name: React ${{ github.event.ref }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

I ran into the same issue for another endpoint. I think the documentation is not very clear on how to pass payload.

For anybody else who comes across this, if you wish to make a request with a JSON body containing nested values it must be done something like this:

    steps:
      - name: 'Construct Github Environment create / update request'
        id: gh_env_req
        run: |
          _reviewers_json="$(cat <<EOF
          [ { "type": "Team", "id": 0 } ]
          EOF
          )"
          
          echo "::set-output name=reviewers_json::${_reviewers_json}"

      - name: Create / Update Github environment
        uses: octokit/request-action@v2.1.0
        with:
          route: 'PUT /repos/{repo_path}/environments/{env_name}'
          repo_path: '${{ github.repository }}'
          env_name: my-env
          reviewers: '${{ steps.gh_env_req.outputs.reviewers_json }}'

If your request is static, you should probably be able to define the json contents of the nested field directly into the with: block, but for my specific use-case the json is actually constructed with the output of a subsequent api call to get the ID of the reviewer's team, thus necessitating an additional step.

The heredoc syntax and spaces between json tokens are purely for readability and are not required.

@dcarbone 👋🏻 Would you be up for making a PR to improve the documentation? I'm sure other people will run into issues like this.

Sure, i'll work on one in a bit.