diff --git a/.github/workflows/sync-cloud-run-env.yml b/.github/workflows/sync-cloud-run-env.yml index 1b96bdc..584b509 100644 --- a/.github/workflows/sync-cloud-run-env.yml +++ b/.github/workflows/sync-cloud-run-env.yml @@ -388,6 +388,14 @@ jobs: [ "${revision_ready}" = "True" ] && break sleep 2 done + revision_ready_category="$( + { gcloud run revisions describe "${revision_name}" --project="${GCP_PROJECT_ID}" --region="${CLOUD_RUN_REGION}" --format='json(status.conditions)' 2>/dev/null \ + | python3 -c 'import json, sys; conditions = json.load(sys.stdin) or []; ready = next((condition for condition in conditions if isinstance(condition, dict) and condition.get("type") == "Ready"), {}); reason = str(ready.get("reason") or "").upper(); print("HEALTHCHECK_FAILURE") if "HEALTH" in reason or "PROBE" in reason else print("CONTAINER_FAILURE") if "CONTAINER" in reason or "IMAGE" in reason else print("RESOURCE_FAILURE") if "RESOURCE" in reason or "QUOTA" in reason else print("PROGRESS_DEADLINE") if "DEADLINE" in reason or "TIMEOUT" in reason else print("PLATFORM_FAILURE") if "INTERNAL" in reason or "PLATFORM" in reason else print("UNKNOWN")' 2>/dev/null; } \ + || printf 'UNKNOWN' + )" + if [ "${revision_ready}" != "True" ]; then + echo "CLOUD_RUN_READY_CONDITION_CATEGORY=${revision_ready_category}" + fi [ "${revision_ready}" = "True" ] || fail_readback "created revision did not become ready" [ "${revision_sha}" = "${EXPECTED_SHA}" ] || fail_readback "revision commit SHA mismatch" [[ "${revision_image}" == *"${EXPECTED_IMAGE_DIGEST}"* ]] || fail_readback "revision image digest mismatch" diff --git a/tests/test_sync_cloud_run_env_workflow.py b/tests/test_sync_cloud_run_env_workflow.py index be04ba9..ac6ea2f 100644 --- a/tests/test_sync_cloud_run_env_workflow.py +++ b/tests/test_sync_cloud_run_env_workflow.py @@ -296,6 +296,10 @@ def test_sync_cloud_run_env_workflow_is_fail_closed_and_no_traffic_by_default(): assert "--format='json(status.conditions)'" in deploy_block assert 'condition.get("type") == "Ready"' in deploy_block assert 'condition.get("status") == "True"' in deploy_block + assert "CLOUD_RUN_READY_CONDITION_CATEGORY=" in deploy_block + assert 'reason = str(ready.get("reason") or "").upper()' in deploy_block + assert 'print("HEALTHCHECK_FAILURE")' in deploy_block + assert 'print("UNKNOWN")' in deploy_block assert 'fail_readback "created revision did not become ready"' in deploy_block assert 'inputs.allow_configuration_sync }}" != "true"' in workflow assert 'inputs.allow_traffic_promotion == true' in workflow