From 931e01be1568d755c3abe35aca6cfe0f1077e1dd Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Thu, 16 Jul 2026 14:33:16 +0200 Subject: [PATCH 01/10] feat: add PCP dashboard post step for MicroShift e2e jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a new CI step that generates an interactive Chart.js PCP performance dashboard (CPU, memory, I/O, disk) from scenario VM and hypervisor PCP archives. The output is a custom-link-pcp.html artifact that Spyglass renders as a "Test PCP" toggle in Prow job results. Uses the edge-tooling-ai-helpers CI image which contains pcp2json and all PCP dashboard scripts — no script duplication needed. Co-Authored-By: Claude Opus 4.6 --- ...t-microshift-e2e-metal-tests-workflow.yaml | 1 + .../microshift/infra/pcp-dashboard/OWNERS | 5 +++ ...microshift-infra-pcp-dashboard-commands.sh | 36 +++++++++++++++++++ ...ft-microshift-infra-pcp-dashboard-ref.yaml | 24 +++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/OWNERS create mode 100644 ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh create mode 100644 ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml diff --git a/ci-operator/step-registry/openshift/microshift/e2e/metal-tests/openshift-microshift-e2e-metal-tests-workflow.yaml b/ci-operator/step-registry/openshift/microshift/e2e/metal-tests/openshift-microshift-e2e-metal-tests-workflow.yaml index 394a914d7dddf..160152638fd4c 100644 --- a/ci-operator/step-registry/openshift/microshift/e2e/metal-tests/openshift-microshift-e2e-metal-tests-workflow.yaml +++ b/ci-operator/step-registry/openshift/microshift/e2e/metal-tests/openshift-microshift-e2e-metal-tests-workflow.yaml @@ -9,6 +9,7 @@ workflow: test: - ref: openshift-microshift-e2e-metal-tests post: + - ref: openshift-microshift-infra-pcp-dashboard - ref: openshift-microshift-infra-pmlogs - ref: openshift-microshift-infra-sos-aws - ref: openshift-microshift-infra-aws-deprovision diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/OWNERS b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/OWNERS new file mode 100644 index 0000000000000..f427ff70caa0a --- /dev/null +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/OWNERS @@ -0,0 +1,5 @@ +approvers: +- openshift-edge-approvers +options: {} +reviewers: +- openshift-edge-reviewers diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh new file mode 100644 index 0000000000000..502d07c8f2590 --- /dev/null +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh @@ -0,0 +1,36 @@ +#!/bin/bash +set -xeuo pipefail + +# shellcheck disable=SC1091 +source "${SHARED_DIR}/ci-functions.sh" +ci_script_prologue +trap_subprocesses_on_term + +EDGE_TOOLING_DIR="${EDGE_TOOLING_DIR:-/opt/app-root/src/edge-tooling}" +PCP_SCRIPTS="${EDGE_TOOLING_DIR}/plugins/microshift-ci/scripts/pcp-graphs" +REMOTE_SCENARIO_DIR="/home/${HOST_USER}/microshift/_output/test-images/scenario-info" +LOCAL_ARTIFACTS=$(mktemp -d) + +# Selectively copy PCP archives and junit.xml from the hypervisor +echo "Copying PCP archives and junit.xml from ${INSTANCE_PREFIX}..." +ssh "${INSTANCE_PREFIX}" \ + "cd ${REMOTE_SCENARIO_DIR} && \ + find . \( -name 'pcp-archives.tar' -o -name 'junit.xml' \) -print0 | \ + tar cf - --null -T -" | tar xf - -C "${LOCAL_ARTIFACTS}/" + +# Copy hypervisor PCP logs if available +PMLOGS_DIR=/var/log/pcp/pmlogger +if ssh "${INSTANCE_PREFIX}" "[ -d \"${PMLOGS_DIR}\" ]" ; then + mkdir -p "${LOCAL_ARTIFACTS}/pmlogs" + scp -r "${INSTANCE_PREFIX}:${PMLOGS_DIR}/"* "${LOCAL_ARTIFACTS}/pmlogs/" || true +fi + +# Generate the interactive PCP dashboard +echo "Generating PCP dashboard..." +bash "${PCP_SCRIPTS}/generate-dashboard.sh" \ + --local "${LOCAL_ARTIFACTS}" \ + --build-id "${BUILD_ID:-local}" \ + --title "Test PCP" \ + --output "${ARTIFACT_DIR}/custom-link-pcp.html" + +rm -rf "${LOCAL_ARTIFACTS}" diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml new file mode 100644 index 0000000000000..4372c3b0adc6a --- /dev/null +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml @@ -0,0 +1,24 @@ +ref: + as: openshift-microshift-infra-pcp-dashboard + from_image: + namespace: ci + name: edge-tooling-ai-helpers + tag: latest + commands: openshift-microshift-infra-pcp-dashboard-commands.sh + resources: + requests: + cpu: 100m + memory: 200Mi + grace_period: 10m + best_effort: true + env: + - name: HOME + default: /tmp/secret + credentials: + - namespace: test-credentials + name: microshift-rhsm-creds + mount_path: /var/run/rhsm/ + documentation: |- + Generates an interactive PCP performance dashboard from scenario VM and + hypervisor PCP archives, producing a custom-link-pcp.html artifact that + Spyglass renders as a "Test PCP" toggle in Prow job results. From 9a6e22fa37b9a11c34f794dba0a23257933691c6 Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Thu, 16 Jul 2026 15:00:33 +0200 Subject: [PATCH 02/10] fix: emit warning on pmlogger copy failure instead of silent suppression Co-Authored-By: Claude Opus 4.6 --- .../openshift-microshift-infra-pcp-dashboard-commands.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh index 502d07c8f2590..fe3d6f585720f 100644 --- a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh @@ -22,7 +22,9 @@ ssh "${INSTANCE_PREFIX}" \ PMLOGS_DIR=/var/log/pcp/pmlogger if ssh "${INSTANCE_PREFIX}" "[ -d \"${PMLOGS_DIR}\" ]" ; then mkdir -p "${LOCAL_ARTIFACTS}/pmlogs" - scp -r "${INSTANCE_PREFIX}:${PMLOGS_DIR}/"* "${LOCAL_ARTIFACTS}/pmlogs/" || true + if ! scp -r "${INSTANCE_PREFIX}:${PMLOGS_DIR}/"* "${LOCAL_ARTIFACTS}/pmlogs/" ; then + echo "WARNING: failed to copy hypervisor pmlogger data, skipping" + fi fi # Generate the interactive PCP dashboard From 194bcdc82a8aa1e4cefb4fd49e0abdf0a854f321 Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Thu, 16 Jul 2026 15:12:27 +0200 Subject: [PATCH 03/10] fix: add timeout to pcp-dashboard step (required with best_effort) Co-Authored-By: Claude Opus 4.6 --- .../openshift-microshift-infra-pcp-dashboard-ref.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml index 4372c3b0adc6a..71237bf10ed3e 100644 --- a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml @@ -9,6 +9,7 @@ ref: requests: cpu: 100m memory: 200Mi + timeout: 15m grace_period: 10m best_effort: true env: From 6e262a6f9d6a6b126186965fa119b54f932e4f16 Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Thu, 16 Jul 2026 15:24:13 +0200 Subject: [PATCH 04/10] chore: add generated registry metadata for pcp-dashboard step Co-Authored-By: Claude Opus 4.6 --- ...t-microshift-infra-pcp-dashboard-ref.metadata.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.metadata.json diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.metadata.json b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.metadata.json new file mode 100644 index 0000000000000..665dd8399a7d7 --- /dev/null +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.metadata.json @@ -0,0 +1,11 @@ +{ + "path": "openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-ref.yaml", + "owners": { + "approvers": [ + "openshift-edge-approvers" + ], + "reviewers": [ + "openshift-edge-reviewers" + ] + } +} \ No newline at end of file From 948c7ec237a31bdfa291cbafd7dbba40a1ef0102 Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Thu, 23 Jul 2026 10:08:39 +0200 Subject: [PATCH 05/10] fix: drop --build-id from pcp-dashboard step invocation Co-Authored-By: Claude Opus 4.6 --- .../openshift-microshift-infra-pcp-dashboard-commands.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh index fe3d6f585720f..95c9c31ff7f9e 100644 --- a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh @@ -31,7 +31,6 @@ fi echo "Generating PCP dashboard..." bash "${PCP_SCRIPTS}/generate-dashboard.sh" \ --local "${LOCAL_ARTIFACTS}" \ - --build-id "${BUILD_ID:-local}" \ --title "Test PCP" \ --output "${ARTIFACT_DIR}/custom-link-pcp.html" From 46c9cebddf1f1903a27ff1f5f59dcdf53f25445f Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Thu, 23 Jul 2026 10:52:20 +0200 Subject: [PATCH 06/10] fix: drop --title from PCP dashboard invocation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The flag was removed from generate-dashboard.sh — title is hardcoded. Co-Authored-By: Claude Opus 4.6 --- .../openshift-microshift-infra-pcp-dashboard-commands.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh index 95c9c31ff7f9e..3b14a5a94d8be 100644 --- a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh @@ -31,7 +31,6 @@ fi echo "Generating PCP dashboard..." bash "${PCP_SCRIPTS}/generate-dashboard.sh" \ --local "${LOCAL_ARTIFACTS}" \ - --title "Test PCP" \ --output "${ARTIFACT_DIR}/custom-link-pcp.html" rm -rf "${LOCAL_ARTIFACTS}" From f7a64ac018d4af180110f55537c657088a0d6905 Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Fri, 24 Jul 2026 12:39:43 +0200 Subject: [PATCH 07/10] fix: follow symlinks when collecting PCP archives from hypervisor The scenario-info directory on the hypervisor uses symlinks for VM data. Without -L on find and -h on tar, pcp-archives.tar files behind symlinks are missed, producing an empty dashboard. Co-Authored-By: Claude Opus 4.6 --- .../openshift-microshift-infra-pcp-dashboard-commands.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh index 3b14a5a94d8be..8aea9e284f3c4 100644 --- a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh @@ -15,8 +15,8 @@ LOCAL_ARTIFACTS=$(mktemp -d) echo "Copying PCP archives and junit.xml from ${INSTANCE_PREFIX}..." ssh "${INSTANCE_PREFIX}" \ "cd ${REMOTE_SCENARIO_DIR} && \ - find . \( -name 'pcp-archives.tar' -o -name 'junit.xml' \) -print0 | \ - tar cf - --null -T -" | tar xf - -C "${LOCAL_ARTIFACTS}/" + find -L . \( -name 'pcp-archives.tar' -o -name 'junit.xml' \) -print0 | \ + tar cf - --null -T - -h" | tar xf - -C "${LOCAL_ARTIFACTS}/" # Copy hypervisor PCP logs if available PMLOGS_DIR=/var/log/pcp/pmlogger From 6feb4ac6f9d4aabc3525440d9e50c7d6b3eb353d Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Fri, 24 Jul 2026 15:24:49 +0200 Subject: [PATCH 08/10] fix: prefer shared artifacts volume for scenario-info PCP data The metal-tests step copies scenario-info (including pcp-archives.tar) to the shared artifacts volume. By the time our post step runs via SSH, these files are already cleaned up on the hypervisor. Check the shared volume first; fall back to SSH if unavailable. Co-Authored-By: Claude Opus 4.6 --- ...-microshift-infra-pcp-dashboard-commands.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh index 8aea9e284f3c4..967bdf13e2058 100644 --- a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh @@ -11,12 +11,18 @@ PCP_SCRIPTS="${EDGE_TOOLING_DIR}/plugins/microshift-ci/scripts/pcp-graphs" REMOTE_SCENARIO_DIR="/home/${HOST_USER}/microshift/_output/test-images/scenario-info" LOCAL_ARTIFACTS=$(mktemp -d) -# Selectively copy PCP archives and junit.xml from the hypervisor -echo "Copying PCP archives and junit.xml from ${INSTANCE_PREFIX}..." -ssh "${INSTANCE_PREFIX}" \ - "cd ${REMOTE_SCENARIO_DIR} && \ - find -L . \( -name 'pcp-archives.tar' -o -name 'junit.xml' \) -print0 | \ - tar cf - --null -T - -h" | tar xf - -C "${LOCAL_ARTIFACTS}/" +# Collect VM PCP archives and junit.xml +# Prefer the shared artifacts volume (written by the metal-tests step), fall back to SSH +if [ -d "${ARTIFACT_DIR}/scenario-info" ]; then + echo "Using scenario-info from metal-tests artifacts..." + ln -s "${ARTIFACT_DIR}/scenario-info/"* "${LOCAL_ARTIFACTS}/" 2>/dev/null || true +else + echo "Copying PCP archives and junit.xml from ${INSTANCE_PREFIX}..." + ssh "${INSTANCE_PREFIX}" \ + "cd ${REMOTE_SCENARIO_DIR} && \ + find -L . \( -name 'pcp-archives.tar' -o -name 'junit.xml' \) -print0 | \ + tar cf - --null -T - -h" | tar xf - -C "${LOCAL_ARTIFACTS}/" +fi # Copy hypervisor PCP logs if available PMLOGS_DIR=/var/log/pcp/pmlogger From fed3ee3258c88b3aea87babb7f285d1568f42962 Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Fri, 24 Jul 2026 18:05:20 +0200 Subject: [PATCH 09/10] fix: download VM PCP archives from GCS instead of SSH The metal-tests step uploads scenario-info (including pcp-archives.tar) to GCS, but these files are cleaned up on the hypervisor before post steps run. Download pcp-archives.tar and junit.xml directly from the metal-tests step's GCS artifacts instead. Hypervisor pmlogs are still collected via SSH as they remain available. Co-Authored-By: Claude Opus 4.6 --- ...microshift-infra-pcp-dashboard-commands.sh | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh index 967bdf13e2058..f8f9bd5115cb4 100644 --- a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh @@ -8,20 +8,30 @@ trap_subprocesses_on_term EDGE_TOOLING_DIR="${EDGE_TOOLING_DIR:-/opt/app-root/src/edge-tooling}" PCP_SCRIPTS="${EDGE_TOOLING_DIR}/plugins/microshift-ci/scripts/pcp-graphs" -REMOTE_SCENARIO_DIR="/home/${HOST_USER}/microshift/_output/test-images/scenario-info" LOCAL_ARTIFACTS=$(mktemp -d) -# Collect VM PCP archives and junit.xml -# Prefer the shared artifacts volume (written by the metal-tests step), fall back to SSH -if [ -d "${ARTIFACT_DIR}/scenario-info" ]; then - echo "Using scenario-info from metal-tests artifacts..." - ln -s "${ARTIFACT_DIR}/scenario-info/"* "${LOCAL_ARTIFACTS}/" 2>/dev/null || true +# Construct GCS path to the metal-tests step's scenario-info. +# The metal-tests step uploads scenario-info (including pcp-archives.tar) to GCS, +# but these files are no longer on the hypervisor by the time this post step runs. +if [ "${JOB_TYPE}" == "presubmit" ]; then + GCS_JOB_PATH="pr-logs/pull/${REPO_OWNER}_${REPO_NAME}/${PULL_NUMBER}/${JOB_NAME}/${BUILD_ID}" else - echo "Copying PCP archives and junit.xml from ${INSTANCE_PREFIX}..." - ssh "${INSTANCE_PREFIX}" \ - "cd ${REMOTE_SCENARIO_DIR} && \ - find -L . \( -name 'pcp-archives.tar' -o -name 'junit.xml' \) -print0 | \ - tar cf - --null -T - -h" | tar xf - -C "${LOCAL_ARTIFACTS}/" + GCS_JOB_PATH="logs/${JOB_NAME}/${BUILD_ID}" +fi +GCS_BASE="gs://test-platform-results/${GCS_JOB_PATH}" + +# Find scenario-info path (wildcard handles different workflow names) +SCENARIO_GCS=$(gsutil ls -d "${GCS_BASE}/artifacts/*/openshift-microshift-e2e-metal-tests/artifacts/scenario-info/" 2>/dev/null | head -1) + +if [ -n "${SCENARIO_GCS}" ]; then + echo "Downloading VM PCP archives from GCS..." + while IFS= read -r gcs_file; do + rel="${gcs_file#"${SCENARIO_GCS}"}" + mkdir -p "${LOCAL_ARTIFACTS}/$(dirname "${rel}")" + gsutil -q cp "${gcs_file}" "${LOCAL_ARTIFACTS}/${rel}" + done < <(gsutil ls -r "${SCENARIO_GCS}" 2>/dev/null | grep -E '(pcp-archives\.tar|junit\.xml)$') +else + echo "WARNING: could not find scenario-info in GCS at ${GCS_BASE}" fi # Copy hypervisor PCP logs if available From 5ef877ea35e1049ff6638be939c85dcd55f118f2 Mon Sep 17 00:00:00 2001 From: Suleyman Akbas Date: Fri, 24 Jul 2026 19:55:49 +0200 Subject: [PATCH 10/10] fix: handle missing scenario-info gracefully in pcp-dashboard step gsutil ls returns non-zero when no match is found, which kills the script under set -euo pipefail. Add || true so jobs without a metal-tests step (e.g. bootc) proceed to generate a hypervisor-only dashboard instead of failing. Co-Authored-By: Claude Opus 4.6 --- .../openshift-microshift-infra-pcp-dashboard-commands.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh index f8f9bd5115cb4..db601c6b6c021 100644 --- a/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh +++ b/ci-operator/step-registry/openshift/microshift/infra/pcp-dashboard/openshift-microshift-infra-pcp-dashboard-commands.sh @@ -21,7 +21,7 @@ fi GCS_BASE="gs://test-platform-results/${GCS_JOB_PATH}" # Find scenario-info path (wildcard handles different workflow names) -SCENARIO_GCS=$(gsutil ls -d "${GCS_BASE}/artifacts/*/openshift-microshift-e2e-metal-tests/artifacts/scenario-info/" 2>/dev/null | head -1) +SCENARIO_GCS=$(gsutil ls -d "${GCS_BASE}/artifacts/*/openshift-microshift-e2e-metal-tests/artifacts/scenario-info/" 2>/dev/null | head -1 || true) if [ -n "${SCENARIO_GCS}" ]; then echo "Downloading VM PCP archives from GCS..."