所以,我正在使用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对象,这是我在分片作业时必须使用的。任何帮助都非常感谢!
3条答案
按热度按时间5m1hhzi41#
直接在命令行中放置JSON文档并不容易。您可以使用env vars。
字符串
z9zf31ra2#
Github动作文档在这里有一个解决方案:
字符串
来自https://docs.github.com/en/actions/learn-github-actions/contexts#example-printing-context-information-to-the-log
vatpfxk53#
这不是一个答案,甚至不是一个尝试,更多的是一个地方张贴有关生长激素的行动奇怪。
我想我已经解决了上面的问题:
字符串
它工作得很好,直到我合并到main,默认的分支,这时它生成了这个错误:
型
尽管那个冒犯性的语句(
${{ toJson(github) }}
)不在第58行附近。请注意,这甚至不能作为一个评论:
型
因为这仍然会使作业失败,显然是因为
github
对象中的某些东西,而这些东西只存在于默认的分支中。我所能想到的是,从
toJSON()
返回的字符串并不总是正确转义的,因此它破坏了YAML解析器从操作yaml中提取法律的shell脚本的能力。