Skip to content

Commit 54b22d7

Browse files
committed
test: Add E2E job on CI
1 parent 2111f21 commit 54b22d7

File tree

1 file changed

+286
-0
lines changed

1 file changed

+286
-0
lines changed

.github/workflows/e2e.yml

Lines changed: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,286 @@
1+
name: E2E
2+
3+
on: [push]
4+
5+
env:
6+
TZ: UTC
7+
OC_ENV: ci
8+
NODE_ENV: test
9+
WEBSITE_URL: http://localhost:3000
10+
IMAGES_URL: http://localhost:3001
11+
API_URL: http://localhost:3060
12+
API_KEY: dvl-1510egmf4a23d80342403fb599qd
13+
CI: true
14+
15+
E2E_TEST: 1
16+
PGHOST: localhost
17+
PGUSER: postgres
18+
CYPRESS_RECORD: false
19+
CYPRESS_VIDEO: false
20+
CYPRESS_VIDEO_UPLOAD_ON_PASSES: false
21+
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
22+
GITHUB_CLIENT_ID: ${{ secrets.GH_CLIENT_ID }}
23+
GITHUB_CLIENT_SECRET: ${{ secrets.GH_CLIENT_SECRET }}
24+
API_FOLDER: /home/runner/work/opencollective-pdf/opencollective-pdf/opencollective-api
25+
FRONTEND_FOLDER: /home/runner/work/opencollective-pdf/opencollective-pdf/opencollective-frontend
26+
IMAGES_FOLDER: /home/runner/work/opencollective-pdf/opencollective-pdf/opencollective-images
27+
PDF_FOLDER: /home/runner/work/opencollective-pdf/opencollective-pdf
28+
TERM: xterm
29+
STRIPE_WEBHOOK_KEY: ${{ secrets.STRIPE_WEBHOOK_KEY }}
30+
STRIPE_WEBHOOK_SIGNING_SECRET: ${{ secrets.STRIPE_WEBHOOK_SIGNING_SECRET }}
31+
32+
jobs:
33+
e2e:
34+
runs-on: ubuntu-latest
35+
timeout-minutes: 30
36+
37+
strategy:
38+
matrix:
39+
files: ['0*.js', '1*.js', '2*.js', '3*.js']
40+
41+
services:
42+
redis:
43+
image: redis
44+
ports:
45+
- 6379:6379
46+
options: --entrypoint redis-server
47+
postgres:
48+
image: postgres:13.9
49+
env:
50+
POSTGRES_USER: postgres
51+
POSTGRES_DB: postgres
52+
POSTGRES_HOST_AUTH_METHOD: trust
53+
ports:
54+
- 5432:5432
55+
# needed because the postgres container does not provide a healthcheck
56+
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
57+
58+
steps:
59+
- name: Update apt
60+
run: sudo apt-get update || exit 0
61+
62+
- name: Install Cypress dependencies
63+
run: sudo apt-get install --no-install-recommends -y libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb fonts-arphic-bkai00mp fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp fonts-arphic-gkai00mp fonts-arphic-ukai fonts-arphic-uming ttf-wqy-zenhei ttf-wqy-microhei xfonts-wqy
64+
65+
- name: Install postgresql-client
66+
run: sudo apt-get install -y postgresql-client
67+
68+
- name: Install graphicsmagick
69+
run: sudo apt-get install -y graphicsmagick
70+
71+
- name: Install stripe-cli
72+
run: |
73+
sudo apt-get install -y wget
74+
wget https://github.com/stripe/stripe-cli/releases/download/v1.13.9/stripe_1.13.9_linux_x86_64.tar.gz -O /tmp/stripe_1.13.9_linux_x86_64.tar.gz
75+
sudo tar xzvf /tmp/stripe_1.13.9_linux_x86_64.tar.gz -C /bin/
76+
77+
- name: Checkout
78+
uses: actions/checkout@v3
79+
80+
- name: Setup node
81+
uses: actions/setup-node@v3
82+
with:
83+
node-version-file: 'package.json'
84+
85+
# Npm cache
86+
87+
- name: Restore .npm cache
88+
uses: actions/cache@v3
89+
with:
90+
path: ~/.npm
91+
key: ${{ runner.os }}-npm-cache-${{ github.sha }}
92+
restore-keys: |
93+
- ${{ runner.os }}-npm-cache-${{ github.sha }}
94+
- ${{ runner.os }}-npm-cache-
95+
96+
# Checkout frontend
97+
98+
- name: Set REF in env, removing the `refs/` part
99+
run: echo "MATCHING_BRANCH_REF=$(echo $GITHUB_REF | sed 's|refs/||')" >> $GITHUB_ENV
100+
101+
- name: Check matching branch
102+
id: check-matching-branch-frontend
103+
uses: octokit/[email protected]
104+
with:
105+
route: GET /repos/{owner}/{repo}/git/ref/{ref}
106+
owner: opencollective
107+
repo: opencollective-frontend
108+
ref: ${{ env.MATCHING_BRANCH_REF }}
109+
env:
110+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
111+
continue-on-error: true
112+
113+
- name: Checkout (frontend - matching branch)
114+
if: steps.check-matching-branch-frontend.outputs.status == 200
115+
uses: actions/checkout@v3
116+
with:
117+
repository: opencollective/opencollective-frontend
118+
path: opencollective-frontend
119+
ref: ${{ github.ref }}
120+
121+
- name: Checkout (frontend - main)
122+
if: steps.check-matching-branch-frontend.outputs.status != 200
123+
uses: actions/checkout@v3
124+
with:
125+
repository: opencollective/opencollective-frontend
126+
path: opencollective-frontend
127+
128+
# Checkout API
129+
130+
- name: Check matching branch
131+
id: check-matching-branch-api-api
132+
uses: octokit/[email protected]
133+
with:
134+
route: GET /repos/{owner}/{repo}/git/ref/{ref}
135+
owner: opencollective
136+
repo: opencollective-api
137+
ref: ${{ env.MATCHING_BRANCH_REF }}
138+
env:
139+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
140+
continue-on-error: true
141+
142+
- name: Checkout (api - matching branch)
143+
if: steps.check-matching-branch-api.outputs.status == 200
144+
uses: actions/checkout@v3
145+
with:
146+
repository: opencollective/opencollective-api
147+
path: opencollective-api
148+
ref: ${{ github.ref }}
149+
150+
- name: Checkout (api - main)
151+
if: steps.check-matching-branch-api.outputs.status != 200
152+
uses: actions/checkout@v3
153+
with:
154+
repository: opencollective/opencollective-api
155+
path: opencollective-api
156+
157+
# Checkout other services
158+
159+
- name: Checkout (images)
160+
uses: actions/checkout@v3
161+
with:
162+
repository: opencollective/opencollective-images
163+
path: opencollective-images
164+
165+
# Prepare API
166+
167+
- name: Restore node_modules (api)
168+
uses: actions/cache@v3
169+
id: api-node-modules
170+
with:
171+
path: opencollective-api/node_modules
172+
key: ${{ runner.os }}-api-node-modules-${{ hashFiles('package-lock.json') }}-${{ secrets.CACHE_VERSION }}
173+
174+
- name: Install dependencies (api)
175+
working-directory: opencollective-api
176+
if: steps.api-node-modules.outputs.cache-hit != 'true'
177+
run: npm ci --prefer-offline --no-audit
178+
179+
- name: Restore build (api)
180+
uses: actions/cache@v3
181+
id: api-build
182+
with:
183+
path: opencollective-api/dist
184+
key: ${{ runner.os }}-api-build-${{ github.sha }}
185+
186+
- name: Build (api)
187+
if: steps.api-build.outputs.cache-hit != 'true'
188+
working-directory: opencollective-api
189+
run: npm run build
190+
191+
# Prepare Frontend
192+
193+
- name: Restore node_modules (frontend)
194+
uses: actions/cache@v3
195+
id: frontend-node-modules
196+
with:
197+
path: opencollective-frontend/node_modules
198+
key: ${{ runner.os }}-frontend-node-modules-${{ hashFiles('opencollective-frontend/package-lock.json') }}
199+
200+
- name: Install dependencies (frontend)
201+
if: steps.frontend-node-modules.outputs.cache-hit != 'true'
202+
working-directory: opencollective-frontend
203+
run: CYPRESS_INSTALL_BINARY=0 npm ci --prefer-offline --no-audit
204+
205+
- name: Set commit hash (frontend)
206+
working-directory: opencollective-frontend
207+
run: echo "FRONTEND_COMMIT_HASH=$(git rev-parse HEAD)" >> $GITHUB_ENV
208+
209+
- name: Restore .next build (frontend)
210+
uses: actions/cache@v3
211+
id: next-build
212+
with:
213+
path: opencollective-frontend/.next
214+
key: ${{ runner.os }}-next-build-${{ env.FRONTEND_COMMIT_HASH }}
215+
216+
- name: Restore .next cache (frontend)
217+
if: steps.next-build.outputs.cache-hit != 'true'
218+
uses: actions/cache@v3
219+
with:
220+
path: opencollective-frontend/.next/cache
221+
key: ${{ runner.os }}-next-cache-${{ env.FRONTEND_COMMIT_HASH }}
222+
restore-keys: |
223+
${{ runner.os }}-next-cache-${{ env.FRONTEND_COMMIT_HASH }}
224+
${{ runner.os }}-next-cache-
225+
226+
- name: Build (frontend)
227+
if: steps.next-build.outputs.cache-hit != 'true'
228+
working-directory: opencollective-frontend
229+
run: npm run build
230+
231+
# Prepare Images
232+
233+
- name: Restore node_modules (images)
234+
uses: actions/cache@v3
235+
id: images-node-modules
236+
with:
237+
path: opencollective-images/node_modules
238+
key: ${{ runner.os }}-images-node-modules-${{ hashFiles('opencollective-images/package-lock.json') }}
239+
240+
- name: Install dependencies (images)
241+
working-directory: opencollective-images
242+
if: steps.images-node-modules.outputs.cache-hit != 'true'
243+
run: npm ci --prefer-offline --no-audit
244+
245+
- name: Build (images)
246+
working-directory: opencollective-images
247+
run: npm run build
248+
249+
# Setup Cypress
250+
251+
- name: Restore Cypress
252+
uses: actions/cache@v3
253+
id: cypress
254+
with:
255+
path: ~/.cache/Cypress
256+
key: ${{ runner.os }}-cypress-${{ hashFiles('opencollective-frontend/node_modules/cypress/package.json') }}
257+
258+
- name: Install Cypress
259+
if: steps.cypress.outputs.cache-hit != 'true'
260+
working-directory: opencollective-frontend
261+
run: npx cypress install
262+
263+
# Run E2E
264+
- name: Show current directory
265+
run: pwd
266+
- name: Show current directory (2)
267+
run: ls
268+
- name: Show current directory (3)
269+
run: ls ..
270+
271+
- name: Setup DB
272+
working-directory: opencollective-frontend
273+
run: ./scripts/setup_db.sh
274+
275+
- name: Run E2E with Cypress
276+
working-directory: opencollective-frontend
277+
run: ./scripts/run_e2e_tests.sh
278+
env:
279+
CYPRESS_TEST_FILES: ${{ matrix.files }}
280+
281+
- name: Archive test screenshots
282+
uses: actions/upload-artifact@v3
283+
with:
284+
name: screenshots
285+
path: opencollective-frontend/test/cypress/screenshots
286+
if: ${{ failure() }}

0 commit comments

Comments
 (0)