Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get output of a specific step in github actions

I have this GitHub Actions workflow which runs tests, but now I am integrating slack notification in it. I want to get the output of the Run tests step and send it as a message in the slack step.

  - 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 }} 
like image 614
script Avatar asked Dec 05 '19 09:12

script


People also ask

How do I get the output of the step in GitHub Actions?

GitHub Actions has a workflow command called set-output . This can be used to capture the output from a shell command in step. That output value can then be used in a later step. A useful example of this is reading the version of a tool from a dot-file to tell a later step what version of that tool to install.

How do I echo variables in GitHub Actions?

You should use run: echo "$GITHUB. REPOSITORY" and run: echo "$GITHUB. REPOSITORY_OWNER" to see them directly on your workflow. Tip: You can identify most of the variables that can be shown with echo through the Github Context using run: echo "$GITHUB_CONTEXT" in your workflow.

What is actions checkout in GitHub Actions?

This action checks-out your repository under $GITHUB_WORKSPACE , so your workflow can access it. Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set fetch-depth: 0 to fetch all history for all branches and tags.


1 Answers

You need to do 3 things:

  1. Add an id to the step you want the output from
  2. Create the outputs using the set-output command
  3. Use the id and the output name in another step to get the outputs and then join them into one message for slack
- 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@v2   env:     SLACK_MESSAGE: ${{join(steps.run_tests.outputs.*, '\n')}}     SLACK_TITLE: CI Test Suite     SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} 

See Metadata Syntax for outputs name description

like image 51
smac89 Avatar answered Sep 20 '22 15:09

smac89