我有这个运行测试的GitHub action文件,但是现在我在其中集成了松弛通知。我想获取Run tests
步骤的输出,并在松弛步骤中将其作为消息发送
- name: Run tests
run: |
mix compile --warnings-as-errors
mix format --check-formatted
mix ecto.create
mix ecto.migrate
mix test
env:
MIX_ENV: test
PGHOST: localhost
PGUSER: postgres
- name: Slack Notification
uses: rtCamp/action-slack-notify@master
env:
SLACK_MESSAGE: Run tests output
SLACK_TITLE: CI Test Suite
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
任何帮助将不胜感激。 谢谢
答案 0 :(得分:5)
当前 accepted answer 的问题在于该步骤的结果将始终是 success,因为测试执行结果被屏蔽了,但 echo
命令被屏蔽了。 >
对最后一行的修改应该可以保留原来的退出状态:
mix test 2>&1 | tee test.log
result_code=${PIPESTATUS[0]}
echo "::set-output name=mix-test::$(cat test.log)"
exit $result_code
答案 1 :(得分:2)
我只是想添加@ smac89的解决方案很有帮助,但对我而言并不奏效。我正在使用其他Slack操作(pullreminders/slack-action
)来构建更具体的内容。我发现在每个换行符所在的位置都得到了单引号,并且每行上的前导空格也被截断了。读完https://github.com/actions/toolkit/issues/403并反复试验之后,我发现我需要在输出中实际换行(文字\n
),因此我将\n
字符替换为{{ 1}}。然后,我用Unicode'En Space'字符替换了常规空格字符。
这是有效的方法:
Bash运行步骤:
\\n
松弛通知步骤:
Tools/get-changed-fields.sh src/objects origin/${{ env.DIFF_BRANCH }} > changed-fields.out
output="$(cat changed-fields.out)"
output="${output//$'\n'/\\n}"
output="${output// / }" # replace regular space with 'En Space'
echo "::set-output name=changed-fields-output::$output"
答案 2 :(得分:0)
您需要做三件事:
id
set-output
命令创建输出- name: Run tests
run: |
echo "::set-output name=mix-compile--warnings-as-errors::$(mix compile --warnings-as-errors)\n"
echo "::set-output name=mix-format--check-formatted::$(mix format --check-formatted)\n"
echo "::set-output name=mix-ecto_create::$(mix ecto.create)\n"
echo "::set-output name=mix-ecto_migrate::$(mix ecto.migrate)\n"
echo "::set-output name=mix-test::$(mix test)\n"
id: run_tests
env:
MIX_ENV: test
PGHOST: localhost
PGUSER: postgres
- name: Slack Notification
uses: rtCamp/action-slack-notify@master
env:
SLACK_MESSAGE: ${{join(steps.run_tests.outputs.*, '\n')}}
SLACK_TITLE: CI Test Suite
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
有关输出名称的说明,请参见Metadata Syntax