【问题标题】:How to trigger Github Action's workflow dispatch event through curl with string input in json format如何通过带有 json 格式字符串输入的 curl 触发 Github Action 的工作流调度事件
【发布时间】:2023-01-31 00:39:01
【问题描述】:

我在 Github Actions 中有一个带有 workflow_dispatch 事件触发器的工作流。我希望以 json 格式输入字符串。工作流的 yml 看起来像这样:

name: Json parse test

on:
  workflow_dispatch:
    inputs:
      parameters_json:
        type: string
        required: true

jobs:
  build_and_deploy:
    name: Json parse test
    runs-on: ubuntu-latest
    steps:
      - name: Parse json input
        id: json
        run: |
          echo ${{ fromJson(github.event.inputs.parameters_json).targetPlatform }}

我想通过带有 curl 的请求来触发这个工作流,就像它描述的那样 here

当我通过 Github 的网页手动运行工作流程时,它运行良好。

我的问题是当我尝试通过 curl 请求触发工作流时

curl -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer <my token>" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/\<owner >/<my repo>/actions/workflows/json_parse_test.yml/dispatches -d '{"ref":"dev","inputs":{"parameters_json":"{"targetPlatform":"asd","param" :45}"}}'

它抛出以下错误并且工作流不运行

{
  "message": "Problems parsing JSON",
  "documentation_url": "https://docs.github.com/rest/reference/actions#create-a-workflow-dispatch-event"
}

如果我传递一个普通字符串(没有 json 格式,例如“something”)作为输入,工作流将按预期触发,即 curl 代码没有问题。

所以,我的问题是:是否有任何语法可以发送 json 格式的字符串输入来解决这个解析问题?

提前致谢。

【问题讨论】:

  • 您是否尝试转义嵌套的 JSON?示例:jqplay.org/s/2XujtIp-ySN
  • 我强烈建议为此使用 GitHub CLI; gh workflow run 允许您传递参数并帮助转义。
  • @Azeem 非常感谢,解决了我的问题。我会将其添加为答案。
  • @Miguel:不客气!当然。此外,正如上面在 cmet 中提到的,您可能希望更频繁地使用 GitHub CLI。它在这些情况下非常方便。
  • @本杰明W。是的,GitHub CLI 也能正常工作,但我将其用作其他用户将使用的工具的一部分。这将需要他们安装 GitHub CLI,而我正在努力避免。也谢谢你。

标签: json curl github-actions


【解决方案1】:

感谢@Azeem 在问题的 cmets 中回答了这个问题。

要解决此问题,您应该转义嵌套 json 输入中的双引号。

“输入”:{“parameters_json”:“{”targetPlatform“:”asd“,”param“:45}”

导致卷曲代码:

curl -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer <my token>" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/<owner>/<my repo>/actions/workflows/json_parse_test.yml/dispatches -d '{"ref":"dev","inputs":{"parameters_json":"{"targetPlatform":"asd","param":45}"}}'

【讨论】:

    猜你喜欢
    • 2022-12-03
    • 2021-10-20
    • 2020-01-18
    • 2021-07-23
    • 2020-01-23
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多