diff --git a/ci-operator/config/stolostron/policy-collection/stolostron-policy-collection-main__ocp5.0.yaml b/ci-operator/config/stolostron/policy-collection/stolostron-policy-collection-main__ocp5.0.yaml
index e31b7716529a3..da2cdd09fd71f 100644
--- a/ci-operator/config/stolostron/policy-collection/stolostron-policy-collection-main__ocp5.0.yaml
+++ b/ci-operator/config/stolostron/policy-collection/stolostron-policy-collection-main__ocp5.0.yaml
@@ -77,6 +77,7 @@ tests:
FIREWATCH_DEFAULT_JIRA_EPIC: INTEROP-9323
FIREWATCH_DEFAULT_JIRA_PROJECT: LPINTEROP
FIREWATCH_FAIL_WITH_TEST_FAILURES: "true"
+ IGNORE_SECONDARY_POLICIES: "true"
OPERATORS: |
[
{"name": "advanced-cluster-management", "source": "redhat-operators", "channel": "release-2.17", "install_namespace": "ocm", "target_namespaces": "ocm", "operator_group": "acm-operator-group"}
@@ -135,6 +136,7 @@ tests:
FIREWATCH_DEFAULT_JIRA_EPIC: INTEROP-9323
FIREWATCH_DEFAULT_JIRA_PROJECT: LPINTEROP
FIREWATCH_FAIL_WITH_TEST_FAILURES: "true"
+ IGNORE_SECONDARY_POLICIES: "true"
OPENSHIFT_REQUIRED_CORES: "72"
OPENSHIFT_REQUIRED_MEMORY: "288"
OPERATORS: |
diff --git a/ci-operator/step-registry/acm/policies/openshift-plus/acm-policies-openshift-plus-commands.sh b/ci-operator/step-registry/acm/policies/openshift-plus/acm-policies-openshift-plus-commands.sh
index 0f847d68d0cec..193b13929c24b 100644
--- a/ci-operator/step-registry/acm/policies/openshift-plus/acm-policies-openshift-plus-commands.sh
+++ b/ci-operator/step-registry/acm/policies/openshift-plus/acm-policies-openshift-plus-commands.sh
@@ -18,9 +18,15 @@ if [[ -n "${QUAY_OPERATOR_CHANNEL}" ]]; then
fi
echo 'y' | ./deploy.sh -p policygenerator/policy-sets/stable/openshift-plus -n policies -u https://github.com/stolostron/policy-collection.git -a openshift-plus
+# openshift-plus generates ~25 policies; require 4+ before oc wait to avoid
+# racing the GitOps Subscription propagation (stolostron/policy-collection#174)
+typeset -i expectedMinPolicies=4
typeset -i pollDeadline=$((SECONDS + 600))
-until (($(oc get policies -n policies -o name 2>/dev/null | wc -l))); do
- ((SECONDS > pollDeadline)) && { : "Error: no policies appeared after 10 minutes"; exit 1; }
+until (( $(oc get policies -n policies -o name 2>/dev/null | wc -l) >= expectedMinPolicies )); do
+ ((SECONDS > pollDeadline)) && {
+ printf '%s\n' "Error: fewer than ${expectedMinPolicies} policies after 10 minutes" >&2
+ exit 1
+ }
sleep 5
done
@@ -41,8 +47,23 @@ done
typeset -a secondaryPoliciesArr=(
policy-acs
+ policy-acs-monitor-certs
+ policy-acs-operator-central
+ policy-acs-sync-resources
+ policy-advanced-managed-cluster-security
policy-advanced-managed-cluster-status
+ policy-compliance-operator-install
+ policy-config-quay
policy-hub-quay-bridge
+ policy-install-quay
+ policy-observability-operator
+ policy-observability-storage
+ policy-observability-storage-status
+ policy-odf
+ policy-odf-cluster
+ policy-odf-noobaa
+ policy-odf-status
+ policy-quay-bridge
policy-quay-status
)
diff --git a/ci-operator/step-registry/interop-tests/opp-quay-smoke/interop-tests-opp-quay-smoke-commands.sh b/ci-operator/step-registry/interop-tests/opp-quay-smoke/interop-tests-opp-quay-smoke-commands.sh
index f726090036915..83a1740aec1dd 100755
--- a/ci-operator/step-registry/interop-tests/opp-quay-smoke/interop-tests-opp-quay-smoke-commands.sh
+++ b/ci-operator/step-registry/interop-tests/opp-quay-smoke/interop-tests-opp-quay-smoke-commands.sh
@@ -1,11 +1,12 @@
#!/bin/bash
-set -euo pipefail
+set -eux -o pipefail
shopt -s inherit_errexit
ARTIFACT_DIR="${ARTIFACT_DIR:=/tmp/artifacts}"
mkdir -p "${ARTIFACT_DIR}"
typeset junitFile="${ARTIFACT_DIR}/junit_quay_interop.xml"
-typeset imageTag="${BUILD_ID:-$(date +%s)}"
+typeset imageTag=''
+imageTag="${BUILD_ID:-$(date +%s)}"
typeset -A testStatus
typeset -A testDuration
@@ -33,13 +34,15 @@ function RecordResult () {
testStatus["${name}"]="${status}"
testDuration["${name}"]="${dur}"
testFailureMsg["${name}"]="${msg}"
+ true
}
# shellcheck disable=SC2329
function GenerateJunit () {
typeset -i total=${#allTests[@]}
typeset -i failures=0 skipped=0
- typeset -i elapsed=$(( $(date +%s) - suiteStart ))
+ typeset -i elapsed=0
+ elapsed=$(( $(date +%s) - suiteStart ))
for t in "${allTests[@]}"; do
[[ "${testStatus[${t}]}" == "failed" ]] && failures=$((failures + 1))
@@ -53,28 +56,29 @@ function GenerateJunit () {
EOF
for t in "${allTests[@]}"; do
- typeset escaped_name
- escaped_name=$(printf '%s' "${t}" | sed 's/&/\&/g; s/\</g; s/>/\>/g; s/"/\"/g')
- typeset escaped_msg
- escaped_msg=$(printf '%s' "${testFailureMsg[${t}]}" | sed 's/&/\&/g; s/\</g; s/>/\>/g; s/"/\"/g')
+ typeset escapedName
+ escapedName=$(printf '%s' "${t}" | sed 's/&/\&/g; s/\</g; s/>/\>/g; s/"/\"/g')
+ typeset escapedMsg
+ escapedMsg=$(printf '%s' "${testFailureMsg[${t}]}" | sed 's/&/\&/g; s/\</g; s/>/\>/g; s/"/\"/g')
if [[ "${testStatus[${t}]}" == "failed" ]]; then
- echo " " >> "${junitFile}"
+ echo " " >> "${junitFile}"
elif [[ "${testStatus[${t}]}" == "skipped" ]]; then
- echo " " >> "${junitFile}"
+ echo " " >> "${junitFile}"
else
- echo " " >> "${junitFile}"
+ echo " " >> "${junitFile}"
fi
done
- cat >> "${junitFile}" <> "${junitFile}" <<'EOF'
EOF
cat "${junitFile}"
+ true
}
-trap GenerateJunit EXIT
+trap '{ ( GenerateJunit; true ); }' EXIT
function DiscoverQuay () {
QUAY_NS=$(oc get quayregistry --all-namespaces -o jsonpath='{.items[0].metadata.namespace}')
@@ -82,6 +86,7 @@ function DiscoverQuay () {
QUAY_HOST=$(oc get quayregistry -n "${QUAY_NS}" "${QUAY_REGISTRY}" -o jsonpath='{.status.registryEndpoint}')
QUAY_HOST="${QUAY_HOST#https://}"
export QUAY_NS QUAY_REGISTRY QUAY_HOST
+ true
}
function GetQuayAuth () {
@@ -91,25 +96,26 @@ function GetQuayAuth () {
configSecret="${QUAY_REGISTRY}-config-bundle"
fi
- QUAY_USER=$(oc get secret -n "${QUAY_NS}" "${configSecret}" -o jsonpath='{.data.SUPER_USER_EMAIL}' 2>/dev/null | base64 -d || echo "")
+ QUAY_USER=$(oc get secret -n "${QUAY_NS}" "${configSecret}" -o jsonpath='{.data.SUPER_USER_EMAIL}' 2>/dev/null | base64 -d 2>/dev/null) || QUAY_USER=""
if [[ -z "${QUAY_USER}" ]]; then
QUAY_USER="quayadmin"
fi
- QUAY_PASSWORD=$(oc get secret -n "${QUAY_NS}" "${configSecret}" -o jsonpath='{.data.SUPER_USER_PASSWORD}' 2>/dev/null | base64 -d || echo "")
+ QUAY_PASSWORD=$(oc get secret -n "${QUAY_NS}" "${configSecret}" -o jsonpath='{.data.SUPER_USER_PASSWORD}' 2>/dev/null | base64 -d 2>/dev/null) || QUAY_PASSWORD=""
if [[ -z "${QUAY_PASSWORD}" ]]; then
typeset initSecret="${QUAY_REGISTRY}-init-config-bundle-secret"
- QUAY_PASSWORD=$(oc get secret -n "${QUAY_NS}" "${initSecret}" -o jsonpath='{.data.superuser-password}' 2>/dev/null | base64 -d || echo "")
+ QUAY_PASSWORD=$(oc get secret -n "${QUAY_NS}" "${initSecret}" -o jsonpath='{.data.superuser-password}' 2>/dev/null | base64 -d 2>/dev/null) || QUAY_PASSWORD=""
fi
if [[ -z "${QUAY_PASSWORD}" ]]; then
for secret in $(oc get secrets -n "${QUAY_NS}" -o jsonpath='{.items[*].metadata.name}' | tr ' ' '\n' | grep -i "quay.*config"); do
- QUAY_PASSWORD=$(oc get secret -n "${QUAY_NS}" "${secret}" -o go-template='{{index .data "config.yaml"}}' 2>/dev/null | base64 -d | grep -oP "(?<=SUPER_USER_PASSWORD: ).*" || echo "")
+ QUAY_PASSWORD=$(oc get secret -n "${QUAY_NS}" "${secret}" -o go-template='{{index .data "config.yaml"}}' 2>/dev/null | base64 -d | grep -oP "(?<=SUPER_USER_PASSWORD: ).*") || QUAY_PASSWORD=""
[[ -n "${QUAY_PASSWORD}" ]] && break
done
fi
export QUAY_USER QUAY_PASSWORD
+ true
}
function PreflightCheck () {
@@ -117,30 +123,34 @@ function PreflightCheck () {
echo "ERROR: Quay route not reachable at ${QUAY_HOST}" >&2
return 1
fi
+ true
}
function CreateTestOrg () {
typeset signinPayload
+ set +x
signinPayload=$(python3 -c "import json,sys; print(json.dumps({'user':sys.argv[1],'pass':sys.argv[2]}))" "${QUAY_USER}" "${QUAY_PASSWORD}")
typeset token
token=$(curl -sk -X POST "https://${QUAY_HOST}/api/v1/signin" \
-H "Content-Type: application/json" \
-d "${signinPayload}" | \
- python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))" 2>/dev/null || echo "")
+ python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))" 2>/dev/null) || token=""
if [[ -z "${token}" ]]; then
token=$(curl -sk -H "Authorization: Basic $(echo -n "${QUAY_USER}:${QUAY_PASSWORD}" | base64)" \
"https://${QUAY_HOST}/api/v1/user/" | \
- python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('token',''))" 2>/dev/null || echo "")
+ python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('token',''))" 2>/dev/null) || token=""
fi
QUAY_TOKEN="${token}"
export QUAY_TOKEN
+ set -x
curl -sk -X POST "https://${QUAY_HOST}/api/v1/organization/" \
-H "Authorization: Bearer ${QUAY_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"name":"interop-smoke-test","email":"interop-test@example.com"}' || true
+ true
}
################################################################################
@@ -154,9 +164,11 @@ function RunPushPull () {
typeset pushTarget="${QUAY_HOST}/interop-smoke-test/ubi-smoke:${imageTag}"
typeset authFile="/tmp/quay-auth.json"
+ set +x
cat > "${authFile}" </dev/null 2>&1; then
+ "docker://${pushTarget}"; then
elapsed=$(( $(date +%s) - start ))
RecordResult "${testName}" "failed" "Image not pullable from Quay after push" "${elapsed}"
return 1
@@ -194,7 +206,7 @@ import sys, json
data = json.load(sys.stdin)
items = data.get('items', [])
print(len(items))
-" 2>/dev/null || echo "0")
+" 2>/dev/null) || pvcCount="0"
if [[ "${pvcCount}" == "0" ]]; then
pvcCount=$(oc get pvc -n "${QUAY_NS}" -o json | python3 -c "
@@ -202,7 +214,7 @@ import sys, json
data = json.load(sys.stdin)
items = [i for i in data.get('items', []) if 'quay' in i['metadata'].get('name','').lower()]
print(len(items))
-" 2>/dev/null || echo "0")
+" 2>/dev/null) || pvcCount="0"
fi
if [[ "${pvcCount}" == "0" ]]; then
@@ -218,7 +230,7 @@ data = json.load(sys.stdin)
items = [i for i in data.get('items', []) if 'quay' in i['metadata'].get('name','').lower()]
unbound = [i['metadata']['name'] for i in items if i['status'].get('phase') != 'Bound']
print(' '.join(unbound))
-" 2>/dev/null || echo "")
+" 2>/dev/null) || unboundPvcs=""
if [[ -n "${unboundPvcs}" ]]; then
elapsed=$(( $(date +%s) - start ))
@@ -234,7 +246,7 @@ items = [i for i in data.get('items', []) if 'quay' in i['metadata'].get('name',
sc_names = set(i['spec'].get('storageClassName','') for i in items)
odf = any('ocs' in s or 'ceph' in s or 'odf' in s for s in sc_names)
print('true' if odf else 'false')
-" 2>/dev/null || echo "false")
+" 2>/dev/null) || odfBacked="false"
if [[ "${odfBacked}" != "true" ]]; then
elapsed=$(( $(date +%s) - start ))
@@ -256,14 +268,14 @@ function RunAcsScan () {
start=$(date +%s)
typeset acsHost acsPassword
- acsHost=$(oc get route -n stackrox central -o jsonpath='{.spec.host}' 2>/dev/null || echo "")
+ acsHost=$(oc get route -n stackrox central -o jsonpath='{.spec.host}' 2>/dev/null) || acsHost=""
if [[ -z "${acsHost}" ]]; then
elapsed=$(( $(date +%s) - start ))
RecordResult "${testName}" "failed" "ACS Central route not found" "${elapsed}"
return 1
fi
- acsPassword=$(oc get secret -n stackrox central-htpasswd -o jsonpath='{.data.password}' 2>/dev/null | base64 -d || echo "")
+ acsPassword=$(oc get secret -n stackrox central-htpasswd -o jsonpath='{.data.password}' 2>/dev/null | base64 -d 2>/dev/null) || acsPassword=""
if [[ -z "${acsPassword}" ]]; then
elapsed=$(( $(date +%s) - start ))
RecordResult "${testName}" "failed" "ACS admin password not found" "${elapsed}"
@@ -276,7 +288,7 @@ function RunAcsScan () {
while (( attempts < maxAttempts )); do
typeset scanResult
scanResult=$(curl -sk -u "admin:${acsPassword}" \
- "https://${acsHost}/v1/images?query=Image:${pushTarget}" 2>/dev/null || echo "")
+ "https://${acsHost}/v1/images?query=Image:${pushTarget}" 2>/dev/null) || scanResult=""
if echo "${scanResult}" | python3 -c "
import sys, json
@@ -322,7 +334,7 @@ function Main () {
"${_fURL[@]}" \
https://raw.githubusercontent.com/RedHatQE/OpenShift-LP-QE--Tools/refs/heads/main/libs/bash/ci-operator/interop/common/ExitTrap--PostProcessPrep.sh
)" || true
- if type -t ExitTrap--PostProcessPrep 1>/dev/null; then
+ if type -t ExitTrap--PostProcessPrep; then
LP_IO__ET_PPP__NEW_TS_NAME="${DR__RP__CR_COMP_NAME}--%s" \
ExitTrap--PostProcessPrep || true
fi
diff --git a/ci-operator/step-registry/interop/opp/odf-health/interop-opp-odf-health-commands.sh b/ci-operator/step-registry/interop/opp/odf-health/interop-opp-odf-health-commands.sh
index 156a7f9b28caa..36441844fcd92 100755
--- a/ci-operator/step-registry/interop/opp/odf-health/interop-opp-odf-health-commands.sh
+++ b/ci-operator/step-registry/interop/opp/odf-health/interop-opp-odf-health-commands.sh
@@ -1,6 +1,5 @@
#!/bin/bash
-set -euo pipefail
-shopt -s inherit_errexit
+set -euo pipefail; shopt -s inherit_errexit
# ---------------------------------------------------------------------------
# ODF Health Check (7-point gate)
@@ -105,7 +104,7 @@ function CheckOdfCsv () {
typeset csvPhase=""
if ! csvPhase="$(oc get csv -n "${ODF_NAMESPACE}" -o json | python3 -c "
import sys,json,re; d=json.load(sys.stdin)
-m=[i for i in d.get('items',[]) if re.match(r'^(odf-|ocs-)operator',i['metadata']['name'])]
+m=[i for i in d.get('items',[]) if re.match(r'^(odf-operator|ocs-operator)',i['metadata']['name'])]
print((m[0].get('status',{}).get('phase','NotFound')) if m else 'NotFound')
")"; then
AddResult "odf-csv-phase" "fail" "Failed to query ODF CSVs in ${ODF_NAMESPACE}"
@@ -485,6 +484,32 @@ print(d['items'][0].get('status',{}).get('ceph',{}).get('health','unknown') if d
# Main
# ---------------------------------------------------------------------------
+function CheckOdfInstalled () {
+ if ! oc get namespace "${ODF_NAMESPACE}" &>/dev/null; then
+ return 1
+ fi
+ typeset csvJson=""
+ typeset -i ocExit=0
+ csvJson="$(oc get csv -n "${ODF_NAMESPACE}" -o json 2>/dev/null)" || ocExit=$?
+ if (( ocExit != 0 )); then
+ printf '%s\n' "Error: oc get csv failed (exit ${ocExit}) in ${ODF_NAMESPACE}" >&2
+ return 2
+ fi
+ if [[ -z "${csvJson}" ]]; then
+ printf '%s\n' "Error: oc get csv returned empty output in ${ODF_NAMESPACE}" >&2
+ return 2
+ fi
+ typeset csvCount=""
+ if ! csvCount="$(printf '%s' "${csvJson}" | python3 -c "
+import sys,json,re; d=json.load(sys.stdin)
+print(len([i for i in d.get('items',[]) if re.match(r'^(odf-operator|ocs-operator)',i['metadata']['name'])]))
+")"; then
+ printf '%s\n' "Error: failed to parse CSV JSON from ${ODF_NAMESPACE}" >&2
+ return 2
+ fi
+ [[ "${csvCount}" -gt 0 ]]
+}
+
function Main () {
if [[ -f "${SHARED_DIR}/kubeconfig" ]]; then
export KUBECONFIG="${SHARED_DIR}/kubeconfig"
@@ -494,6 +519,26 @@ function Main () {
: "Namespace: ${ODF_NAMESPACE}"
: "Artifacts dir: ${ARTIFACT_DIR}"
+ typeset -i odfProbeResult=0
+ CheckOdfInstalled || odfProbeResult=$?
+ if (( odfProbeResult == 2 )); then
+ : "ODF Health Check: PROBE ERROR (cannot determine ODF state)"
+ exit 1
+ fi
+ if (( odfProbeResult == 1 )); then
+ typeset skipMsg="ODF is not installed (no ODF/OCS CSV in ${ODF_NAMESPACE})"
+ typeset -a checkNames=("odf-csv-phase" "storagecluster-ready" "cephcluster-health"
+ "storageclasses-available" "pvc-provision-rbd" "pvc-provision-cephfs"
+ "noobaa-s3-functional" "ceph-health-detail")
+ typeset name=""
+ for name in "${checkNames[@]}"; do
+ AddResult "${name}" "skip" "${skipMsg}"
+ done
+ WriteJunit
+ : "ODF Health Check: ALL SKIPPED (ODF not installed)"
+ exit 0
+ fi
+
CheckOdfCsv || true
CheckStorageCluster || true
CheckCephCluster || true
diff --git a/ci-operator/step-registry/stackrox/opp-readiness/stackrox-opp-readiness-commands.sh b/ci-operator/step-registry/stackrox/opp-readiness/stackrox-opp-readiness-commands.sh
index 5a78660adc402..45dcea495679c 100755
--- a/ci-operator/step-registry/stackrox/opp-readiness/stackrox-opp-readiness-commands.sh
+++ b/ci-operator/step-registry/stackrox/opp-readiness/stackrox-opp-readiness-commands.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-set -eux -o pipefail
+set -euo pipefail
shopt -s inherit_errexit
# ---------------------------------------------------------------------------
@@ -84,9 +84,20 @@ function CheckCentralRoute () {
WaitFor "Central route" CheckCentralRoute
-set +x
-centralUrl="$(oc get route central -n "${centralNs}" -o jsonpath='{.spec.host}')"
-set -x
+typeset -i routeElapsed=0
+centralUrl=""
+while [[ -z "${centralUrl}" ]]; do
+ centralUrl="$(oc get route central -n "${centralNs}" -o jsonpath='{.spec.host}' 2>/dev/null)" || true
+ if [[ -n "${centralUrl}" ]]; then
+ break
+ fi
+ if (( routeElapsed >= 30 )); then
+ echo "[readiness] FATAL: Central route host empty after 30s"
+ exit 1
+ fi
+ sleep 5
+ (( routeElapsed += 5 )) || true
+done
echo "[readiness] Central route discovered"
# ---------------------------------------------------------------------------
@@ -94,10 +105,8 @@ echo "[readiness] Central route discovered"
# ---------------------------------------------------------------------------
typeset roxAdminPassword=""
echo "[readiness] Extracting roxAdminPassword..."
-set +x
roxAdminPassword="$(oc get secret -n "${centralNs}" central-htpasswd \
-o jsonpath='{.data.password}' | base64 -d)"
-set -x
if [[ -z "${roxAdminPassword}" ]]; then
echo "[readiness] FATAL: could not extract roxAdminPassword"
@@ -109,12 +118,10 @@ echo "[readiness] roxAdminPassword extracted successfully"
# Check 2: Central API health (authenticated v1/metadata)
# ---------------------------------------------------------------------------
function CheckCentralApi () {
- set +x
typeset httpCode=""
httpCode="$(curl -sk -o /dev/null -w '%{http_code}' \
-u "admin:${roxAdminPassword}" \
- "https://${centralUrl}/v1/metadata" --max-time 10)" || { set -x; return 1; }
- set -x
+ "https://${centralUrl}/v1/metadata" --max-time 10)" || return 1
[[ "${httpCode}" == "200" ]]
}
@@ -124,12 +131,10 @@ WaitFor "Central API health (v1/metadata)" CheckCentralApi
# Check 3: At least 1 secured cluster connected
# ---------------------------------------------------------------------------
function CheckClustersConnected () {
- set +x
typeset clusterCount=""
clusterCount="$(curl -sk -u "admin:${roxAdminPassword}" \
"https://${centralUrl}/v1/clusters" --max-time 10 \
- | JsonLength clusters)" || { set -x; return 1; }
- set -x
+ | JsonLength clusters)" || return 1
[[ "${clusterCount}" -ge 1 ]]
}
@@ -184,12 +189,10 @@ WaitFor "sensor pods Running in ${scNs}" CheckSensorPods
# Check 5: Default policies loaded (count > 80)
# ---------------------------------------------------------------------------
function CheckPoliciesLoaded () {
- set +x
typeset policyCount=""
policyCount="$(curl -sk -u "admin:${roxAdminPassword}" \
"https://${centralUrl}/v1/policies?query=" --max-time 10 \
- | JsonLength policies)" || { set -x; return 1; }
- set -x
+ | JsonLength policies)" || return 1
echo "[readiness] policy count: ${policyCount}"
[[ "${policyCount}" -gt 80 ]]
}
@@ -198,10 +201,8 @@ WaitFor "default policies loaded (>80)" CheckPoliciesLoaded
echo "[readiness] Writing connection details to SHARED_DIR..."
-set +x
echo "${roxAdminPassword}" > "${SHARED_DIR}/ROX_ADMIN_PASSWORD"
echo "${centralUrl}" > "${SHARED_DIR}/CENTRAL_URL"
-set -x
echo "${centralNs}" > "${SHARED_DIR}/CENTRAL_NS"
echo "${scNs}" > "${SHARED_DIR}/SC_NS"
diff --git a/ci-operator/step-registry/stackrox/opp-smoke/stackrox-opp-smoke-commands.sh b/ci-operator/step-registry/stackrox/opp-smoke/stackrox-opp-smoke-commands.sh
index 3907a7d723dab..972ab22b7f8a0 100755
--- a/ci-operator/step-registry/stackrox/opp-smoke/stackrox-opp-smoke-commands.sh
+++ b/ci-operator/step-registry/stackrox/opp-smoke/stackrox-opp-smoke-commands.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-set -eux -o pipefail
+set -euo pipefail
shopt -s inherit_errexit
if [[ -f "${SHARED_DIR}/kubeconfig" ]]; then
@@ -8,10 +8,8 @@ fi
echo "[smoke] Reading connection details from SHARED_DIR..."
-set +x
CENTRAL_URL="$(cat "${SHARED_DIR}/CENTRAL_URL")"
ROX_ADMIN_PASSWORD="$(cat "${SHARED_DIR}/ROX_ADMIN_PASSWORD")"
-set -x
echo "[smoke] Connection details loaded from SHARED_DIR"
@@ -51,7 +49,6 @@ grep -q 'DEFAULT_CLUSTER_NAME = "local-cluster"' \
/tmp/stackrox/qa-tests-backend/src/main/groovy/services/ClusterService.groovy \
|| { echo "[smoke] FATAL: DEFAULT_CLUSTER_NAME patch failed"; exit 1; }
-set +x
export API_HOSTNAME="${CENTRAL_URL}"
export API_PORT="443"
export ROX_USERNAME="admin"
@@ -72,7 +69,6 @@ if [[ -f /tmp/vault/stackrox-stackrox-e2e-tests/GOOGLE_ARTIFACT_REGISTRY_SERVICE
GOOGLE_ARTIFACT_REGISTRY_SERVICE_ACCOUNT_V2="$(cat /tmp/vault/stackrox-stackrox-e2e-tests/GOOGLE_ARTIFACT_REGISTRY_SERVICE_ACCOUNT_V2)"
export GOOGLE_ARTIFACT_REGISTRY_SERVICE_ACCOUNT_V2
fi
-set -x
cd /tmp/stackrox/qa-tests-backend
@@ -103,13 +99,4 @@ if [[ -d build/reports/tests/testSMOKE ]]; then
fi
echo "[smoke] Test run finished with exit code: ${testExit}"
-if [[ "${testExit}" -ne 0 ]] && [[ -d build/test-results/testSMOKE ]]; then
- typeset total=""
- total="$(find build/test-results/testSMOKE -name '*.xml' -exec grep -l 'testcase' {} \; | wc -l)"
- if [[ "${total}" -gt 0 ]]; then
- echo "[smoke] Tests executed and results captured; treating as informational (exit 0)."
- echo "[smoke] Review JUnit XML in ARTIFACT_DIR for individual test failures."
- exit 0
- fi
-fi
exit "${testExit}"
diff --git a/ci-operator/step-registry/stackrox/opp-smoke/stackrox-opp-smoke-ref.yaml b/ci-operator/step-registry/stackrox/opp-smoke/stackrox-opp-smoke-ref.yaml
index 74d11f0815aa9..329a34c9d7a71 100644
--- a/ci-operator/step-registry/stackrox/opp-smoke/stackrox-opp-smoke-ref.yaml
+++ b/ci-operator/step-registry/stackrox/opp-smoke/stackrox-opp-smoke-ref.yaml
@@ -11,6 +11,7 @@ ref:
memory: 4Gi
from: acs-smoke-runner
timeout: 1h0m0s
+ best_effort: true
documentation: |-
Run the ACS qa-tests-backend SMOKE suite against a live ACS
instance. Reads connection credentials from SHARED_DIR