diff --git a/action.yml b/action.yml index 599fbceb..d86b0b7b 100644 --- a/action.yml +++ b/action.yml @@ -17,6 +17,11 @@ inputs: use-cross: description: Use cross instead of cargo default: false +outputs: + stdout: + description: Standard out of the program + stderr: + description: Standard err of the program runs: using: 'node12' diff --git a/src/main.ts b/src/main.ts index 0e68de4a..244164c9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,7 +5,9 @@ import * as core from "@actions/core"; import * as input from "./input"; import { Cargo, Cross } from "@actions-rs/core"; -export async function run(actionInput: input.Input): Promise { +export async function run( + actionInput: input.Input +): Promise<{ code: number; stdout: string; stderr: string }> { let program; if (actionInput.useCross) { program = await Cross.getOrInstall(); @@ -20,7 +22,23 @@ export async function run(actionInput: input.Input): Promise { args.push(actionInput.command); args = args.concat(actionInput.args); - await program.call(args); + let stdout = ""; + let stderr = ""; + + const options = { + listeners: { + stdout: (data: Buffer) => { + stdout += data.toString(); + }, + stderr: (data: Buffer) => { + stderr += data.toString(); + }, + }, + }; + + const code = await program.call(args, options); + + return { code, stdout, stderr }; } async function main(): Promise { @@ -30,7 +48,13 @@ async function main(): Promise { const actionInput = input.get(); try { - await run(actionInput); + const { stdout, stderr } = await run(actionInput); + core.startGroup("setting outputs"); + console.log("stdout: ", stdout.slice(0, 50), "..."); + core.setOutput("stdout", stdout); + console.log("stderr: ", stderr.slice(0, 50), "..."); + core.setOutput("stderr", stderr); + core.endGroup(); } catch (error) { core.setFailed((error).message); }