11name : e2e tests
22
33on :
4- # Nightly workflow - Run E2E tests on a schedule
4+ # Nightly workflow - Run at 2 AM UTC daily
55 schedule :
6- - cron : ' 0 2 * * *' # Run at 2 AM UTC daily
6+ - cron : ' 0 2 * * *'
77 # Post-merge - Run after changes are merged to main
88 push :
99 branches : [main]
3030 description : ' SFCC Sandbox API Host (optional, defaults to var)'
3131 required : false
3232 type : string
33- node_version :
34- description : ' Node.js version to test with'
35- required : false
36- default : ' lts/*'
37- type : choice
38- options :
39- - ' lts/-1'
40- - ' lts/*'
41- - ' latest'
42- os :
43- description : ' Operating system to test on'
44- required : false
45- default : ' ubuntu-latest'
46- type : choice
47- options :
48- - ' ubuntu-latest'
49- - ' windows-latest'
5033jobs :
5134 e2e-tests :
5235 strategy :
5336 matrix :
54- node_version : [22.x, 24.x]
37+ node-version : [22.x, 24.x]
5538 runs-on : ubuntu-latest
5639 environment : e2e-dev
57- timeout-minutes : 10 # E2E tests can take longer
40+ timeout-minutes : 25
5841 steps :
5942 - uses : actions/checkout@v4
6043 - uses : actions/setup-node@v4
@@ -69,11 +52,11 @@ jobs:
6952 SFCC_ACCOUNT_MANAGER_HOST : ${{ vars.SFCC_ACCOUNT_MANAGER_HOST }}
7053 SFCC_SANDBOX_API_HOST : ${{ vars.SFCC_SANDBOX_API_HOST }}
7154 run : |
72- if [ -n "$SFCC_CLIENT_ID" ] && [ -n "$SFCC_CLIENT_SECRET" ] && [ -n "$TEST_REALM" ] && [ -n "SFCC_ACCOUNT_MANAGER_HOST" ] && [ -n "SFCC_SANDBOX_API_HOST" ]; then
55+ if [ -n "$SFCC_CLIENT_ID" ] && [ -n "$SFCC_CLIENT_SECRET" ] && [ -n "$TEST_REALM" ] && [ -n "$ SFCC_ACCOUNT_MANAGER_HOST" ] && [ -n "$ SFCC_SANDBOX_API_HOST" ]; then
7356 echo "has-secrets=true" >> $GITHUB_OUTPUT
7457 else
7558 echo "has-secrets=false" >> $GITHUB_OUTPUT
76- echo "E2E tests skipped - missing required variables:" >> $GITHUB_STEP_SUMMARY
59+ echo " E2E tests skipped - missing required variables:" >> $GITHUB_STEP_SUMMARY
7760 echo " - SFCC_CLIENT_ID (var): ${SFCC_CLIENT_ID:+✓}" >> $GITHUB_STEP_SUMMARY
7861 echo " - TEST_REALM (var): ${TEST_REALM:+✓}" >> $GITHUB_STEP_SUMMARY
7962 echo " - SFCC_ACCOUNT_MANAGER_HOST (var): ${SFCC_ACCOUNT_MANAGER_HOST:+✓}" >> $GITHUB_STEP_SUMMARY
10689 - name : Run E2E Tests
10790 if : steps.check-secrets.outputs.has-secrets == 'true'
10891 id : e2e-test
92+ working-directory : packages/b2c-cli
10993 env :
110- # Required environment variables for Commerce Cloud integration
94+ # Required environment variables
11195 SFCC_CLIENT_ID : ${{ inputs.sfcc_client_id || vars.SFCC_CLIENT_ID }}
11296 SFCC_CLIENT_SECRET : ${{ inputs.sfcc_client_secret || secrets.SFCC_CLIENT_SECRET }}
11397 SFCC_ACCOUNT_MANAGER_HOST : ${{ inputs.sfcc_account_manager_host || vars.SFCC_ACCOUNT_MANAGER_HOST }}
@@ -118,6 +102,52 @@ jobs:
118102 SFCC_LOG_LEVEL : silent
119103 run : |
120104 echo "Running E2E tests with realm: ${TEST_REALM}"
105+ echo "Node version: $(node --version)"
121106
122- # Run E2E tests with JSON output for parsing
123- pnpm --filter @salesforce/b2c-cli run test:e2e
107+ # Run E2E tests with JSON reporter for test results
108+ pnpm run test:e2e && pnpm run lint
109+
110+ - name : E2E Test Report
111+ uses : dorny/test-reporter@fe45e9537387dac839af0d33ba56eed8e24189e8 # v2.3.0
112+ if : always() && steps.e2e-test.conclusion != 'cancelled' && steps.check-secrets.outputs.has-secrets == 'true'
113+ with :
114+ name : E2E Test Results (Node ${{ matrix.node-version }})
115+ path : ' packages/b2c-cli/test-results.json'
116+ reporter : mocha-json
117+
118+ - name : Upload E2E Test Results
119+ if : always() && steps.e2e-test.conclusion != 'cancelled' && steps.check-secrets.outputs.has-secrets == 'true'
120+ uses : actions/upload-artifact@v4
121+ with :
122+ name : e2e-test-results-node-${{ matrix.node-version }}-${{ github.run_number }}
123+ path : packages/b2c-cli/test-results.json
124+ retention-days : 30
125+
126+ - name : Notify on Failure
127+ if : failure() && (github.event_name == 'schedule' || github.event_name == 'push') && steps.check-secrets.outputs.has-secrets == 'true'
128+ uses : actions/github-script@v7
129+ with :
130+ script : |
131+ const issue = {
132+ owner: context.repo.owner,
133+ repo: context.repo.repo,
134+ title: `CLI E2E Tests Failed - ${new Date().toISOString().split('T')[0]}`,
135+ body: `## CLI E2E Test Failure
136+
137+ The CLI E2E tests have failed. Please investigate.
138+
139+ **Workflow:** ${context.workflow}
140+ **Run:** ${context.runNumber}
141+ **Commit:** ${context.sha}
142+ **Event:** ${context.eventName}
143+ **Node Version:** ${{ matrix.node-version }}
144+
145+ [View workflow run](${context.payload.repository.html_url}/actions/runs/${context.runId})
146+ `,
147+ labels: ['bug', 'e2e-failure', 'cli', 'needs-investigation']
148+ };
149+
150+ // Only create issue for scheduled runs to avoid spam
151+ if (context.eventName === 'schedule') {
152+ github.rest.issues.create(issue);
153+ }
0 commit comments