如何在GitHub Actions中发送多行字符串JSON?

3

我正在使用GitHub actions,有一个情况需要将多行字符串作为JSON发送。我得到了一些意外的令牌错误。

这是我的test.md和工作流程:

---------------------------
  **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}}"}'

我遇到了一个意外的令牌错误。如何解决?

提前感谢。


你遇到了什么错误? - Shantanu Sharma
in JSON at position 43``` - lakshmiravali rimmalapudi
当我使用echo ${{steps.getLog.outputs.changeLog}}时,JSON会以多行打印,而没有转义字符。 - lakshmiravali rimmalapudi
1个回答

8

在提供的示例中,似乎存在两个问题。

  1. 你的字符串替换似乎是无效的。应该像这样:
run: |
  CHANGELOG=$(cat test.md)
  CHANGELOG="${CHANGELOG//'%'/'%25'}"
  CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
  CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
  echo "::set-output name=changeLog::$CHANGELOG"

你只是在构造无效的 json 对象。
inputs: '{ "changeLog": "${{steps.getLog.outputs.changeLog}}"}'

输出无效的 JSON:
{ "changeLog": "---------------------------
  **test**
  - update something
  - another (update)
  
  **test2**
  - Add `test` to param"}

为解决此问题,请使用上下文函数 toJSON()
inputs: '{ "changeLog": ${{ toJSON(steps.getLog.outputs.changeLog) }}}'

输出有效的 json:

{ "changeLog": "---------------------------\n  **test**\n  - update something\n  - another (update)\n  \n  **test2**\n  - Add `test` to param"}

编辑

我发布了一个小型的组合设置文本输出action,用于处理多行字符串。

- 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 }}"

@Andry,请随意在 https://github.com/mkungla/actions-set-text-output/issues 上提出问题,并附上失败的示例。这里的字符串替换适用于大多数标准格式良好的Markdown文件,但不处理任何边缘情况和其他转义序列。 - mkungla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接