diff --git a/packages/docker/src/dockerCommands/container.ts b/packages/docker/src/dockerCommands/container.ts index 89bf737..8e3bc04 100644 --- a/packages/docker/src/dockerCommands/container.ts +++ b/packages/docker/src/dockerCommands/container.ts @@ -149,7 +149,7 @@ export async function containerBuild( dockerArgs.push('-t', tag) dockerArgs.push('-f', args.dockerfile) dockerArgs.push(getBuildContext(args.dockerfile)) - // TODO: figure out build working directory + await runDockerCommand(dockerArgs, { workingDir: getWorkingDir(args.dockerfile) }) diff --git a/packages/docker/src/hooks/prepare-job.ts b/packages/docker/src/hooks/prepare-job.ts index 581e6d1..599ff97 100644 --- a/packages/docker/src/hooks/prepare-job.ts +++ b/packages/docker/src/hooks/prepare-job.ts @@ -94,7 +94,10 @@ export async function prepareJob( ) } - const isAlpine = await isContainerAlpine(containerMetadata!.id) + let isAlpine = false + if (containerMetadata?.id) { + isAlpine = await isContainerAlpine(containerMetadata.id) + } if (containerMetadata?.id) { containerMetadata.ports = await containerPorts(containerMetadata.id) @@ -105,7 +108,10 @@ export async function prepareJob( } } - const healthChecks: Promise[] = [healthCheck(containerMetadata!)] + const healthChecks: Promise[] = [] + if (containerMetadata) { + healthChecks.push(healthCheck(containerMetadata)) + } for (const service of servicesMetadata) { healthChecks.push(healthCheck(service)) } @@ -133,7 +139,6 @@ function generateResponseFile( servicesMetadata?: ContainerMetadata[], isAlpine = false ): void { - // todo figure out if we are alpine const response = { state: { network: networkName }, context: {}, diff --git a/packages/docker/tests/prepare-job-test.ts b/packages/docker/tests/prepare-job-test.ts index d761b7d..d0d80f6 100644 --- a/packages/docker/tests/prepare-job-test.ts +++ b/packages/docker/tests/prepare-job-test.ts @@ -118,4 +118,14 @@ describe('prepare job', () => { expect(redisServicePorts['80']).toBe('8080') expect(redisServicePorts['8080']).toBe('8088') }) + + it('should run prepare job without job container without exception', async () => { + prepareJobDefinition.args.container = null + const prepareJobOutput = testSetup.createOutputFile( + 'prepare-job-output.json' + ) + await expect( + prepareJob(prepareJobDefinition.args, prepareJobOutput) + ).resolves.not.toThrow() + }) }) diff --git a/packages/k8s/src/hooks/prepare-job.ts b/packages/k8s/src/hooks/prepare-job.ts index 7bff8d6..e5ecf6a 100644 --- a/packages/k8s/src/hooks/prepare-job.ts +++ b/packages/k8s/src/hooks/prepare-job.ts @@ -1,12 +1,6 @@ import * as core from '@actions/core' import * as io from '@actions/io' import * as k8s from '@kubernetes/client-node' -import { - PodPhase, - containerVolumes, - DEFAULT_CONTAINER_ENTRY_POINT, - DEFAULT_CONTAINER_ENTRY_POINT_ARGS -} from '../k8s/utils' import { ContextPorts, prepareJobArgs, writeToResponseFile } from 'hooklib' import path from 'path' import { @@ -19,12 +13,22 @@ import { requiredPermissions, waitForPodPhases } from '../k8s' +import { + containerVolumes, + DEFAULT_CONTAINER_ENTRY_POINT, + DEFAULT_CONTAINER_ENTRY_POINT_ARGS, + PodPhase +} from '../k8s/utils' import { JOB_CONTAINER_NAME } from './constants' export async function prepareJob( args: prepareJobArgs, responseFile ): Promise { + if (!args.container) { + throw new Error('Job Container is required.') + } + await prunePods() if (!(await isAuthPermissionsOK())) { throw new Error( diff --git a/packages/k8s/tests/prepare-job-test.ts b/packages/k8s/tests/prepare-job-test.ts index 1992da1..00a5759 100644 --- a/packages/k8s/tests/prepare-job-test.ts +++ b/packages/k8s/tests/prepare-job-test.ts @@ -68,4 +68,11 @@ describe('Prepare job', () => { prepareJob(prepareJobData.args, prepareJobOutputFilePath) ).rejects.toThrow() }) + + it('should not run prepare job without the job container', async () => { + prepareJobData.args.container = undefined + await expect( + prepareJob(prepareJobData.args, prepareJobOutputFilePath) + ).rejects.toThrow() + }) })