mirror of
https://github.com/actions/runner-container-hooks.git
synced 2025-12-14 16:46:43 +00:00
repaired docker PATH export and added tests both for docker and k8s (#17)
* repaired docker PATH export and added tests both for docker and k8s * added todo comments about next major version and typeof prepend path
This commit is contained in:
@@ -274,6 +274,20 @@ export async function containerPorts(id: string): Promise<string[]> {
|
|||||||
return portMappings.split('\n').filter(p => !!p)
|
return portMappings.split('\n').filter(p => !!p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getContainerEnvValue(
|
||||||
|
id: string,
|
||||||
|
name: string
|
||||||
|
): Promise<string> {
|
||||||
|
const dockerArgs = [
|
||||||
|
'inspect',
|
||||||
|
`--format='{{range $index, $value := .Config.Env}}{{if eq (index (split $value "=") 0) "${name}"}}{{index (split $value "=") 1}}{{end}}{{end}}'`,
|
||||||
|
id
|
||||||
|
]
|
||||||
|
const value = (await runDockerCommand(dockerArgs)).trim()
|
||||||
|
const lines = value.split('\n')
|
||||||
|
return lines.length ? lines[0].replace(/^'/, '').replace(/'$/, '') : ''
|
||||||
|
}
|
||||||
|
|
||||||
export async function registryLogin(registry?: Registry): Promise<string> {
|
export async function registryLogin(registry?: Registry): Promise<string> {
|
||||||
if (!registry) {
|
if (!registry) {
|
||||||
return ''
|
return ''
|
||||||
@@ -346,7 +360,16 @@ export async function containerExecStep(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (args.prependPath?.length) {
|
if (args.prependPath?.length) {
|
||||||
dockerArgs.push('-e', `"PATH=${args.prependPath.join(':')}:$PATH"`)
|
// TODO: remove compatibility with typeof prependPath === 'string' as we bump to next major version, the hooks will lose PrependPath compat with runners 2.293.0 and older
|
||||||
|
const prependPath =
|
||||||
|
typeof args.prependPath === 'string'
|
||||||
|
? args.prependPath
|
||||||
|
: args.prependPath.join(':')
|
||||||
|
|
||||||
|
dockerArgs.push(
|
||||||
|
'-e',
|
||||||
|
`PATH=${prependPath}:${await getContainerEnvValue(containerId, 'PATH')}`
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
dockerArgs.push(containerId)
|
dockerArgs.push(containerId)
|
||||||
|
|||||||
@@ -34,4 +34,28 @@ describe('run script step', () => {
|
|||||||
runScriptStep(definitions.runScriptStep.args, prepareJobResponse.state)
|
runScriptStep(definitions.runScriptStep.args, prepareJobResponse.state)
|
||||||
).resolves.not.toThrow()
|
).resolves.not.toThrow()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Should have path variable changed in container with prepend path string', async () => {
|
||||||
|
definitions.runScriptStep.args.prependPath = '/some/path'
|
||||||
|
definitions.runScriptStep.args.entryPoint = '/bin/bash'
|
||||||
|
definitions.runScriptStep.args.entryPointArgs = [
|
||||||
|
'-c',
|
||||||
|
`if [[ ! $(env | grep "^PATH=") = "PATH=${definitions.runScriptStep.args.prependPath}:"* ]]; then exit 1; fi`
|
||||||
|
]
|
||||||
|
await expect(
|
||||||
|
runScriptStep(definitions.runScriptStep.args, prepareJobResponse.state)
|
||||||
|
).resolves.not.toThrow()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Should have path variable changed in container with prepend path string array', async () => {
|
||||||
|
definitions.runScriptStep.args.prependPath = ['/some/other/path']
|
||||||
|
definitions.runScriptStep.args.entryPoint = '/bin/bash'
|
||||||
|
definitions.runScriptStep.args.entryPointArgs = [
|
||||||
|
'-c',
|
||||||
|
`if [[ ! $(env | grep "^PATH=") = "PATH=${definitions.runScriptStep.args.prependPath}:"* ]]; then exit 1; fi`
|
||||||
|
]
|
||||||
|
await expect(
|
||||||
|
runScriptStep(definitions.runScriptStep.args, prepareJobResponse.state)
|
||||||
|
).resolves.not.toThrow()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -100,7 +100,10 @@ export function writeEntryPointScript(
|
|||||||
): { containerPath: string; runnerPath: string } {
|
): { containerPath: string; runnerPath: string } {
|
||||||
let exportPath = ''
|
let exportPath = ''
|
||||||
if (prependPath?.length) {
|
if (prependPath?.length) {
|
||||||
exportPath = `export PATH=${prependPath.join(':')}:$PATH`
|
// TODO: remove compatibility with typeof prependPath === 'string' as we bump to next major version, the hooks will lose PrependPath compat with runners 2.293.0 and older
|
||||||
|
const prepend =
|
||||||
|
typeof prependPath === 'string' ? prependPath : prependPath.join(':')
|
||||||
|
exportPath = `export PATH=${prepend}:$PATH`
|
||||||
}
|
}
|
||||||
let environmentPrefix = ''
|
let environmentPrefix = ''
|
||||||
|
|
||||||
|
|||||||
@@ -71,4 +71,38 @@ describe('Run script step', () => {
|
|||||||
)
|
)
|
||||||
).resolves.not.toThrow()
|
).resolves.not.toThrow()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Should have path variable changed in container with prepend path string', async () => {
|
||||||
|
runScriptStepDefinition.args.prependPath = '/some/path'
|
||||||
|
runScriptStepDefinition.args.entryPoint = '/bin/bash'
|
||||||
|
runScriptStepDefinition.args.entryPointArgs = [
|
||||||
|
'-c',
|
||||||
|
`'if [[ ! $(env | grep "^PATH=") = "PATH=${runScriptStepDefinition.args.prependPath}:"* ]]; then exit 1; fi'`
|
||||||
|
]
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
runScriptStep(
|
||||||
|
runScriptStepDefinition.args,
|
||||||
|
prepareJobOutputData.state,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
).resolves.not.toThrow()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Should have path variable changed in container with prepend path string array', async () => {
|
||||||
|
runScriptStepDefinition.args.prependPath = ['/some/other/path']
|
||||||
|
runScriptStepDefinition.args.entryPoint = '/bin/bash'
|
||||||
|
runScriptStepDefinition.args.entryPointArgs = [
|
||||||
|
'-c',
|
||||||
|
`'if [[ ! $(env | grep "^PATH=") = "PATH=${runScriptStepDefinition.args.prependPath}:"* ]]; then exit 1; fi'`
|
||||||
|
]
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
runScriptStep(
|
||||||
|
runScriptStepDefinition.args,
|
||||||
|
prepareJobOutputData.state,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
).resolves.not.toThrow()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user