Skip to content

Comments

E2e#464

Merged
chetanbothra merged 2 commits intostagingfrom
e2e
Nov 25, 2025
Merged

E2e#464
chetanbothra merged 2 commits intostagingfrom
e2e

Conversation

@chetanbothra
Copy link
Contributor

@chetanbothra chetanbothra commented Nov 25, 2025

Description

How Has This Been Tested?

Screenshots (if appropriate):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Summary by CodeRabbit

  • Chores
    • Enhanced CI/CD infrastructure with improved automated test workflows and execution efficiency.
    • Updated test result reporting and team notifications for better visibility into test outcomes.
    • Optimized testing pipeline with consolidated workflows and improved artifact management.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 25, 2025

Walkthrough

The PR updates CircleCI configuration to replace mochawesome-based test execution with a Playwright-focused E2E pipeline, including environment variable injection into .env, artifact relocation to /tmp, and dynamic Slack reporting that retrieves HTML report URLs via the CircleCI API.

Changes

Cohort / File(s) Summary
Playwright E2E Test Execution
\.circleci/config\.yml
Clones x-e2e repository, injects environment variables into .env file, installs dependencies, and runs Playwright tests with updated commands replacing prior mochawesome/Cypress test execution.
Artifact Management
\.circleci/config\.yml
Moves Playwright-related artifacts (blob-report, test-results) to /tmp directory and updates store_artifacts paths accordingly for proper artifact retention.
Dynamic Slack Reporting
\.circleci/config\.yml
Replaces mochawesome-based test results parsing with a new flow that calls CircleCI API to dynamically resolve HTML report URLs, includes fallback handling, and sends unified Slack notifications for both passed and failed tests with Job URL and report URL.
Workflow Consolidation
\.circleci/config\.yml
Removes separate e2e-playwright workflow run from pr_triggered_e2e_tests workflow, consolidates to single e2e-tests job with staging branch filtering.

Sequence Diagram

sequenceDiagram
    actor CircleCI as CircleCI Job
    participant x-e2e as x-e2e Repo
    participant Playwright as Playwright Tests
    participant Artifacts as /tmp Artifacts
    participant CCAPI as CircleCI API
    participant Slack as Slack

    CircleCI->>x-e2e: Clone repository
    CircleCI->>CircleCI: Inject env vars to .env
    CircleCI->>Playwright: Install deps & run tests
    Playwright->>Artifacts: Generate blob-report & test-results
    
    rect rgb(200, 220, 240)
    Note over CircleCI,Slack: Dynamic Report URL Resolution
    CircleCI->>CCAPI: Query artifacts for HTML report
    alt Report found
        CCAPI-->>CircleCI: Return artifact URL
    else Fallback
        CircleCI->>CircleCI: Use fallback URL
    end
    end
    
    rect rgb(220, 240, 200)
    Note over CircleCI,Slack: Slack Notification
    CircleCI->>Slack: Send notification with Job URL & Report URL
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • CircleCI API integration: New logic to dynamically fetch artifact URLs requires verification that API calls are correctly formatted and handle failures gracefully.
  • Fallback URL handling: Ensure fallback mechanism works when report URL cannot be retrieved from CircleCI API.
  • Workflow consolidation: Verify that the removal of separate e2e-playwright workflow and consolidation to single e2e-tests job maintains correct test coverage and branch filtering.
  • Environment variable injection: Confirm .env substitution is correctly applied before Playwright execution.
  • Artifact path changes: Validate that all references to test artifacts in /tmp are consistent across job steps.

Possibly related PRs

  • Added E2E Test cases #333: Adds mochawesome-based Cypress/Playwright pipeline with JSON parsing; this PR replaces that approach with a Playwright-centric artifact retrieval and Slack-reporting flow.
  • Playright html #406: Modifies the same .circleci/config.yml to switch e2e workflow to Playwright, update test commands, and relocate artifacts to /tmp—directly overlapping scope.
  • Adding Playwrite-e2e Testcases #402: Adds Playwright E2E support with environment variable substitution into .env during CI execution—shared concern with this PR's env injection logic.

Suggested reviewers

  • sankhavaramsaitulasiram
  • boonet

Poem

🐰 A hop through the CI pipeline,
From mochawesome to Playwright so fine,
Reports dynamically flow through the API,
Slack messages dance—tests passing, hooray!
One job consolidated, the workflow divine.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is entirely a blank template with no substantive content—all sections contain only dashes or are unchecked, failing to explain the significant changes to CircleCI configuration and testing infrastructure. Complete the description with: (1) summary of Playwright integration and Slack notification changes, (2) testing methodology used, (3) types of changes (likely 'New feature' or 'Breaking change'), and (4) any relevant screenshots or links.
Title check ❓ Inconclusive The title 'E2e' is vague and generic, providing no meaningful information about the substantial CircleCI workflow changes including Playwright test integration, Slack reporting, and artifact handling modifications. Revise the title to clearly describe the main change, such as 'Update CircleCI E2E workflow to use Playwright tests with Slack reporting' or 'Integrate Playwright E2E tests and dynamic Slack notifications'.
✅ Passed checks (1 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch e2e

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented Nov 25, 2025

Deploying x with  Cloudflare Pages  Cloudflare Pages

Latest commit: 3699812
Status: ✅  Deploy successful!
Preview URL: https://34617adc.x-e62.pages.dev
Branch Preview URL: https://e2e.x-e62.pages.dev

View logs

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.circleci/config.yml (1)

45-66: Artifact handling looks solid, with minor note on permissions.

The defensive checks (if [ -d ... ]) before moving artifacts are good. However, chmod 777 is overly permissive. Since these are temporary CI artifacts in /tmp, consider chmod 755 or chmod 644 (depending on whether others need write access):

-              chmod 777 -R /tmp/blob-report
+              chmod 755 -R /tmp/blob-report

This reduces exposure if the artifact directory is later shared or inspected by other users.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bf3e809 and 3699812.

📒 Files selected for processing (1)
  • .circleci/config.yml (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: unit-tests
  • GitHub Check: lint
  • GitHub Check: build
  • GitHub Check: Cloudflare Pages: pillarx-debug
🔇 Additional comments (5)
.circleci/config.yml (5)

16-20: Install jq step is appropriate.

This step is necessary for the JSON parsing used in Slack reporting. Consider pinning package versions for reproducibility in future updates.


68-79: HTML report artifact handling looks good.

Consistent with the blob-report and test-results artifact handling. Same minor note: consider chmod 755 instead of the implicit default for consistency with the earlier artifacts (see prior comment).


109-125: Slack message structure is clear and informative.

The passed and failed test messages include relevant context (project, branch, job link, report link). The newline escaping on line 128 is appropriate for JSON formatting.


135-138: Branch filter is sensible.

Restricting E2E tests to the staging branch prevents them from running on every PR branch, which reduces CI load. Ensure this aligns with your workflow expectations.


28-28: High-risk: Credential exposure and unsafe environment variable substitution.

Two issues here:

  1. Credential leakage (line 28): The git clone exposes $GITHUB_TOKEN in the command, which will appear in CI logs. While CircleCI attempts to mask known secrets, relying on log masking is fragile. Use Git credential helpers or SSH keys instead.

  2. Sed injection vulnerability (lines 31–39): The sed commands lack escaping for special characters. If environment variables contain /, &, $, or \, sed will fail or cause unintended substitution. For example, an email like test&user@example.com will break the sed command.

Use envsubst (POSIX standard) or safely escape variables:

-            touch .env
-            sed -i "s|test_mail_email_value|$TESTMAIL_EMAIL|g" .env
-            sed -i "s|test_mail_username_value|$TESTMAIL_USERNAME|g" .env
-            sed -i "s|test_mail_apikey_value|$TESTMAIL_API_KEY|g" .env
-            sed -i "s|staging_url_value|$STAGING_URL|g" .env
-            sed -i "s|sushi_url_value|$SUSHI_URL|g" .env
-            sed -i "s|ci_value|$CI|g" .env
-            sed -i "s|headed_value|$HEADED|g" .env
-            sed -i "s|debug_value|$DEBUG|g" .env
+            touch .env
+            envsubst < .env.template > .env

(Assumes x-e2e repo has a .env.template with placeholders like ${TESTMAIL_EMAIL}, etc.)

Also applies to: 31-39

⛔ Skipped due to learnings
Learnt from: chetanbothra
Repo: pillarwallet/x PR: 333
File: .circleci/config.yml:24-27
Timestamp: 2025-06-16T04:17:05.080Z
Learning: In this project, tokens are stored securely in CircleCI project settings and GitHub automatically masks sensitive information in logs by printing **, so using HTTPS URLs with embedded tokens in CircleCI workflows is acceptable and secure.

command: |
cd ~
git clone -b main --single-branch https://$GITHUB_TOKEN@github.com/pillarwallet/x-e2e.git
git clone -b pillarx-playwright --single-branch https://$GITHUB_TOKEN@github.com/pillarwallet/x-e2e.git
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Critical: Test failures are suppressed by || true; risk of silent failures.

Line 43 uses || true, which suppresses the test exit code. This means the CI job reports success even when Playwright tests fail. Tests should exit with a non-zero status on failure so the pipeline can be marked as failed.

Remove || true so test failures properly fail the job:

-            npm run test:all || true
+            npm run test:all

If you need to continue even after failures (to collect artifacts), use a conditional instead:

-            npm run test:all || true
+            npm run test:all; TEST_EXIT=$?
+            exit $TEST_EXIT

Also applies to: 43-43

🤖 Prompt for AI Agents
In .circleci/config.yml around line 28 (and also apply to line 43), the pipeline
is suppressing test failures with "|| true" which masks Playwright exit codes;
remove the "|| true" so the job exits non-zero on test failures, and if you
still need to collect artifacts after failures wrap the test command in a
conditional step or run tests in a separate step that always runs (using
CircleCI "when: always" or save-artifacts on failure) instead of silencing the
exit code.

Comment on lines +81 to +129
# Generate report URL dynamically (fixes 404)
- run:
name: Parse Playwright results and send Slack notification
name: Parse Playwright results and send Slack
when: always
command: |
RESULTS_FILE="/tmp/test-results/.last-run.json"

if [ ! -f "$RESULTS_FILE" ]; then
echo ".last-run.json not found — cannot generate Slack report"
exit 0
fi

# Fetch real signed artifact URL from CircleCI API
REPORT_URL=$(curl -s -H "Circle-Token: $CIRCLECI_TOKEN" \
"https://circleci.com/api/v2/project/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}/artifacts" \
| jq -r '.items[] | select(.path | endswith("playwright-report/index.html")) | .url')


if [ -z "$REPORT_URL" ]; then
REPORT_URL="No report found"
fi

STATUS=$(jq -r '.status' $RESULTS_FILE)
FAILED_TESTS=$(jq -r '.failedTests | join(", ")' $RESULTS_FILE)


JOB_URL="https://app.circleci.com/pipelines/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}"

if [ "$STATUS" == "passed" ]; then
SLACK_MESSAGE=":white_check_mark: All Playwright UI tests passed
*Project:* ${CIRCLE_PROJECT_REPONAME}
*Triggered by:* ${CIRCLE_USERNAME}
*Branch:* ${CIRCLE_BRANCH}
*Job:* <${JOB_URL}|Open Job>
*Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>
*Report:* <https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/playwright-report/index.html|View HTML Report>"
*Report:* <${REPORT_URL}|View HTML Report>"
else
SLACK_MESSAGE=":x: *Playwright UI Tests Failed :x:*
SLACK_MESSAGE=":x: *Playwright UI Tests Failed*
*Project:* ${CIRCLE_PROJECT_REPONAME}
*Triggered by:* ${CIRCLE_USERNAME}
*Branch:* ${CIRCLE_BRANCH}
*Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>
*Job:* <${JOB_URL}|Open Job>
*Failed Tests:* ${FAILED_TESTS}
*Report:* <https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/playwright-report/index.html|View HTML Report>"
*Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>
*Report:* <${REPORT_URL}|View HTML Report>"
fi

curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"${SLACK_MESSAGE}\"}" $E2E_SLACK_WEBHOOK_URL

curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"${SLACK_MESSAGE//$'\n'/\\n}\"}" \
$E2E_SLACK_WEBHOOK_URL
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Missing error handling for CircleCI API calls and JSON parsing.

The Slack reporting step assumes several things that may fail silently:

  1. Line 94: $CIRCLECI_TOKEN is set and valid. If missing or expired, the API call returns an error or 401, and jq silently returns empty, setting REPORT_URL to "No report found" without distinguishing between a retrieval error and a legitimate missing report.

  2. Line 103–104: .last-run.json contains status and failedTests fields with the expected structure. If the schema changes or the file is corrupted, jq parsing fails silently.

  3. Line 106: CIRCLE_BUILD_NUM exists. If missing, the job URL will be malformed.

Add validation and logging:

+            # Validate required env vars
+            for var in CIRCLECI_TOKEN CIRCLE_PROJECT_USERNAME CIRCLE_PROJECT_REPONAME CIRCLE_BUILD_NUM CIRCLE_SHA1 E2E_SLACK_WEBHOOK_URL; do
+              if [ -z "${!var}" ]; then
+                echo "ERROR: $var is not set"
+                exit 1
+              fi
+            done
+
             RESULTS_FILE="/tmp/test-results/.last-run.json"
             
             if [ ! -f "$RESULTS_FILE" ]; then
               echo ".last-run.json not found — cannot generate Slack report"
               exit 0
             fi
             
             # Fetch real signed artifact URL from CircleCI API
+            REPORT_RESPONSE=$(curl -s -w "\n%{http_code}" -H "Circle-Token: $CIRCLECI_TOKEN" \
+              "https://circleci.com/api/v2/project/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}/artifacts")
+            HTTP_CODE=$(echo "$REPORT_RESPONSE" | tail -n1)
+            REPORT_JSON=$(echo "$REPORT_RESPONSE" | head -n-1)
+            
+            if [ "$HTTP_CODE" != "200" ]; then
+              echo "ERROR: CircleCI API returned HTTP $HTTP_CODE"
+              REPORT_URL="Unable to retrieve report URL (API error)"
+            else
-            REPORT_URL=$(curl -s -H "Circle-Token: $CIRCLECI_TOKEN" \
-                "https://circleci.com/api/v2/project/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}/artifacts" \
-                | jq -r '.items[] | select(.path | endswith("playwright-report/index.html")) | .url')
+              REPORT_URL=$(echo "$REPORT_JSON" | jq -r '.items[] | select(.path | endswith("playwright-report/index.html")) | .url')
+            fi
             
             if [ -z "$REPORT_URL" ]; then
               REPORT_URL="No report found"
             fi
+            
+            # Validate JSON structure
+            if ! jq -e '.status' "$RESULTS_FILE" > /dev/null 2>&1; then
+              echo "ERROR: .last-run.json missing 'status' field"
+              exit 1
+            fi
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Generate report URL dynamically (fixes 404)
- run:
name: Parse Playwright results and send Slack notification
name: Parse Playwright results and send Slack
when: always
command: |
RESULTS_FILE="/tmp/test-results/.last-run.json"
if [ ! -f "$RESULTS_FILE" ]; then
echo ".last-run.json not found — cannot generate Slack report"
exit 0
fi
# Fetch real signed artifact URL from CircleCI API
REPORT_URL=$(curl -s -H "Circle-Token: $CIRCLECI_TOKEN" \
"https://circleci.com/api/v2/project/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}/artifacts" \
| jq -r '.items[] | select(.path | endswith("playwright-report/index.html")) | .url')
if [ -z "$REPORT_URL" ]; then
REPORT_URL="No report found"
fi
STATUS=$(jq -r '.status' $RESULTS_FILE)
FAILED_TESTS=$(jq -r '.failedTests | join(", ")' $RESULTS_FILE)
JOB_URL="https://app.circleci.com/pipelines/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}"
if [ "$STATUS" == "passed" ]; then
SLACK_MESSAGE=":white_check_mark: All Playwright UI tests passed
*Project:* ${CIRCLE_PROJECT_REPONAME}
*Triggered by:* ${CIRCLE_USERNAME}
*Branch:* ${CIRCLE_BRANCH}
*Job:* <${JOB_URL}|Open Job>
*Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>
*Report:* <https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/playwright-report/index.html|View HTML Report>"
*Report:* <${REPORT_URL}|View HTML Report>"
else
SLACK_MESSAGE=":x: *Playwright UI Tests Failed :x:*
SLACK_MESSAGE=":x: *Playwright UI Tests Failed*
*Project:* ${CIRCLE_PROJECT_REPONAME}
*Triggered by:* ${CIRCLE_USERNAME}
*Branch:* ${CIRCLE_BRANCH}
*Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>
*Job:* <${JOB_URL}|Open Job>
*Failed Tests:* ${FAILED_TESTS}
*Report:* <https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/playwright-report/index.html|View HTML Report>"
*Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>
*Report:* <${REPORT_URL}|View HTML Report>"
fi
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"${SLACK_MESSAGE}\"}" $E2E_SLACK_WEBHOOK_URL
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"${SLACK_MESSAGE//$'\n'/\\n}\"}" \
$E2E_SLACK_WEBHOOK_URL
# Generate report URL dynamically (fixes 404)
- run:
name: Parse Playwright results and send Slack
when: always
command: |
# Validate required env vars
for var in CIRCLECI_TOKEN CIRCLE_PROJECT_USERNAME CIRCLE_PROJECT_REPONAME CIRCLE_BUILD_NUM CIRCLE_SHA1 E2E_SLACK_WEBHOOK_URL; do
if [ -z "${!var}" ]; then
echo "ERROR: $var is not set"
exit 1
fi
done
RESULTS_FILE="/tmp/test-results/.last-run.json"
if [ ! -f "$RESULTS_FILE" ]; then
echo ".last-run.json not found — cannot generate Slack report"
exit 0
fi
# Fetch real signed artifact URL from CircleCI API
REPORT_RESPONSE=$(curl -s -w "\n%{http_code}" -H "Circle-Token: $CIRCLECI_TOKEN" \
"https://circleci.com/api/v2/project/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}/artifacts")
HTTP_CODE=$(echo "$REPORT_RESPONSE" | tail -n1)
REPORT_JSON=$(echo "$REPORT_RESPONSE" | head -n-1)
if [ "$HTTP_CODE" != "200" ]; then
echo "ERROR: CircleCI API returned HTTP $HTTP_CODE"
REPORT_URL="Unable to retrieve report URL (API error)"
else
REPORT_URL=$(echo "$REPORT_JSON" | jq -r '.items[] | select(.path | endswith("playwright-report/index.html")) | .url')
fi
if [ -z "$REPORT_URL" ]; then
REPORT_URL="No report found"
fi
# Validate JSON structure
if ! jq -e '.status' "$RESULTS_FILE" > /dev/null 2>&1; then
echo "ERROR: .last-run.json missing 'status' field"
exit 1
fi
STATUS=$(jq -r '.status' $RESULTS_FILE)
FAILED_TESTS=$(jq -r '.failedTests | join(", ")' $RESULTS_FILE)
JOB_URL="https://app.circleci.com/pipelines/github/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_BUILD_NUM}"
if [ "$STATUS" == "passed" ]; then
SLACK_MESSAGE=":white_check_mark: All Playwright UI tests passed
*Project:* ${CIRCLE_PROJECT_REPONAME}
*Triggered by:* ${CIRCLE_USERNAME}
*Branch:* ${CIRCLE_BRANCH}
*Job:* <${JOB_URL}|Open Job>
*Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>
*Report:* <${REPORT_URL}|View HTML Report>"
else
SLACK_MESSAGE=":x: *Playwright UI Tests Failed*
*Project:* ${CIRCLE_PROJECT_REPONAME}
*Triggered by:* ${CIRCLE_USERNAME}
*Branch:* ${CIRCLE_BRANCH}
*Job:* <${JOB_URL}|Open Job>
*Failed Tests:* ${FAILED_TESTS}
*Commit:* <https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/commit/${CIRCLE_SHA1}|${CIRCLE_SHA1}>
*Report:* <${REPORT_URL}|View HTML Report>"
fi
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"${SLACK_MESSAGE//$'\n'/\\n}\"}" \
$E2E_SLACK_WEBHOOK_URL

@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented Nov 25, 2025

Deploying pillarx-debug with  Cloudflare Pages  Cloudflare Pages

Latest commit: 3699812
Status: ✅  Deploy successful!
Preview URL: https://09da84fd.pillarx-debug.pages.dev
Branch Preview URL: https://e2e.pillarx-debug.pages.dev

View logs

@chetanbothra chetanbothra merged commit 633b361 into staging Nov 25, 2025
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants