-
Notifications
You must be signed in to change notification settings - Fork 38
154 lines (136 loc) · 5.47 KB
/
browser.yml
File metadata and controls
154 lines (136 loc) · 5.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
name: sdk/browser
on:
push:
branches: [main, 'feat/**']
paths-ignore:
- '**.md' #Do not need to run CI for markdown changes.
pull_request:
branches: [main, 'feat/**']
paths-ignore:
- '**.md'
jobs:
build-test-browser:
permissions:
pull-requests: write
runs-on: ubuntu-latest
strategy:
matrix:
# Node versions to run on.
version: [20, 22]
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: ./actions/setup-yarn
with:
node-version: ${{ matrix.version }}
registry-url: 'https://registry.npmjs.org'
- id: shared
name: Shared CI Steps
uses: ./actions/ci
with:
workspace_name: '@launchdarkly/js-client-sdk'
workspace_path: packages/sdk/browser
- name: Check package size
if: github.event_name == 'pull_request' && matrix.version == '22'
uses: ./actions/package-size
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
target_file: 'packages/sdk/browser/dist/index.js'
package_name: '@launchdarkly/js-client-sdk'
pr_number: ${{ github.event.number }}
size_limit: 34000
# Contract Tests
- name: Install contract test dependencies
run: yarn workspaces focus @launchdarkly/browser-contract-test-service
- name: Install Playwright browsers
run: yarn workspace @launchdarkly/browser-contract-test-service install-playwright-browsers
- name: Build shared contract test utils
run: yarn workspaces foreach -pR --topological-dev --from '@launchdarkly/js-contract-test-utils' run build
- name: Build contract test entity (browser app)
run: yarn workspace @launchdarkly/browser-contract-test-service run build
- name: Start contract test adapter in background
run: |
yarn workspace @launchdarkly/browser-contract-test-service run start:adapter > /tmp/adapter.log 2>&1 &
echo $! > /tmp/adapter.pid
- name: Serve browser app with http-server
run: |
npx http-server packages/sdk/browser/contract-tests/entity/dist -p 5173 --cors > /tmp/http-server.log 2>&1 &
echo $! > /tmp/http-server.pid
- name: Wait for services to be ready
run: |
echo "Waiting for adapter on port 8001..."
for i in {1..30}; do
if nc -z localhost 8001; then
echo "Adapter WebSocket ready"
break
fi
if [ $i -eq 30 ]; then
echo "Timeout waiting for adapter"
cat /tmp/adapter.log
exit 1
fi
sleep 1
done
echo "Waiting for HTTP server on port 5173..."
for i in {1..30}; do
if curl -s http://localhost:5173 > /dev/null; then
echo "HTTP server ready"
break
fi
if [ $i -eq 30 ]; then
echo "Timeout waiting for HTTP server"
cat /tmp/http-server.log
exit 1
fi
sleep 1
done
- name: Open browser app in headless Chromium
run: |
node packages/sdk/browser/contract-tests/entity/open-browser.mjs http://localhost:5173 > /tmp/playwright.log 2>&1 &
echo $! > /tmp/playwright.pid
sleep 5 # Give the browser time to initialize and connect via WebSocket
- name: Run contract tests (FDv1)
uses: launchdarkly/gh-actions/actions/contract-tests@d271978e893b5b9facb9f000414e9fcd62e1f78b
with:
test_service_port: 8000
token: ${{ secrets.GITHUB_TOKEN }}
stop_service: 'false'
extra_params: '--skip-from=${{ github.workspace }}/packages/sdk/browser/contract-tests/suppressions.txt'
- name: Run contract tests (FDv2)
uses: launchdarkly/gh-actions/actions/contract-tests@d271978e893b5b9facb9f000414e9fcd62e1f78b
with:
test_service_port: 8000
token: ${{ secrets.GITHUB_TOKEN }}
version: v3
extra_params: '--skip-from=${{ github.workspace }}/packages/sdk/browser/contract-tests/suppressions_datamode_changes.txt'
- name: Print logs on failure
if: failure()
run: |
echo "=== Adapter Log ==="
cat /tmp/adapter.log || echo "No adapter log"
echo "=== HTTP Server Log ==="
cat /tmp/http-server.log || echo "No http-server log"
echo "=== Playwright Log ==="
cat /tmp/playwright.log || echo "No playwright log"
- name: Cleanup contract test services
if: always()
run: |
[ -f /tmp/playwright.pid ] && kill $(cat /tmp/playwright.pid) || true
[ -f /tmp/http-server.pid ] && kill $(cat /tmp/http-server.pid) || true
[ -f /tmp/adapter.pid ] && kill $(cat /tmp/adapter.pid) || true
pkill -f "playwright" || true
pkill -f "http-server" || true
pkill -f "sdk-testharness-server" || true
run-example:
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: ./actions/setup-yarn
with:
node-version: 24
- uses: ./actions/run-example
with:
workspace_name: '@launchdarkly/browser-example'
aws_assume_role: ${{ vars.AWS_ROLE_ARN }}
before_test: 'yarn workspace @launchdarkly/browser-example playwright install --with-deps chromium'