-
Notifications
You must be signed in to change notification settings - Fork 37
148 lines (130 loc) · 5.22 KB
/
browser.yml
File metadata and controls
148 lines (130 loc) · 5.22 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
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: [18, 21]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
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 == '21'
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 browser-contract-test-adapter browser-contract-test-service
- name: Install Playwright browsers
run: yarn workspace browser-contract-test-service install-playwright-browsers
- name: Build shared contract test utils
run: yarn workspace @launchdarkly/js-contract-test-utils build:client
- name: Build contract test adapter
run: yarn workspace browser-contract-test-adapter run build
- name: Build contract test entity (browser app)
run: yarn workspace browser-contract-test-service run build
- name: Start contract test adapter in background
run: |
yarn workspace browser-contract-test-adapter run start > /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
uses: launchdarkly/gh-actions/actions/contract-tests@1a3dc56945c8e87bc952119b055f9481b4d642b0
with:
test_service_port: 8000
token: ${{ secrets.GITHUB_TOKEN }}
extra_params: '--skip-from=${{ github.workspace }}/packages/sdk/browser/contract-tests/suppressions.txt --stop-service-at-end'
- 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 "browser-contract-test-adapter" || true
run-example:
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
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'