diff --git a/packages/k8s/src/hooks/prepare-job.ts b/packages/k8s/src/hooks/prepare-job.ts index 89202dcc..cf04a484 100644 --- a/packages/k8s/src/hooks/prepare-job.ts +++ b/packages/k8s/src/hooks/prepare-job.ts @@ -58,7 +58,7 @@ export async function prepareJob( core.debug(`Adding service '${service.image}' to pod definition`) return createContainerSpec( service, - generateContainerName(service.image), + generateContainerName(service), false, extension ) @@ -159,7 +159,7 @@ function generateResponseFile( if (args.services?.length) { const serviceContainerNames = - args.services?.map(s => generateContainerName(s.image)) || [] + args.services?.map(s => generateContainerName(s)) || [] response.context['services'] = appPod?.spec?.containers ?.filter(c => serviceContainerNames.includes(c.name)) diff --git a/packages/k8s/src/k8s/utils.ts b/packages/k8s/src/k8s/utils.ts index e46af8b8..0dd0b258 100644 --- a/packages/k8s/src/k8s/utils.ts +++ b/packages/k8s/src/k8s/utils.ts @@ -2,7 +2,7 @@ import * as k8s from '@kubernetes/client-node' import * as fs from 'fs' import * as yaml from 'js-yaml' import * as core from '@actions/core' -import { Mount } from 'hooklib' +import { ServiceContainerInfo, Mount } from 'hooklib' import * as path from 'path' import { v1 as uuidv4 } from 'uuid' import { POD_VOLUME_NAME } from './index' @@ -160,14 +160,28 @@ exec ${environmentPrefix} ${entryPoint} ${ } } -export function generateContainerName(image: string): string { +export function generateContainerName(service: ServiceContainerInfo): string { + const image = service.image const nameWithTag = image.split('/').pop() - const name = nameWithTag?.split(':').at(0) + let name = nameWithTag?.split(':').at(0) if (!name) { throw new Error(`Image definition '${image}' is invalid`) } + if (service.createOptions) { + const optionsArr = service.createOptions.split(/[ ]+/) + for (let i = 0; i < optionsArr.length; i++) { + if (optionsArr[i] === '--name') { + if (i + 1 >= optionsArr.length) { + throw new Error(`Invalid create options: ${service.createOptions} (missing a value after --name)`) + } + name = optionsArr[++i] + core.debug(`Overriding service container name with: ${name}`) + } + } + } + return name }