From 0cce49705b0a1380b5be671706bec9d64b2df65e Mon Sep 17 00:00:00 2001 From: Nikola Jokic Date: Fri, 15 Dec 2023 13:01:04 +0100 Subject: [PATCH] Try to get response body message and log entire error response in debug mode (#123) --- packages/k8s/src/hooks/prepare-job.ts | 12 ++++++++--- packages/k8s/src/hooks/run-container-step.ts | 21 ++++++++++++++++++-- packages/k8s/src/hooks/run-script-step.ts | 5 ++++- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/packages/k8s/src/hooks/prepare-job.ts b/packages/k8s/src/hooks/prepare-job.ts index d289983..f1facbf 100644 --- a/packages/k8s/src/hooks/prepare-job.ts +++ b/packages/k8s/src/hooks/prepare-job.ts @@ -79,7 +79,9 @@ export async function prepareJob( ) } catch (err) { await prunePods() - throw new Error(`failed to create job pod: ${err}`) + core.debug(`createPod failed: ${JSON.stringify(err)}`) + const message = (err as any)?.response?.body?.message || err + throw new Error(`failed to create job pod: ${message}`) } if (!createdPod?.metadata?.name) { @@ -98,7 +100,7 @@ export async function prepareJob( ) } catch (err) { await prunePods() - throw new Error(`Pod failed to come online with error: ${err}`) + throw new Error(`pod failed to come online with error: ${err}`) } core.debug('Job pod is ready for traffic') @@ -110,7 +112,11 @@ export async function prepareJob( JOB_CONTAINER_NAME ) } catch (err) { - throw new Error(`Failed to determine if the pod is alpine: ${err}`) + core.debug( + `Failed to determine if the pod is alpine: ${JSON.stringify(err)}` + ) + const message = (err as any)?.response?.body?.message || err + throw new Error(`failed to determine if the pod is alpine: ${message}`) } core.debug(`Setting isAlpine to ${isAlpine}`) generateResponseFile(responseFile, createdPod, isAlpine) diff --git a/packages/k8s/src/hooks/run-container-step.ts b/packages/k8s/src/hooks/run-container-step.ts index 8125c43..12ddd49 100644 --- a/packages/k8s/src/hooks/run-container-step.ts +++ b/packages/k8s/src/hooks/run-container-step.ts @@ -36,7 +36,15 @@ export async function runContainerStep( core.debug(`Created secret ${secretName} for container job envs`) const container = createContainerSpec(stepContainer, secretName, extension) - const job = await createJob(container, extension) + let job: k8s.V1Job + try { + job = await createJob(container, extension) + } catch (err) { + core.debug(`createJob failed: ${JSON.stringify(err)}`) + const message = (err as any)?.response?.body?.message || err + throw new Error(`failed to run script step: ${message}`) + } + if (!job.metadata?.name) { throw new Error( `Expected job ${JSON.stringify( @@ -46,7 +54,15 @@ export async function runContainerStep( } core.debug(`Job created, waiting for pod to start: ${job.metadata?.name}`) - const podName = await getContainerJobPodName(job.metadata.name) + let podName: string + try { + podName = await getContainerJobPodName(job.metadata.name) + } catch (err) { + core.debug(`getContainerJobPodName failed: ${JSON.stringify(err)}`) + const message = (err as any)?.response?.body?.message || err + throw new Error(`failed to get container job pod name: ${message}`) + } + await waitForPodPhases( podName, new Set([PodPhase.COMPLETED, PodPhase.RUNNING, PodPhase.SUCCEEDED]), @@ -58,6 +74,7 @@ export async function runContainerStep( core.debug('Waiting for container job to complete') await waitForJobToComplete(job.metadata.name) + // pod has failed so pull the status code from the container const status = await getPodStatus(podName) if (status?.phase === 'Succeeded') { diff --git a/packages/k8s/src/hooks/run-script-step.ts b/packages/k8s/src/hooks/run-script-step.ts index 9cae84b..631946d 100644 --- a/packages/k8s/src/hooks/run-script-step.ts +++ b/packages/k8s/src/hooks/run-script-step.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import * as fs from 'fs' +import * as core from '@actions/core' import { RunScriptStepArgs } from 'hooklib' import { execPodStep } from '../k8s' import { writeEntryPointScript } from '../k8s/utils' @@ -28,7 +29,9 @@ export async function runScriptStep( JOB_CONTAINER_NAME ) } catch (err) { - throw new Error(`failed to run script step: ${err}`) + core.debug(`execPodStep failed: ${JSON.stringify(err)}`) + const message = (err as any)?.response?.body?.message || err + throw new Error(`failed to run script step: ${message}`) } finally { fs.rmSync(runnerPath) }