11name : Test on React
2- env :
3- BRANCH_NAME_RAW : ${{ github.head_ref || github.ref_name }}
42
53on :
64 pull_request :
1210 test :
1311 timeout-minutes : 60
1412 runs-on : ubuntu-24.04
13+ environment : ${{ matrix.testType }}
1514 strategy :
1615 fail-fast : false
1716 matrix :
@@ -20,44 +19,42 @@ jobs:
2019 configFile : playwright.config.complete.ts
2120 - testType : connect
2221 configFile : playwright.config.connect.ts
23- env :
24- PLAYWRIGHT_NUM_CORES : 4
25- PLAYWRIGHT_TEST_URL : ${{ secrets.PLAYWRIGHT_TEST_URL }}
2622
27- PLAYWRIGHT_JWT_TOKEN : ${{ secrets.PLAYWRIGHT_JWT_TOKEN }}
28- PLAYWRIGHT_GOOGLE_EMAIL : ${{ secrets.PLAYWRIGHT_GOOGLE_EMAIL }}
29- PLAYWRIGHT_GOOGLE_PASSWORD : ${{ secrets.PLAYWRIGHT_GOOGLE_PASSWORD }}
23+ env :
24+ # ── Shared (hardcoded) ──
25+ PLAYWRIGHT_NUM_CORES : 4
26+ DEFAULT_CORBADO_BACKEND_API_BASIC_AUTH : ${{ secrets.DEFAULT_CORBADO_BACKEND_API_BASIC_AUTH }}
27+
28+ # ── "complete" environment secrets (empty on connect runners) ──
29+ PLAYWRIGHT_JWT_TOKEN : ${{ secrets.PLAYWRIGHT_JWT_TOKEN }}
30+ PLAYWRIGHT_GOOGLE_EMAIL : ${{ secrets.PLAYWRIGHT_GOOGLE_EMAIL }}
31+ PLAYWRIGHT_GOOGLE_PASSWORD : ${{ secrets.PLAYWRIGHT_GOOGLE_PASSWORD }}
3032 PLAYWRIGHT_GOOGLE_TOTP_SECRET : ${{ secrets.PLAYWRIGHT_GOOGLE_TOTP_SECRET }}
3133
32- NEXT_PUBLIC_CORBADO_PROJECT_ID : ${{ secrets.NEXT_PUBLIC_CORBADO_PROJECT_ID }}
33- NEXT_PUBLIC_CORBADO_FRONTEND_API_URL_SUFFIX : ${{ secrets.NEXT_PUBLIC_CORBADO_FRONTEND_API_URL_SUFFIX }}
34- CORBADO_BACKEND_API_URL : ${{ secrets.CORBADO_BACKEND_API_URL }}
35- CORBADO_BACKEND_API_BASIC_AUTH : ${{ secrets.CORBADO_BACKEND_API_BASIC_AUTH }}
36- PLAYWRIGHT_CONNECT_PROJECT_ID : ${{ secrets.PLAYWRIGHT_CONNECT_PROJECT_ID }}
37- PLAYWRIGHT_NGROK_AUTH_TOKEN : ${{ secrets.PLAYWRIGHT_NGROK_AUTH_TOKEN }}
38- AWS_COGNITO_USER_POOL_ID : ${{ secrets.AWS_COGNITO_USER_POOL_ID }}
39- NEXT_PUBLIC_AWS_COGNITO_USER_POOL_ID : ${{ secrets.AWS_COGNITO_USER_POOL_ID }}
40- AWS_COGNITO_CLIENT_ID : ${{ secrets.AWS_COGNITO_CLIENT_ID }}
41- NEXT_PUBLIC_AWS_COGNITO_CLIENT_ID : ${{ vars.NEXT_PUBLIC_AWS_COGNITO_CLIENT_ID }}
42- AWS_COGNITO_CLIENT_SECRET : ${{ secrets.AWS_COGNITO_CLIENT_SECRET }}
43- AWS_REGION : ${{ secrets.AWS_REGION }}
44- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID_CONNECT_PLAYGROUND }}
45- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY_CONNECT_PLAYGROUND }}
46-
47- GITHUB_RUN_ID : ${{ github.run_id }}
48- SLACK_BOT_USER_OAUTH_TOKEN : ${{ secrets.SLACK_BOT_USER_OAUTH_TOKEN }}
49- GITHUB_BRANCH_NAME : ${{ github.ref_name }}
34+ # ── "connect" environment secrets (empty on complete runners) ──
35+ NEXT_PUBLIC_AWS_COGNITO_USER_POOL_ID : ${{ secrets.AWS_COGNITO_USER_POOL_ID }}
36+ NEXT_PUBLIC_AWS_COGNITO_CLIENT_ID : ${{ vars.NEXT_PUBLIC_AWS_COGNITO_CLIENT_ID }}
37+ CORBADO_BACKEND_API_BASIC_AUTH : ${{ secrets.DEFAULT_CORBADO_BACKEND_API_BASIC_AUTH }}
38+ PLAYWRIGHT_NGROK_AUTH_TOKEN : ${{ secrets.PLAYWRIGHT_NGROK_AUTH_TOKEN }}
39+ AWS_COGNITO_USER_POOL_ID : ${{ secrets.AWS_COGNITO_USER_POOL_ID }}
40+ AWS_COGNITO_CLIENT_ID : ${{ secrets.AWS_COGNITO_CLIENT_ID }}
41+ AWS_COGNITO_CLIENT_SECRET : ${{ secrets.AWS_COGNITO_CLIENT_SECRET }}
42+ AWS_REGION : ${{ secrets.AWS_REGION }}
43+ AWS_ACCESS_KEY_ID : ${{ secrets.COGNITO_AWS_ACCESS_KEY_ID }}
44+ AWS_SECRET_ACCESS_KEY : ${{ secrets.COGNITO_AWS_SECRET_ACCESS_KEY }}
5045
5146 steps :
5247 - name : Checkout code
5348 uses : actions/checkout@v4
5449
5550 - name : Set up Node.js
5651 uses : actions/setup-node@v4
52+ with :
53+ node-version : 24
5754
5855 - name : Cache node modules
5956 id : cache-npm
60- uses : actions/cache@v3
57+ uses : actions/cache@v4
6158 env :
6259 cache-name : cache-node-modules
6360 with :
7572 run : |
7673 npm i
7774 npm install lerna
78- npm install vercel@33.2.0
7975 npm list
8076
8177 - name : Build SDKs
@@ -85,23 +81,22 @@ jobs:
8581
8682 - name : Get installed Playwright version
8783 id : playwright-version
88- run : echo "::set-output name= version:: $(yarn why --json @playwright/test | grep -h 'workspace:.' | jq --raw-output '.children[].locator' | sed -e 's/@playwright\/test@.*://')"
84+ run : echo "version= $(yarn why --json @playwright/test | grep -h 'workspace:.' | jq --raw-output '.children[].locator' | sed -e 's/@playwright\/test@.*://')" >> "$GITHUB_OUTPUT "
8985
9086 - if : ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
9187 name : List the state of node modules
9288 continue-on-error : true
93- run : |
94- cd packages/tests-e2e
95- npm list
89+ working-directory : packages/tests-e2e
90+ run : npm list
9691
9792 - name : Install dependencies
93+ working-directory : packages/tests-e2e
9894 run : |
99- cd packages/tests-e2e
10095 npm install
10196 sudo apt-get update
10297 sudo apt-get install -y libxml2-utils
10398
104- - uses : actions/cache@v3
99+ - uses : actions/cache@v4
105100 id : playwright-cache
106101 with :
107102 path : ' ~/.cache/ms-playwright'
@@ -111,26 +106,24 @@ jobs:
111106
112107 - name : Install Playwright's dependencies
113108 if : steps.playwright-cache.outputs.cache-hit != 'true'
114- run : |
115- cd packages/tests-e2e
116- npx playwright install --with-deps
109+ working-directory : packages/tests-e2e
110+ run : npx playwright install --with-deps
117111
118- - name : Create a log stream on AWS CloudWatch
112+ - name : Create CloudWatch log stream
119113 env :
120- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
121- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
114+ AWS_ACCESS_KEY_ID : ${{ vars.CLOUDWATCH_AWS_ACCESS_KEY_ID }}
115+ AWS_SECRET_ACCESS_KEY : ${{ secrets.CLOUDWATCH_AWS_SECRET_ACCESS_KEY }}
122116 AWS_REGION : ${{ secrets.AWS_REGION }}
123117 run : |
124118 TIMESTAMP=$(date +%s000)
125- RANDOM_SUFFIX=$(head /dev/urandom | tr -dc a-z0-9 | head -c 6)
119+ RANDOM_SUFFIX=$(head /dev/urandom | tr -dc ' a-z0-9' | head -c 6)
126120 LOG_STREAM_NAME="javascript-${TIMESTAMP}-${RANDOM_SUFFIX}"
127- echo "LOG_STREAM_NAME=$LOG_STREAM_NAME" >> $GITHUB_ENV
121+ echo "LOG_STREAM_NAME=$LOG_STREAM_NAME" >> " $GITHUB_ENV"
128122 aws logs create-log-stream --log-group-name "test-results-board" --log-stream-name "$LOG_STREAM_NAME"
129123
130124 - name : Run ${{ matrix.testType }} tests for react
131125 working-directory : packages/tests-e2e
132- run : |
133- npx playwright test --config=${{ matrix.configFile }}
126+ run : npx playwright test --config=${{ matrix.configFile }}
134127
135128 - uses : actions/upload-artifact@v4
136129 if : always()
@@ -139,21 +132,14 @@ jobs:
139132 path : packages/tests-e2e/playwright-report/
140133 retention-days : 30
141134
142- - name : Send logs to AWS CloudWatch
135+ - name : Send results to CloudWatch
143136 if : always()
144137 env :
145- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
146- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
138+ AWS_ACCESS_KEY_ID : ${{ vars.CLOUDWATCH_AWS_ACCESS_KEY_ID }}
139+ AWS_SECRET_ACCESS_KEY : ${{ secrets.CLOUDWATCH_AWS_SECRET_ACCESS_KEY }}
147140 AWS_REGION : ${{ secrets.AWS_REGION }}
148141 run : |
149- cd packages/tests-e2e
150- TESTS=$(xmllint --xpath 'string(/testsuites/@tests)' test-results/results.xml)
151- FAILURES=$(xmllint --xpath 'string(/testsuites/@failures)' test-results/results.xml)
152- SKIPPED=$(xmllint --xpath 'string(/testsuites/@skipped)' test-results/results.xml)
153- ERRORS=$(xmllint --xpath 'string(/testsuites/@errors)' test-results/results.xml)
154- TIME=$(xmllint --xpath 'string(/testsuites/@time)' test-results/results.xml)
155- PASSED=$((TESTS - FAILURES - ERRORS - SKIPPED))
156- FAILED=$((FAILURES + ERRORS))
157- TIMESTAMP=$(date +%s000)
158- LOG_EVENT_JSON="[{\"timestamp\":$TIMESTAMP,\"message\":\"{\\\"application\\\":\\\"${{ matrix.testType }}\\\",\\\"platform\\\":\\\"react\\\",\\\"run_type\\\":\\\"commitly\\\",\\\"execution_time\\\":$TIME,\\\"passed\\\":$PASSED,\\\"failed\\\":$FAILED,\\\"link\\\":\\\"https://github.com/corbado/javascript/actions/runs/${GITHUB_RUN_ID}\\\"}\"}]"
159- aws logs put-log-events --log-group-name "test-results-board" --log-stream-name "$LOG_STREAM_NAME" --log-events "$LOG_EVENT_JSON"
142+ bash scripts/cloudwatch-log.sh \
143+ "${{ matrix.testType }}" \
144+ "react" \
145+ "commitly"
0 commit comments