1
0
Fork 0

add support for using a shell to run commands

pull/285/head
Alex Kalyvitis 2020-01-06 14:41:57 +01:00
parent bfd29dcef8
commit 654dba3681
3 changed files with 81 additions and 60 deletions

View File

@ -153,6 +153,23 @@ describe('@actions/exec', () => {
expect(output.trim()).toBe(`hello`)
})
it('Runs exec successfully with shell wildcard substitution', async () => {
let tool: string
let args: string[]
let opts: im.ExecOptions
if (IS_WINDOWS) {
tool = 'cmd'
args = ['/c', 'echo', 'hello']
opts = {shell: process.env.ComSpec}
} else {
tool = 'ls'
args = ['-l', '*.md']
opts = {shell: '/bin/sh'}
}
const exitCode = await exec.exec(tool, args, opts)
expect(exitCode).toBe(0)
})
it('Exec fails with error on bad call', async () => {
const _testExecOptions = getExecOptions()
@ -286,7 +303,7 @@ describe('@actions/exec', () => {
expect(stderrCalled).toBeTruthy()
})
it('Handles child process holding streams open', async function() {
it('Handles child process holding streams open', async function () {
const semaphorePath = path.join(
getTestTemp(),
'child-process-semaphore.txt'
@ -332,7 +349,7 @@ describe('@actions/exec', () => {
fs.unlinkSync(semaphorePath)
}, 10000) // this was timing out on some slower hosted macOS runs at default 5s
it('Handles child process holding streams open and non-zero exit code', async function() {
it('Handles child process holding streams open and non-zero exit code', async function () {
const semaphorePath = path.join(
getTestTemp(),
'child-process-semaphore.txt'
@ -386,7 +403,7 @@ describe('@actions/exec', () => {
fs.unlinkSync(semaphorePath)
}, 10000) // this was timing out on some slower hosted macOS runs at default 5s
it('Handles child process holding streams open and stderr', async function() {
it('Handles child process holding streams open and stderr', async function () {
const semaphorePath = path.join(
getTestTemp(),
'child-process-semaphore.txt'

View File

@ -12,6 +12,9 @@ export interface ExecOptions {
/** optional. defaults to false */
silent?: boolean
/** optional. Runs command inside of a shell. A different shell can be specified as a string. Defaults to false */
shell?: boolean | string
/** optional out stream to use. Defaults to process.stdout */
outStream?: stream.Writable

View File

@ -377,6 +377,7 @@ export class ToolRunner extends events.EventEmitter {
const result = <child.SpawnOptions>{}
result.cwd = options.cwd
result.env = options.env
result.shell = options.shell
result['windowsVerbatimArguments'] =
options.windowsVerbatimArguments || this._isCmdFile()
if (options.windowsVerbatimArguments) {