mirror of
https://github.com/actions/runner-container-hooks.git
synced 2025-12-14 08:36:45 +00:00
Merge pull request #3 from actions/nikola-jokic/docker-label-cleanup
Cleanup now looks at the containers by the label, and not by the state
This commit is contained in:
@@ -171,6 +171,18 @@ export async function containerNetworkRemove(network: string): Promise<void> {
|
|||||||
await runDockerCommand(dockerArgs)
|
await runDockerCommand(dockerArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function containerNetworkPrune(): Promise<void> {
|
||||||
|
const dockerArgs = [
|
||||||
|
'network',
|
||||||
|
'prune',
|
||||||
|
'--force',
|
||||||
|
'--filter',
|
||||||
|
`label=${getRunnerLabel()}`
|
||||||
|
]
|
||||||
|
|
||||||
|
await runDockerCommand(dockerArgs)
|
||||||
|
}
|
||||||
|
|
||||||
export async function containerPrune(): Promise<void> {
|
export async function containerPrune(): Promise<void> {
|
||||||
const dockerPSArgs: string[] = [
|
const dockerPSArgs: string[] = [
|
||||||
'ps',
|
'ps',
|
||||||
|
|||||||
@@ -1,21 +1,9 @@
|
|||||||
import {
|
import {
|
||||||
containerRemove,
|
containerNetworkPrune,
|
||||||
containerNetworkRemove
|
containerPrune
|
||||||
} from '../dockerCommands/container'
|
} from '../dockerCommands/container'
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
export async function cleanupJob(): Promise<void> {
|
||||||
export async function cleanupJob(args, state, responseFile): Promise<void> {
|
await containerPrune()
|
||||||
const containerIds: string[] = []
|
await containerNetworkPrune()
|
||||||
if (state?.container) {
|
|
||||||
containerIds.push(state.container)
|
|
||||||
}
|
|
||||||
if (state?.services) {
|
|
||||||
containerIds.push(state.services)
|
|
||||||
}
|
|
||||||
if (containerIds.length > 0) {
|
|
||||||
await containerRemove(containerIds)
|
|
||||||
}
|
|
||||||
if (state.network) {
|
|
||||||
await containerNetworkRemove(state.network)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ async function run(): Promise<void> {
|
|||||||
await prepareJob(args as PrepareJobArgs, responseFile)
|
await prepareJob(args as PrepareJobArgs, responseFile)
|
||||||
return exit(0)
|
return exit(0)
|
||||||
case Command.CleanupJob:
|
case Command.CleanupJob:
|
||||||
await cleanupJob(null, state, null)
|
await cleanupJob()
|
||||||
return exit(0)
|
return exit(0)
|
||||||
case Command.RunScriptStep:
|
case Command.RunScriptStep:
|
||||||
await runScriptStep(args as RunScriptStepArgs, state)
|
await runScriptStep(args as RunScriptStepArgs, state)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { prepareJob, cleanupJob } from '../src/hooks'
|
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
|
||||||
import * as fs from 'fs'
|
import * as fs from 'fs'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
|
import { cleanupJob, prepareJob } from '../src/hooks'
|
||||||
import TestSetup from './test-setup'
|
import TestSetup from './test-setup'
|
||||||
|
|
||||||
const prepareJobInputPath = path.resolve(
|
const prepareJobInputPath = path.resolve(
|
||||||
@@ -50,13 +50,6 @@ describe('cleanup job', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should cleanup successfully', async () => {
|
it('should cleanup successfully', async () => {
|
||||||
const prepareJobOutputContent = fs.readFileSync(
|
await expect(cleanupJob()).resolves.not.toThrow()
|
||||||
prepareJobOutputPath,
|
|
||||||
'utf-8'
|
|
||||||
)
|
|
||||||
const parsedPrepareJobOutput = JSON.parse(prepareJobOutputContent)
|
|
||||||
await expect(
|
|
||||||
cleanupJob(prepareJobData.args, parsedPrepareJobOutput.state, null)
|
|
||||||
).resolves.not.toThrow()
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ jest.useRealTimers()
|
|||||||
|
|
||||||
describe('container pull', () => {
|
describe('container pull', () => {
|
||||||
it('should fail', async () => {
|
it('should fail', async () => {
|
||||||
const arg = { image: 'doesNotExist' }
|
const arg = { image: 'does-not-exist' }
|
||||||
await expect(containerPull(arg.image, '')).rejects.toThrow()
|
await expect(containerPull(arg.image, '')).rejects.toThrow()
|
||||||
})
|
})
|
||||||
it('should succeed', async () => {
|
it('should succeed', async () => {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import {
|
|
||||||
prepareJob,
|
|
||||||
cleanupJob,
|
|
||||||
runScriptStep,
|
|
||||||
runContainerStep
|
|
||||||
} from '../src/hooks'
|
|
||||||
import * as fs from 'fs'
|
import * as fs from 'fs'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
|
import {
|
||||||
|
cleanupJob,
|
||||||
|
prepareJob,
|
||||||
|
runContainerStep,
|
||||||
|
runScriptStep
|
||||||
|
} from '../src/hooks'
|
||||||
import TestSetup from './test-setup'
|
import TestSetup from './test-setup'
|
||||||
|
|
||||||
const prepareJobJson = fs.readFileSync(
|
const prepareJobJson = fs.readFileSync(
|
||||||
@@ -83,7 +83,7 @@ describe('e2e', () => {
|
|||||||
await expect(
|
await expect(
|
||||||
runContainerStep(containerStepData.args, resp.state)
|
runContainerStep(containerStepData.args, resp.state)
|
||||||
).resolves.not.toThrow()
|
).resolves.not.toThrow()
|
||||||
await expect(cleanupJob(resp, resp.state, null)).resolves.not.toThrow()
|
await expect(cleanupJob()).resolves.not.toThrow()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should prepare job, then run script step, then run container step with Dockerfile then cleanup', async () => {
|
it('should prepare job, then run script step, then run container step with Dockerfile then cleanup', async () => {
|
||||||
@@ -112,6 +112,6 @@ ENTRYPOINT [ "tail", "-f", "/dev/null" ]
|
|||||||
await expect(
|
await expect(
|
||||||
runContainerStep(containerStepDataCopy.args, resp.state)
|
runContainerStep(containerStepDataCopy.args, resp.state)
|
||||||
).resolves.not.toThrow()
|
).resolves.not.toThrow()
|
||||||
await expect(cleanupJob(resp, resp.state, null)).resolves.not.toThrow()
|
await expect(cleanupJob()).resolves.not.toThrow()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user