export async function checkPodStatus()

in src/utilities/manifestStabilityUtils.ts [100:151]


export async function checkPodStatus(
   kubectl: Kubectl,
   pod: Resource
): Promise<void> {
   const sleepTimeout = 10 * 1000 // 10 seconds
   const iterations = 60 // 60 * 10 seconds timeout = 10 minutes max timeout

   let podStatus
   let kubectlDescribeNeeded = false
   for (let i = 0; i < iterations; i++) {
      await sleep(sleepTimeout)

      core.debug(`Polling for pod status: ${pod.name}`)
      podStatus = await getPodStatus(kubectl, pod)

      if (
         podStatus &&
         podStatus?.phase !== 'Pending' &&
         podStatus?.phase !== 'Unknown'
      ) {
         break
      }
   }

   podStatus = await getPodStatus(kubectl, pod)
   switch (podStatus.phase) {
      case 'Succeeded':
      case 'Running':
         if (isPodReady(podStatus)) {
            console.log(`pod/${pod.name} is successfully rolled out`)
         } else {
            kubectlDescribeNeeded = true
         }
         break
      case 'Pending':
         if (!isPodReady(podStatus)) {
            core.warning(`pod/${pod.name} rollout status check timed out`)
            kubectlDescribeNeeded = true
         }
         break
      case 'Failed':
         core.error(`pod/${pod.name} rollout failed`)
         kubectlDescribeNeeded = true
         break
      default:
         core.warning(`pod/${pod.name} rollout status: ${podStatus.phase}`)
   }

   if (kubectlDescribeNeeded) {
      await kubectl.describe(POD, pod.name, IS_SILENT, pod.namespace)
   }
}