Compare commits

..

29 Commits

Author SHA1 Message Date
Kittizz
ed8a1c36db Add ignore ssl error (#145)
* add ignore ssl
* build and update docs
* keep the upstream formatting/indentation
2024-04-20 14:34:12 +02:00
Frank Jogeleit
8af2803109 Merge pull request #144 from fjogeleit/fix-retryWait
fix retryWait mapping
2024-04-06 13:26:11 +02:00
Frank Jogeleit
8537e58734 fix retryWait mapping
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2024-04-06 13:22:18 +02:00
Frank Jogeleit
74e0e96181 update build
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2024-04-06 10:17:23 +02:00
Frank Jogeleit
2bb8059d00 Merge pull request #143 from fjogeleit/fixes
fix retry and ignore status response
2024-04-06 10:03:47 +02:00
Frank Jogeleit
bfbe4dd6af fix retry and ignore status response
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2024-04-06 09:53:11 +02:00
Frank Jogeleit
7c708e96af Merge pull request #139 from fjogeleit/dependabot/npm_and_yarn/undici-5.28.4
Bump undici from 5.28.3 to 5.28.4
2024-04-04 20:09:54 +02:00
dependabot[bot]
f9dc1a8d4b Bump undici from 5.28.3 to 5.28.4
Bumps [undici](https://github.com/nodejs/undici) from 5.28.3 to 5.28.4.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.28.3...v5.28.4)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-04 17:19:56 +00:00
Frank Jogeleit
33a4d079d7 Merge pull request #138 from fjogeleit/dependabot/npm_and_yarn/axios-1.6.8
Bump axios from 1.6.7 to 1.6.8
2024-03-19 07:51:06 +01:00
dependabot[bot]
0b6ec5eadd Bump axios from 1.6.7 to 1.6.8
Bumps [axios](https://github.com/axios/axios) from 1.6.7 to 1.6.8.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.6.7...v1.6.8)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-18 17:37:38 +00:00
Frank Jogeleit
897b6a3c96 Merge pull request #137 from fjogeleit/dependabot/npm_and_yarn/follow-redirects-1.15.6
Bump follow-redirects from 1.15.4 to 1.15.6
2024-03-17 07:07:59 +01:00
dependabot[bot]
363da44e0a Bump follow-redirects from 1.15.4 to 1.15.6
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-16 22:35:08 +00:00
Frank Jogeleit
1a131d17cc Merge pull request #136 from ClayenKitten/patch-1
docs: wrong `timeout` input description
2024-03-16 16:38:44 +01:00
ClayenKitten
72a0a5b93e docs: wrong timeout input description 2024-03-16 18:35:51 +03:00
Frank Jogeleit
606bb16fb9 Merge pull request #135 from fjogeleit/dependabot/npm_and_yarn/undici-5.28.3
Bump undici from 5.28.2 to 5.28.3
2024-02-16 21:30:45 +01:00
dependabot[bot]
517601f732 Bump undici from 5.28.2 to 5.28.3
Bumps [undici](https://github.com/nodejs/undici) from 5.28.2 to 5.28.3.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.28.2...v5.28.3)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-16 18:40:16 +00:00
Frank Jogeleit
c9a231b621 Merge pull request #134 from fjogeleit/dependabot/npm_and_yarn/axios-1.6.7
Bump axios from 1.6.5 to 1.6.7
2024-01-29 18:48:27 +01:00
dependabot[bot]
2e6550f5bd Bump axios from 1.6.5 to 1.6.7
Bumps [axios](https://github.com/axios/axios) from 1.6.5 to 1.6.7.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.6.5...v1.6.7)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 17:04:46 +00:00
Frank Jogeleit
caab55e3d8 Merge pull request #132 from rgb2hsl/patch-1
Typo fix in README.md
2024-01-12 08:17:04 +01:00
Eugene
997aeb8de8 typo fix in README.md 2024-01-12 02:27:14 +04:00
Frank Jogeleit
0bd00a33db Merge pull request #131 from fjogeleit/node-upgrade
Upgrade to Node20
2024-01-08 14:43:30 +01:00
Frank Jogeleit
a665541d9c Upgrade to Node20
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2024-01-08 14:40:25 +01:00
Frank Jogeleit
e23645bd9b Merge pull request #128 from fjogeleit/dependabot/npm_and_yarn/axios-1.6.3
Bump axios from 1.6.2 to 1.6.3
2024-01-01 19:08:53 +01:00
dependabot[bot]
897543ff26 Bump axios from 1.6.2 to 1.6.3
Bumps [axios](https://github.com/axios/axios) from 1.6.2 to 1.6.3.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.6.2...v1.6.3)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 17:03:36 +00:00
Frank Jogeleit
3fee944184 Merge pull request #127 from fjogeleit/revert-conditional-stringify
revert conditional stringify which leads to breaking changes with older versions
2023-12-19 09:14:06 +01:00
Frank Jogeleit
c23f0d6631 revert conitional stringify which leads to breaking changes with older versions
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2023-12-19 09:12:54 +01:00
Frank Jogeleit
6dd87961de update readme
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2023-12-18 10:11:52 +01:00
Frank Jogeleit
d81c81a128 Merge pull request #124 from fjogeleit/response-mask
mask response as secret if configured
2023-12-18 10:09:48 +01:00
Frank Jogeleit
2d6a2f17dc mask response as secret if configured
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2023-12-17 15:41:37 +01:00
12 changed files with 1783 additions and 3706 deletions

View File

@@ -123,31 +123,21 @@ jobs:
- name: Create Test File
run: |
echo "test" > testfile1.txt
echo "test" > testfile2.txt
echo "test" > testfile.txt
- name: Request Postman Echo POST Multipart
uses: ./
with:
url: 'https://postman-echo.com/post'
method: 'POST'
data: '{ "key": "value" }'
files: '{ "file": "${{ github.workspace }}/testfile1.txt" }'
- name: Request Postman Echo POST Multipart File Array
uses: ./
with:
url: 'https://postman-echo.com/post'
method: 'POST'
data: '{ "key": "value" }'
files: '{ "file": ["${{ github.workspace }}/testfile1.txt", "${{ github.workspace }}/testfile2.txt"] }'
files: '{ "file": "${{ github.workspace }}/testfile.txt" }'
- name: Request Postman Echo POST and persist response
uses: ./
with:
url: 'https://postman-echo.com/post'
method: 'POST'
file: "${{ github.workspace }}/testfile1.txt"
file: "${{ github.workspace }}/testfile.txt"
responseFile: "${{ github.workspace }}/response.json"
- name: Output responseFile
run: |
@@ -158,14 +148,14 @@ jobs:
with:
url: 'https://postman-echo.com/post'
method: 'POST'
files: '{ "file": "${{ github.workspace }}/testfile1.txt" }'
files: '{ "file": "${{ github.workspace }}/testfile.txt" }'
- name: Request Postman Echo POST single file
uses: ./
with:
url: 'https://postman-echo.com/post'
method: 'POST'
file: "${{ github.workspace }}/testfile1.txt"
file: "${{ github.workspace }}/testfile.txt"
- name: Request Postman Echo POST URLEncoded string data
uses: ./

View File

@@ -45,8 +45,10 @@ jobs:
|httpsCert| Client Certificate as string ||
|httpsKey| Client Certificate Key as string ||
|responseFile| Persist the response data to the specified file path ||
|maskResponse| If set to true, the response will be masked in the logs of the action |'false'|
|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 |
|ignoreSsl| ignore ssl verify (rejectUnauthorized: false) | false |
### Response
@@ -99,4 +101,4 @@ Optionen:
--bearerToken bearer token without Bearer prefix, added as
Authorization header [string]
--timeout request timeout [number] [default: 5000]
```
```

View File

@@ -29,7 +29,7 @@ inputs:
description: 'Auth Password'
required: false
timeout:
description: 'Request Timeout in Sec'
description: 'Request Timeout in milliseconds'
required: false
default: '5000'
bearerToken:
@@ -59,17 +59,24 @@ inputs:
responseFile:
description: 'Persist the response data to the specified file path'
required: false
maskResponse:
description: 'Allows to mark your response as secret and hide the output in the action logs'
required: false
default: 'false'
retry:
description: 'optional amount of retries if the request fails'
required: false
retryWait:
description: 'wait time between retries in milliseconds'
required: false
ignoreSsl:
description: 'ignore ssl verify (rejectUnauthorized: false)'
default: 'false'
outputs:
response:
description: 'HTTP Response Content'
headers:
description: 'HTTP Response Headers'
runs:
using: 'node16'
using: 'node20'
main: 'dist/index.js'

2598
dist/index.js vendored

File diff suppressed because one or more lines are too long

2777
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -25,9 +25,7 @@
"yargs": "^17.7.2"
},
"dependencies": {
"@actions/core": "^1.10.1",
"install": "^0.13.0",
"npm": "^10.2.4"
"@actions/core": "^1.10.1"
},
"engines": {
"node": ">=16.0.0"

View File

@@ -19,6 +19,10 @@ class GithubActions {
core.setOutput(name, output)
}
setSecret(value) {
core.setSecret(value)
}
setFailed(message) {
core.setFailed(message)
}

15
src/handler/mask.js Normal file
View File

@@ -0,0 +1,15 @@
'use strict'
const axios = require('axios');
const { GithubActions } = require('../githubActions');
/**
* @param {GithubActions} actions
*
* @returns {(response: axios.AxiosResponse) => void}
*/
const createMaskHandler = (actions) => (response) => {
actions.setSecret(JSON.stringify(response.data))
}
module.exports = { createMaskHandler }

16
src/handler/output.js Normal file
View File

@@ -0,0 +1,16 @@
'use strict'
const axios = require('axios');
const { GithubActions } = require('../githubActions');
/**
* @param {GithubActions} actions
*
* @returns {(response: axios.AxiosResponse) => void}
*/
const createOutputHandler = (actions) => (response) => {
actions.setOutput('response', JSON.stringify(response.data))
actions.setOutput('headers', response.headers)
}
module.exports = { createOutputHandler }

View File

@@ -24,7 +24,7 @@ const convertToJSON = (value) => {
*
* @returns {FormData}
*/
const convertToFormData = async (data, files, convertPaths) => {
const convertToFormData = (data, files, convertPaths) => {
const formData = new FormData();
for (const [key, value] of Object.entries(data)) {
@@ -32,11 +32,7 @@ const convertToFormData = async (data, files, convertPaths) => {
}
for (const [key, value] of Object.entries(files)) {
if (Array.isArray(value)) {
value.forEach(v => formData.append(key, fs.createReadStream(v)))
} else {
formData.append(key, fs.createReadStream(value));
}
formData.append(key, fs.createReadStream(value));
}
return formData;
@@ -59,7 +55,7 @@ const retry = async (callback, options) => {
lastErr = err;
}
if (i < options.retries) {
if (i < options.retry) {
options.actions.warning(`#${i + 1} request failed: ${err}`);
await sleep(options.sleep);
}

View File

@@ -94,10 +94,10 @@ const request = async({ method, instanceConfig, data, files, file, actions, opti
} catch(error) {
if (error.response && options.ignoredCodes.includes(error.response.status)) {
actions.warning(`ignored status code: ${JSON.stringify({ code: error.response.status, message: error.response.data })}`)
return null
return error.response
}
if (!error.response && error.request && options.preventFailureOnNoResponse) {
actions.warning(`no response received: ${JSON.stringify(error)}`);
@@ -119,9 +119,6 @@ const request = async({ method, instanceConfig, data, files, file, actions, opti
return null
}
actions.setOutput('response', JSON.stringify(response.data))
actions.setOutput('headers', response.headers)
return response
} catch (error) {
if ((typeof error === 'object') && (error.isAxiosError === true)) {

View File

@@ -5,7 +5,10 @@ const axios = require('axios');
const https = require('https');
const { request, METHOD_POST } = require('./httpClient');
const { GithubActions } = require('./githubActions');
const { createPersistHandler } = require('./handler/persist');
const { createOutputHandler } = require('./handler/output');
const { createMaskHandler } = require('./handler/mask');
let customHeaders = {}
@@ -26,6 +29,9 @@ if (!!core.getInput('bearerToken')) {
/** @type {axios.AxiosRequestConfig} */
const instanceConfig = {
httpsAgent: new https.Agent({
rejectUnauthorized: core.getInput('ignoreSsl') !== 'true',
}),
baseURL: core.getInput('url', { required: true }),
timeout: parseInt(core.getInput('timeout') || 5000, 10),
headers: { ...headers, ...customHeaders }
@@ -55,7 +61,7 @@ if (!!core.getInput('retry')) {
let retryWait = 3000
if (!!core.getInput('retryWait')) {
retry = parseInt(core.getInput('retryWait'))
retryWait = parseInt(core.getInput('retryWait'))
}
const data = core.getInput('data') || '{}';
@@ -73,9 +79,16 @@ if (typeof ignoreStatusCodes === 'string' && ignoreStatusCodes.length > 0) {
ignoredCodes = ignoreStatusCodes.split(',').map(statusCode => parseInt(statusCode.trim()))
}
const handler = [];
const actions = new GithubActions();
const handler = [];
if (core.getBooleanInput('maskResponse')) {
handler.push(createMaskHandler(actions))
}
handler.push(createOutputHandler(actions))
if (!!responseFile) {
handler.push(createPersistHandler(responseFile, actions))
}
@@ -89,7 +102,7 @@ const options = {
}
request({ data, method, instanceConfig, files, file, actions, options }).then(response => {
if (typeof response == 'object') {
if (response && typeof response == 'object') {
handler.forEach(h => h(response))
}
})
})