http/README.md
Frank Jogeleit 2e2dec74b5 retry requests
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2023-03-06 16:07:02 +01:00

5 KiB

HTTP Request Action

Create HTTP Requests from GitHub Actions. This action allows GitHub events to engage with tools like Ansible AWX that use HTTP APIs.

Example

jobs:
  deployment:
    runs-on: ubuntu-latest
    steps:
    - name: Deploy Stage
      uses: fjogeleit/http-request-action@v1
      with:
        url: 'https://ansible.io/api/v2/job_templates/84/launch/'
        method: 'POST'
        username: ${{ secrets.AWX_USER }}
        password: ${{ secrets.AWX_PASSWORD }}
        customHeaders: '{"Content-Type": "application/json"}'
        data: '{"key_1": "value_1", "key_2": "value_2"}'

Versioning

master branch is deprecated. Please use main or v1 to get the latest version of this action. It is recommended to use a fixed version.

Request Configuration

Argument Description Default
url Request URL required Field
method Request Method POST
contentType Request ContentType application/json
data Request Body Content:
- text content like JSON or XML
- key=value pairs separated by '&' or JSON data and contentType: application/x-www-form-urlencoded

only for POST / PUT / PATCH Requests
'{}'
files Map of key / absolute file paths send as multipart/form-data request to the API, if set the contentType is set to multipart/form-data, values provided by data will be added as additional FormData values, nested objects are not supported. Example provided in the test Workflow of this Action '{}'
file Single absolute file path send as application/octet-stream request to the API, if set the contentType is set to application/octet-stream. This input will be ignored if either data or files input is present. Example provided in the test Workflow of this Action
timeout Request Timeout in ms 5000 (5s)
username Username for Basic Auth
password Password for Basic Auth
bearerToken Bearer Authentication Token (without Bearer Prefix)
customHeaders Additional header values as JSON string, keys in this object overwrite default headers like Content-Type '{}'
escapeData Escape newlines in data string content. Use 'true' (string) as value to enable it
preventFailureOnNoResponse Prevent this Action to fail if the request respond without an response. Use 'true' (string) as value to enable it
ignoreStatusCodes Prevent this Action to fail if the request respond with one of the configured Status Codes. Example: '404,401'
httpsCA Certificate authority as string in PEM format
responseFile Persist the response data to the specified file path
retry optional amount of retries if the request is failing, does not retry if the status code is ignored
retryWait time between each retry in millseconds 3000

Response

Variable Description
response Response as JSON String
headers Headers

To display HTTP response data in the GitHub Actions log give the request an id and access its outputs. You can also access specific field from the response data using fromJson() expression.

steps:
  - name: Make Request
    id: myRequest
    uses: fjogeleit/http-request-action@v1
    with:
      url: "http://yoursite.com/api"
  - name: Show Response
    run: |
      echo ${{ steps.myRequest.outputs.response }}
      echo ${{ steps.myRequest.outputs.headers }}
      echo ${{ fromJson(steps.myRequest.outputs.response).field_you_want_to_access }}      

Additional Information

Additional information is available if debug logging is enabled:

  • Instance Configuration (Url / Timeout / Headers)
  • Request Data (Body / Auth / Method)

To enable debug logging in GitHub Actions create a secret ACTIONS_RUNNER_DEBUG with a value of true

Local Usage

  • You can execute this tool locally with the provided CLI bin/http-action.
bin/http-action --help                   
Positionals:
  url  request URL                                                     [string]

Optionen:
      --help           helper text                                     [boolean]
  -d, --data           request body data                               [string] [default: "{}"]
  -f, --files          request files, send as multipart/form-data      [string] [default: "{}"]
      --file           single file, send as application/octet-stream   [string]
  -h, --customHeaders  custom request headers                          [string] [default: "{}"]
  -m, --method         request method (GET, POST, PATCH, PUT, DELETE)  [string] [default: "POST"]
  -t, --contentType    request content type                            [string] [default: "application/json"]
      --bearerToken    bearer token without Bearer prefix, added as
                       Authorization header                            [string]
      --timeout        request timeout                                 [number] [default: 5000]