@@ -19,10 +19,23 @@ concurrency:
1919 cancel-in-progress : ${{ github.event_name == 'pull_request' }}
2020
2121jobs :
22- test :
23- name : " E2E · current "
22+ test-no-publish :
23+ name : " E2E · ${{ matrix.cell }} "
2424 runs-on : ubuntu-latest
25- timeout-minutes : 55
25+ timeout-minutes : 25
26+ strategy :
27+ fail-fast : false
28+ max-parallel : 5
29+ matrix :
30+ include :
31+ - cell : pr-install
32+ pattern : " dot install"
33+ - cell : pr-preflight
34+ pattern : " dot build|preflight and validation"
35+ - cell : pr-mod
36+ pattern : " dot mod — clone"
37+ - cell : pr-init-session
38+ pattern : " dot init|session management"
2639 outputs :
2740 tag : ${{ steps.tag.outputs.tag }}
2841 steps :
@@ -62,13 +75,89 @@ jobs:
6275 echo "tag=$TAG" >> "$GITHUB_OUTPUT"
6376 echo "Resolved DOT_TAG=$TAG (event=${{ github.event_name }})"
6477
65- - name : Run E2E tests (one retry on transient testnet failures)
78+ - name : Run E2E cell (one retry on transient testnet failures)
79+ uses : nick-fields/retry@v3
80+ with :
81+ timeout_minutes : 20
82+ max_attempts : 2
83+ retry_wait_seconds : 30
84+ command : pnpm exec vitest run --config e2e/vitest.config.ts -t "${{ matrix.pattern }}"
85+ env :
86+ TEST_TEMPLATE_DOMAIN : dot-cli-mod-fixture.dot
87+ TEST_TEMPLATE_REPO : https://github.com/paritytech/Rock-Paper-Scissors
88+ DOT_DEPLOY_VERBOSE : " 1"
89+ DOT_TAG : ${{ steps.tag.outputs.tag }}
90+ DOT_TELEMETRY : " 1"
91+
92+ - name : Upload forensic artefacts
93+ if : always()
94+ continue-on-error : true
95+ uses : actions/upload-artifact@v4
96+ with :
97+ name : e2e-reports-${{ matrix.cell }}
98+ path : e2e-reports/
99+ retention-days : 7
100+ if-no-files-found : ignore
101+
102+ test-publish :
103+ name : " E2E · ${{ matrix.cell }}"
104+ runs-on : ubuntu-latest
105+ timeout-minutes : 55
106+ strategy :
107+ fail-fast : false
108+ max-parallel : 1 # serial — share SIGNER + registry domains
109+ matrix :
110+ include :
111+ - cell : pr-deploy-frontend
112+ pattern : " full pipeline"
113+ - cell : pr-deploy-foundry
114+ pattern : " deploy — foundry"
115+ - cell : pr-deploy-cdm
116+ pattern : " deploy — CDM"
117+ steps :
118+ - uses : actions/checkout@v4
119+
120+ - uses : pnpm/action-setup@v4
121+
122+ - uses : actions/setup-node@v4
123+ with :
124+ node-version : " 22"
125+
126+ - uses : oven-sh/setup-bun@v2
127+ with :
128+ bun-version : latest
129+
130+ - name : Install Kubo (IPFS)
131+ run : |
132+ wget -q https://dist.ipfs.tech/kubo/v0.32.1/kubo_v0.32.1_linux-amd64.tar.gz
133+ tar xf kubo_v0.32.1_linux-amd64.tar.gz
134+ sudo mv kubo/ipfs /usr/local/bin/
135+ ipfs init --profile=test
136+ ipfs version
137+
138+ - run : pnpm install
139+
140+ - name : Resolve DOT_TAG from trigger
141+ id : tag
142+ shell : bash
143+ run : |
144+ # Phase 1 triggers: pull_request / push:main / schedule / workflow_dispatch.
145+ # Phase 7 will add `release` (with TAG=e2e-ci-release).
146+ case "${{ github.event_name }}" in
147+ schedule) TAG=e2e-ci-nightly ;;
148+ workflow_dispatch) TAG=e2e-ci-dispatch ;;
149+ *) TAG=e2e-ci-pr ;;
150+ esac
151+ echo "tag=$TAG" >> "$GITHUB_OUTPUT"
152+ echo "Resolved DOT_TAG=$TAG (event=${{ github.event_name }})"
153+
154+ - name : Run E2E cell (one retry on transient testnet failures)
66155 uses : nick-fields/retry@v3
67156 with :
68157 timeout_minutes : 25
69158 max_attempts : 2
70159 retry_wait_seconds : 30
71- command : pnpm test: e2e
160+ command : pnpm exec vitest run --config e2e/vitest.config.ts -t "${{ matrix.pattern }}"
72161 env :
73162 TEST_TEMPLATE_DOMAIN : dot-cli-mod-fixture.dot
74163 TEST_TEMPLATE_REPO : https://github.com/paritytech/Rock-Paper-Scissors
@@ -81,22 +170,19 @@ jobs:
81170 continue-on-error : true
82171 uses : actions/upload-artifact@v4
83172 with :
84- name : e2e-reports-current
173+ name : e2e-reports-${{ matrix.cell }}
85174 path : e2e-reports/
86175 retention-days : 7
87176 if-no-files-found : ignore
88177
89178 report :
90179 name : E2E Report
91- needs : [test]
180+ needs : [test-no-publish, test-publish ]
92181 if : always()
93182 runs-on : ubuntu-latest
94183 timeout-minutes : 5
95184 steps :
96185 - name : Download JUnit + forensic artefacts
97- # Phase 1 has one upload (e2e-reports-current). When Phase 4 adds
98- # the matrix, drop `merge-multiple: true` and parse per-cell sub-dirs
99- # so per-leg junit.xml don't collide on the same flat path.
100186 uses : actions/download-artifact@v4
101187 with :
102188 pattern : e2e-reports-*
@@ -127,11 +213,20 @@ jobs:
127213
128214 - name : Parse JUnit and render report body
129215 env :
130- AGGREGATE : ${{ needs.test.result }}
216+ AGGREGATE_PUBLISH : ${{ needs.test-publish.result }}
217+ AGGREGATE_NO_PUBLISH : ${{ needs.test-no-publish.result }}
131218 RUN_URL : ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
132- TAG : ${{ needs.test.outputs.tag }}
219+ TAG : ${{ needs.test-no-publish .outputs.tag }}
133220 shell : /usr/bin/bash -euo pipefail {0}
134221 run : |
222+ if [ "$AGGREGATE_PUBLISH" = "success" ] && [ "$AGGREGATE_NO_PUBLISH" = "success" ]; then
223+ AGGREGATE=success
224+ elif [ "$AGGREGATE_PUBLISH" = "cancelled" ] || [ "$AGGREGATE_NO_PUBLISH" = "cancelled" ]; then
225+ AGGREGATE=cancelled
226+ else
227+ AGGREGATE=failure
228+ fi
229+
135230 emoji() { case "$1" in
136231 success) echo "✅ PASS";;
137232 failure) echo "❌ FAIL";;
@@ -261,10 +356,10 @@ jobs:
261356 - name : Open failure issue
262357 if : >
263358 (github.event_name == 'schedule' || github.event_name == 'release') &&
264- needs.test.result != 'success'
359+ ( needs.test-no-publish .result != 'success' || needs.test-publish.result != 'success')
265360 env :
266361 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
267- TAG : ${{ needs.test.outputs.tag }}
362+ TAG : ${{ needs.test-no-publish .outputs.tag }}
268363 RUN_URL : ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
269364 API_URL : ${{ github.api_url }}
270365 REPO : ${{ github.repository }}
0 commit comments