Skip to content

Latest commit

Β 

History

History
103 lines (73 loc) Β· 2.68 KB

README.md

File metadata and controls

103 lines (73 loc) Β· 2.68 KB

Command Result Action

This is a reusable action for GitHub Actions. This action just runs a single command and captures the outputs. Easy to use and useful to capture multi-line outputs.

Motivation

The way to capture a command's multi-line standard output / error is not intuitive on GitHub Actions.

Usage

Use this action gh640/command-result-action in your workflow with command input.

uses: gh640/command-result-action@v1
with:
  command: npm outdated
id: myaction

You can optionally change the working directory by passing cwd as input:

uses: gh640/command-result-action@v1
with:
  command: npm outdated
  cwd: ./src
id: myaction

You can use the output in subsequent steps. In the above case, the following variables are available:

  • ${{ steps.myaction.outputs.exitCode }}
  • ${{ steps.myaction.outputs.stdout }}
  • ${{ steps.myaction.outputs.stderr }}

Available inputs

name required description
command βœ“ Command to run
cwd Working directory

Available outputs

name description
exitCode Exit code of the command
stdout Stdout of the command
stderr Stderr of the command

Migrating from a standard run command

Change this

run: npm outdated
working-directory: ./src
id: myaction

to

uses: gh640/command-result-action@v1
with:
  command: npm outdated
  cwd: ./src
id: myaction

Please keep in mind that the run will not fail and subsequent steps will be executed even if the command exit code is not 0 when using gh640/command-result-action.

Different approaches to capture standard output / error

actions/github-script action

This action uses @actions/exec and @actions/core. The behavior of this action is almost same as one of the following action with actions/github-script:

uses: actions/github-script@v6
with:
  script: |
    const result = await exec.getExecOutput('npm outdated', [], {
      ignoreReturnCode: true,
    })
    core.setOutput('exitCode', result.exitCode)
    core.setOutput('stdout', result.stdout)
    core.setOutput('stderr', result.stderr)
id: myaction

Working Example

Questions

Can I execute multiple commands with this action?

No. This action supports only one command.