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:
Thomas Boop
2022-06-06 18:36:59 -04:00
committed by GitHub
6 changed files with 30 additions and 37 deletions

View File

@@ -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',

View File

@@ -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)
}
} }

View File

@@ -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)

View File

@@ -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()
}) })
}) })

View File

@@ -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 () => {

View File

@@ -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()
}) })
}) })