如何在 GitHub actions 中发送 json 中的多行字符串?

lak*_*udi 3 string github-actions

我正在处理 GitHub actions,并且有一个情况需要将多行字符串作为 json 发送。我收到一些意外的令牌错误。

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

---------------------------
  **test**
  - update something
  - another (update)
  
  **test2**
  - Add `test` to param
  
Run Code Online (Sandbox Code Playgroud)
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}}"}'

Run Code Online (Sandbox Code Playgroud)

我收到意外的令牌错误。怎么解决这个问题?

提前致谢

mku*_*gla 9

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

  1. 您的字符串替换似乎无效。那应该是这样的。
run: |
  CHANGELOG=$(cat test.md)
  CHANGELOG="${CHANGELOG//'%'/'%25'}"
  CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
  CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
  echo "::set-output name=changeLog::$CHANGELOG"
Run Code Online (Sandbox Code Playgroud)
  1. 您只是json为对象撰写无效内容。
inputs: '{ "changeLog": "${{steps.getLog.outputs.changeLog}}"}'
Run Code Online (Sandbox Code Playgroud)

输出无效的 json:

inputs: '{ "changeLog": "${{steps.getLog.outputs.changeLog}}"}'
Run Code Online (Sandbox Code Playgroud)

要修复此问题,请使用Context 函数toJSON()

{ "changeLog": "---------------------------
  **test**
  - update something
  - another (update)
  
  **test2**
  - Add `test` to param"}
Run Code Online (Sandbox Code Playgroud)

输出有效的 json:

inputs: '{ "changeLog": ${{ toJSON(steps.getLog.outputs.changeLog) }}}'
Run Code Online (Sandbox Code Playgroud)

编辑

我发布了小型复合集文本输出操作来处理多行字符串。

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