【发布时间】:2022-11-10 08:34:52
【问题描述】:
因此,我正在与 Github Actions 合作进行端到端测试。我正在查看的设置是让一项工作检索要测试的 url 列表,而我的第二项工作使用该列表创建一个矩阵并对其进行全部测试。我的问题是,当我实际运行我的测试脚本时,必须从命令行完成,因为我使用的是 Playwright。因此我不能直接使用我的矩阵对象;我必须将其输出到 JSON 文件。问题是当我将 toJSON 输出到我的文件时,它会创建无效的漂亮打印 JSON,这会破坏我的脚本。这是我的代码:
name: <name>
on:
push:
workflow_dispatch:
jobs:
fetch_strategic_urls:
runs-on: ubuntu-latest
outputs:
urls: ${{ steps.req-urls.outputs.urls }}
steps:
- name: Request Urls
id: req-urls
run: |
export RESPONSE=$(
curl -X GET -H "Accept: application/json" <api-endpoint>)
echo "::set-output name=urls::$RESPONSE"
run_tests:
runs-on: ubuntu-latest
strategy:
matrix:
url: ${{needs.fetch_strategic_urls.outputs.urls}}
needs: fetch_strategic_urls
steps:
- ...
- ...
- run: |
ls
echo '${{ toJSON(matrix.url) }}' >> props.json
cat props.json
npm test
working-directory: E2E.Tests
无论我尝试过echo ${{matrix.url}} >> props.json的哪种配置(cat <<'EOF' > props.json ${{matrix.url}},添加和删除引号),它总是生成没有引号的JSON文件,即:{ url: string }而不是{"url": "string"},这是无效的。这显然是非常破坏性的行为。我在网上看到很多人推荐 jq,但我不知道在这种情况下我会如何使用它,因为我怀疑 jq 是否可以解析 GitHub 类型的 JSON 对象,这是我在分片时使用的必要条件工作。任何帮助是极大的赞赏!
【问题讨论】:
-
请不要只粘贴整个 YAML,而是创建一个 minimal reproducer
标签: json bash yaml github-actions jsonparser