-
Notifications
You must be signed in to change notification settings - Fork 8
132 lines (120 loc) · 4.31 KB
/
ci.yml
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
name: CI
on:
push:
branches:
- main
# add more branches here for this job to run on
# - staging
# - production
pull_request:
types: [opened, synchronize]
permissions:
contents: read
checks: write
jobs:
install:
name: Install dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup
- name: Lint
run: npm run lint
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup
- name: Lint
run: npm run format
unit-integration-tests:
name: Unit & integration tests
needs:
- install
timeout-minutes: 15
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup
- name: Configure Datadog Test Visibility
env:
DD_SERVICE_NAME: ${{ secrets.DD_SERVICE_NAME }}
DD_API_KEY: ${{ secrets.DD_API_KEY }}
if: env.DD_SERVICE_NAME != '' && env.DD_API_KEY != ''
# datadog/[email protected], using commit hash to pin to silence codeQL
uses: datadog/test-visibility-github-action@fd12a97414bee507eff1270d8ac3286313e3797e
with:
languages: js
service: ${{ secrets.DD_SERVICE_NAME }}
api_key: ${{ secrets.DD_API_KEY }}
- name: Test
run: npm run test-ci:coverage
env:
# Required to allow Datadog to trace Vitest tests
NODE_OPTIONS: ${{ secrets.DD_API_KEY && secrets.DD_SERVICE_NAME && format('-r {0} --import {1}', env.DD_TRACE_PACKAGE, env.DD_TRACE_ESM_IMPORT) || '' }}
end-to-end-tests:
name: End-to-end tests
needs:
- install
timeout-minutes: 15
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
checks: write
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup
- name: Install Playwright (Chromium)
run: npx playwright install chromium
- name: Load .env file
# xom9ikk/dotenv@v2, using commit hash to pin as tags may be updated in supply chain attack
uses: xom9ikk/dotenv@eff1dce037c4c0143cc4180a810511024c2560c0
with:
mode: test
- name: Next.js cache
uses: actions/cache@v4
with:
# See here for caching with `yarn` https://github.com/actions/cache/blob/main/examples.md#node---yarn or you can leverage caching with actions/setup-node https://github.com/actions/setup-node
path: |
~/.npm
${{ github.workspace }}/.next/cache
# Generate a new cache whenever packages or source files change.
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
# If source files changed but packages didn't, rebuild from a prior cache.
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
- name: Start test containers
run: npm run setup:test
- name: Build app
run: npm run build
- name: Configure Datadog Test Visibility
env:
DD_SERVICE_NAME: ${{ secrets.DD_SERVICE_NAME }}
DD_API_KEY: ${{ secrets.DD_API_KEY }}
if: env.DD_SERVICE_NAME != '' && env.DD_API_KEY != ''
# datadog/[email protected], using commit hash to pin to silence codeQL
uses: datadog/test-visibility-github-action@fd12a97414bee507eff1270d8ac3286313e3797e
with:
languages: js
service: ${{ secrets.DD_SERVICE_NAME }}
api_key: ${{ secrets.DD_API_KEY }}
- name: Run Playwright tests
run: npm run test-ci:e2e
env:
# Required to allow Datadog to trace Playwright tests
NODE_OPTIONS: ${{ secrets.DD_API_KEY && secrets.DD_SERVICE_NAME && format('-r {0}', env.DD_TRACE_PACKAGE) || '' }}
- name: Stop test containers
run: npm run teardown
- name: Upload test results
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright/test-results/
retention-days: 7