mirror of
https://github.com/actions/runner-container-hooks.git
synced 2026-01-22 02:50:57 +08:00
Compare commits
1 Commits
main
...
d7e1abe6cb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7e1abe6cb |
28
.github/dependabot.yml
vendored
28
.github/dependabot.yml
vendored
@@ -1,28 +0,0 @@
|
|||||||
version: 2
|
|
||||||
|
|
||||||
updates:
|
|
||||||
# Group updates into a single PR per workspace package
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directory: "/packages/docker"
|
|
||||||
schedule:
|
|
||||||
interval: weekly
|
|
||||||
groups:
|
|
||||||
all-dependencies:
|
|
||||||
patterns:
|
|
||||||
- "*"
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directory: "/packages/hooklib"
|
|
||||||
schedule:
|
|
||||||
interval: weekly
|
|
||||||
groups:
|
|
||||||
all-dependencies:
|
|
||||||
patterns:
|
|
||||||
- "*"
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directory: "/packages/k8s"
|
|
||||||
schedule:
|
|
||||||
interval: weekly
|
|
||||||
groups:
|
|
||||||
all-dependencies:
|
|
||||||
patterns:
|
|
||||||
- "*"
|
|
||||||
6
package-lock.json
generated
6
package-lock.json
generated
@@ -3165,9 +3165,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/js-yaml": {
|
"node_modules/js-yaml": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
||||||
"integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
|
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"argparse": "^2.0.1"
|
"argparse": "^2.0.1"
|
||||||
|
|||||||
1199
packages/docker/package-lock.json
generated
1199
packages/docker/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -13,8 +13,8 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^2.0.2",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/exec": "^2.0.0",
|
"@actions/exec": "^1.1.1",
|
||||||
"hooklib": "file:../hooklib",
|
"hooklib": "file:../hooklib",
|
||||||
"shlex": "^3.0.0",
|
"shlex": "^3.0.0",
|
||||||
"uuid": "^11.1.0"
|
"uuid": "^11.1.0"
|
||||||
|
|||||||
668
packages/hooklib/package-lock.json
generated
668
packages/hooklib/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -22,6 +22,6 @@
|
|||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^2.0.2"
|
"@actions/core": "^1.11.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
913
packages/k8s/package-lock.json
generated
913
packages/k8s/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -13,9 +13,9 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^2.0.2",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/exec": "^2.0.0",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/io": "^2.0.0",
|
"@actions/io": "^1.1.3",
|
||||||
"@kubernetes/client-node": "^1.3.0",
|
"@kubernetes/client-node": "^1.3.0",
|
||||||
"hooklib": "file:../hooklib",
|
"hooklib": "file:../hooklib",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
|
|||||||
@@ -23,52 +23,25 @@ export async function runScriptStep(
|
|||||||
)
|
)
|
||||||
|
|
||||||
const workdir = dirname(process.env.RUNNER_WORKSPACE as string)
|
const workdir = dirname(process.env.RUNNER_WORKSPACE as string)
|
||||||
const runnerTemp = `${workdir}/_temp`
|
|
||||||
const containerTemp = '/__w/_temp'
|
const containerTemp = '/__w/_temp'
|
||||||
const containerTempSrc = '/__w/_temp_pre'
|
const runnerTemp = `${workdir}/_temp`
|
||||||
// Ensure base and staging dirs exist before copying
|
await execCpToPod(state.jobPod, runnerTemp, containerTemp)
|
||||||
await execPodStep(
|
|
||||||
[
|
|
||||||
'sh',
|
|
||||||
'-c',
|
|
||||||
'mkdir -p /__w && mkdir -p /__w/_temp && mkdir -p /__w/_temp_pre'
|
|
||||||
],
|
|
||||||
state.jobPod,
|
|
||||||
JOB_CONTAINER_NAME
|
|
||||||
)
|
|
||||||
await execCpToPod(state.jobPod, runnerTemp, containerTempSrc)
|
|
||||||
|
|
||||||
// Copy GitHub directories from temp to /github
|
// Copy GitHub directories from temp to /github
|
||||||
// Merge strategy:
|
const setupCommands = [
|
||||||
// - Overwrite files in _runner_file_commands
|
'mkdir -p /github',
|
||||||
// - Append files not already present elsewhere
|
'cp -r /__w/_temp/_github_home /github/home',
|
||||||
const mergeCommands = [
|
'cp -r /__w/_temp/_github_workflow /github/workflow'
|
||||||
'set -e',
|
|
||||||
'mkdir -p /__w/_temp /__w/_temp_pre',
|
|
||||||
'SRC=/__w/_temp_pre',
|
|
||||||
'DST=/__w/_temp',
|
|
||||||
// Overwrite _runner_file_commands
|
|
||||||
'cp -a "$SRC/_runner_file_commands/." "$DST/_runner_file_commands"',
|
|
||||||
`find "$SRC" -type f ! -path "*/_runner_file_commands/*" -exec sh -c '
|
|
||||||
rel="\${1#$2/}"
|
|
||||||
target="$3/$rel"
|
|
||||||
mkdir -p "$(dirname "$target")"
|
|
||||||
cp -a "$1" "$target"
|
|
||||||
' _ {} "$SRC" "$DST" \\;`,
|
|
||||||
// Remove _temp_pre after merging
|
|
||||||
'rm -rf /__w/_temp_pre'
|
|
||||||
]
|
]
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await execPodStep(
|
await execPodStep(
|
||||||
['sh', '-c', mergeCommands.join(' && ')],
|
['sh', '-c', shlex.quote(setupCommands.join(' && '))],
|
||||||
state.jobPod,
|
state.jobPod,
|
||||||
JOB_CONTAINER_NAME
|
JOB_CONTAINER_NAME
|
||||||
)
|
)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
core.debug(`Failed to merge temp directories: ${JSON.stringify(err)}`)
|
core.debug(`Failed to copy GitHub directories: ${JSON.stringify(err)}`)
|
||||||
const message = (err as any)?.response?.body?.message || err
|
|
||||||
throw new Error(`failed to merge temp dirs: ${message}`)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute the entrypoint script
|
// Execute the entrypoint script
|
||||||
@@ -99,7 +72,7 @@ export async function runScriptStep(
|
|||||||
await execCpFromPod(
|
await execCpFromPod(
|
||||||
state.jobPod,
|
state.jobPod,
|
||||||
`${containerTemp}/_runner_file_commands`,
|
`${containerTemp}/_runner_file_commands`,
|
||||||
`${workdir}/_temp`
|
`${runnerTemp}`
|
||||||
)
|
)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.warning('Failed to copy _temp from pod')
|
core.warning('Failed to copy _temp from pod')
|
||||||
|
|||||||
@@ -831,7 +831,7 @@ export async function isPodContainerAlpine(
|
|||||||
[
|
[
|
||||||
'sh',
|
'sh',
|
||||||
'-c',
|
'-c',
|
||||||
`[ $(cat /etc/*release* | grep -i -e "^ID=*alpine*" -c) != 0 ] || exit 1`
|
`'[ $(cat /etc/*release* | grep -i -e "^ID=*alpine*" -c) != 0 ] || exit 1'`
|
||||||
],
|
],
|
||||||
podName,
|
podName,
|
||||||
containerName
|
containerName
|
||||||
|
|||||||
@@ -288,11 +288,6 @@ function mergeLists<T>(base?: T[], from?: T[]): T[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function fixArgs(args: string[]): string[] {
|
export function fixArgs(args: string[]): string[] {
|
||||||
// Preserve shell command strings passed via `sh -c` without re-tokenizing.
|
|
||||||
// Retokenizing would split the script into multiple args, breaking `sh -c`.
|
|
||||||
if (args.length >= 2 && args[0] === 'sh' && args[1] === '-c') {
|
|
||||||
return args
|
|
||||||
}
|
|
||||||
return shlex.split(args.join(' '))
|
return shlex.split(args.join(' '))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ describe('Prepare job', () => {
|
|||||||
process.env.GITHUB_WORKSPACE as string,
|
process.env.GITHUB_WORKSPACE as string,
|
||||||
'myvolume'
|
'myvolume'
|
||||||
)
|
)
|
||||||
fs.mkdirSync(userVolumeMount, { recursive: true })
|
fs.mkdirSync(userVolumeMount)
|
||||||
fs.writeFileSync(path.join(userVolumeMount, 'file.txt'), 'hello')
|
fs.writeFileSync(path.join(userVolumeMount, 'file.txt'), 'hello')
|
||||||
prepareJobData.args.container.userMountVolumes = [
|
prepareJobData.args.container.userMountVolumes = [
|
||||||
{
|
{
|
||||||
@@ -63,7 +63,11 @@ describe('Prepare job', () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
await execPodStep(
|
await execPodStep(
|
||||||
['sh', '-c', '[ "$(cat /__w/myvolume/file.txt)" = "hello" ] || exit 5'],
|
[
|
||||||
|
'sh',
|
||||||
|
'-c',
|
||||||
|
'\'[ "$(cat /__w/myvolume/file.txt)" = "hello" ] || exit 5\''
|
||||||
|
],
|
||||||
content!.state!.jobPod,
|
content!.state!.jobPod,
|
||||||
JOB_CONTAINER_NAME
|
JOB_CONTAINER_NAME
|
||||||
).then(output => {
|
).then(output => {
|
||||||
|
|||||||
Reference in New Issue
Block a user