Reputation: 533
I am working on GitHub actions, and I have a case where I need to send a multiline string as json. I am getting some unexpected token error.
This is my test.md and workflow:
---------------------------
**test**
- update something
- another (update)
**test2**
- Add `test` to param
steps:
- uses: actions/checkout@v2
- name: Get Log
id: getLog
run: |
CHANGELOG="$(cat test.md)"
CHANGELOG="$($CHANGELOG//'%'/'%25')"
CHANGELOG="$($CHANGELOG//$'\n'/'%0A')"
CHANGELOG="$($CHANGELOG//$'\r'/'%0D')"
echo "::set-output name=changeLog::$CHANGELOG"
- name: Invoke CLI workflow with changelog
uses: benc-uk/workflow-dispatch@v1
with:
workflow: Workflow publish
token: ${{ secrets.TOKEN }}
repo: repo/name
inputs: '{ "changeLog": "${{steps.getLog.outputs.changeLog}}"}'
I am getting an unexpected token error. How solve this?
Thanks in advance
Upvotes: 3
Views: 12798
Reputation: 3558
There seem to be 2 issues you have in provided example.
run: |
CHANGELOG=$(cat test.md)
CHANGELOG="${CHANGELOG//'%'/'%25'}"
CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
echo "::set-output name=changeLog::$CHANGELOG"
json
for object.inputs: '{ "changeLog": "${{steps.getLog.outputs.changeLog}}"}'
which outputs invalid json:
{ "changeLog": "---------------------------
**test**
- update something
- another (update)
**test2**
- Add `test` to param"}
to fix this use Context function toJSON()
inputs: '{ "changeLog": ${{ toJSON(steps.getLog.outputs.changeLog) }}}'
which outputs valid json:
{ "changeLog": "---------------------------\n **test**\n - update something\n - another (update)\n \n **test2**\n - Add `test` to param"}
EDIT
I released small composite Set text output action to handle multi-line strings.
- uses: actions/checkout@v2
- name: test changelog
uses: mkungla/actions-set-text-output@v1
id: get-changekog
with:
text: $(cat tests/test-changelog.md)
- run: echo "${{ steps.get-changekog.outputs.value }}"
Upvotes: 9