diff --git a/web/cypress/run-changed.sh b/web/cypress/run-changed.sh new file mode 100644 index 000000000..a7a7dcc97 --- /dev/null +++ b/web/cypress/run-changed.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +CHANGED_FILES=$(git diff --name-only origin/main...HEAD) + +RUN_ALL=false +declare -A TAGS_TO_RUN + +# Create frontend folder to tag map +declare -A FEATURE_MAP +FEATURE_MAP["incidents"]="@cluster-health-analyzer" +FEATURE_MAP["alerts"]="@alerting" +FEATURE_MAP["legacy-dashboards"]="@legacy-dashboards" +FEATURE_MAP["metrics"]="@metrics" +FEATURE_MAP["perses-dashboards"]="@perses-dashboards" +FEATURE_MAP["targets"]="@targets" + +for FILE in $CHANGED_FILES; do + + # Check if any file is outside of web/src/features/ + if [[ ! "$FILE" =~ ^web/src/features/ ]]; then + echo "Global or shared file changed: $FILE" + RUN_ALL=true + break + fi + + # File is in features and looks like: web/src/features/incidents/components/App.tsx + # awk splits by '/' and grabs the 4th segment + FEATURE_DIR=$(echo "$FILE" | awk -F'/' '{print $4}') + CYPRESS_TAG=${FEATURE_MAP[$FEATURE_DIR]} + + if [ -n "$CYPRESS_TAG" ]; then + TAGS_TO_RUN["$CYPRESS_TAG"]=1 + else + echo "Error: Unmapped feature directory changed: $FEATURE_DIR" + exit 1 + fi +done + +if [ "$RUN_ALL" = true ]; then + echo "Changes affect global scope or unmapped features. Running ALL monitoring tests..." + + DEFAULT_TAGS="@alerting @legacy-dashboards @metrics @targets acm-alerting @cluster-health-analyzer @perses-dashboards --@flaky --@xfail" + npm run test-cypress-monitoring:base -- --env grepTags="${DEFAULT_TAGS}" +else + UNIQUE_TAGS=("${!TAGS_TO_RUN[@]}") + + if [ ${#UNIQUE_TAGS[@]} -eq 0 ]; then + echo "No relevant source files changed. Skipping tests." + exit 0 + fi + + FEATURE_TAGS=$( + IFS=" " + echo "${UNIQUE_TAGS[*]}" + ) + + GREP_TAGS="${FEATURE_TAGS} --@flaky --@xfail" + + echo "Running specific tests for tags: $GREP_TAGS" + + npm run test-cypress-monitoring:base -- --env grepTags="${GREP_TAGS}" +fi diff --git a/web/package.json b/web/package.json index 48f020eb8..621ebeac3 100644 --- a/web/package.json +++ b/web/package.json @@ -28,22 +28,8 @@ "test:unit": "TZ=UTC jest --config jest.config.js --passWithNoTests", "test:unit:ci": "TZ=UTC jest --config jest.config.js --passWithNoTests --maxWorkers=2", "test": "npm run cypress:run:ci", - "test-cypress-console": "./node_modules/.bin/cypress open --browser chrome", - "test-cypress-console-headless": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless", - "test-cypress-monitoring": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@alerting+@legacy-dashboards+@metrics+@targets --@flaky --@xfail'", - "test-cypress-monitoring-dev": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@alerting+@legacy-dashboards+@metrics+@targets --@xfail'", - "test-cypress-monitoring-bvt": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@alerting+@legacy-dashboards+@metrics+@targets --@xfail'", - "test-cypress-monitoring-regression": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@alerting+@legacy-dashboards+@metrics+@targets --@flaky --@xfail'", - "test-cypress-alerts": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@alerting --@flaky --@xfail'", - "test-cypress-metrics": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@metrics --@flaky --@xfail'", - "test-cypress-dashboards": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@legacy-dashboards --@flaky --@xfail'", - "test-cypress-coo": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@acm-alerting+@perses-dashboards+@cluster-health-analyzer --@flaky --@xfail'", - "test-cypress-coo-bvt": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@acm-alerting+@perses-dashboards+@cluster-health-analyzer --@xfail'", - "test-cypress-incidents": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@cluster-health-analyzer --@flaky --@xfail'", - "test-cypress-incidents-e2e": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@cluster-health-analyzer --@flaky --@xfail'", - "test-cypress-perses-dev": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@perses-dashboards --@xfail'", - "test-cypress-perses": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@perses-dashboards --@smoke --@flaky --@xfail'", - "test-cypress-perses-ivt": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless --env grepTags='@perses-dashboards --@smoke --@flaky --@xfail'", + "test-cypress-monitoring": "../scripts/run-selective-e2e.sh", + "test-cypress-monitoring:base": "node --max-old-space-size=4096 ./node_modules/.bin/cypress run --browser chrome --headless", "ts-node": "ts-node -O '{\"module\":\"commonjs\"}'" }, "dependencies": {