-
Notifications
You must be signed in to change notification settings - Fork 1
154 lines (136 loc) · 4.72 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
name: CI
on:
push:
branches:
- main
- staging
- production
pull_request:
types: [opened, synchronize]
env:
LOG_LEVEL: silent
jobs:
optimize_ci:
runs-on: ubuntu-latest # or whichever runner you use for your CI
outputs:
skip: ${{ steps.check_skip.outputs.skip }}
steps:
- name: Optimize CI
id: check_skip
uses: withgraphite/graphite-ci-action@main
with:
graphite_token: ${{ secrets.GRAPHITE_CI_OPTIMIZER_TOKEN }}
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Build
run: npm run build
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Lint
run: npm run lint && npm run lint:ws
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Format
run: npm run format
typecheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Typecheck
run: npm run typecheck
unit-integration-tests:
name: Unit & integration tests
needs: optimize_ci
runs-on: ubuntu-latest
if: needs.optimize_ci.outputs.skip == 'false'
steps:
- uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Install dependencies
# Not using test:unit dependency in Turbo because Datadog Test Visibility requires only the test suite to be run
run: turbo run generate --filter=isomer-studio
- name: Configure Datadog Test Visibility
uses: datadog/test-visibility-github-action@v2
with:
languages: js
service: isomer-studio
api_key: ${{ secrets.DD_API_KEY }}
- name: Test Studio
# Loose env mode required for env vars to be passed to the run
run: turbo test-ci:unit --filter=isomer-studio --env-mode=loose
env:
# Required to allow Datadog to trace Vitest tests
NODE_OPTIONS: -r ${{ env.DD_TRACE_PACKAGE }} --import ${{ env.DD_TRACE_ESM_IMPORT }}
- name: Test Components
run: turbo test-ci:unit --filter=@opengovsg/isomer-components --env-mode=loose
env:
# Required to allow Datadog to trace Vitest tests
NODE_OPTIONS: -r ${{ env.DD_TRACE_PACKAGE }} --import ${{ env.DD_TRACE_ESM_IMPORT }}
end-to-end-tests:
name: End-to-end tests
needs: optimize_ci
runs-on: ubuntu-latest
if: needs.optimize_ci.outputs.skip == 'false'
steps:
- uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Install Playwright (Chromium)
run: npx playwright install chromium
- name: Load .env file
uses: xom9ikk/dotenv@v2
with:
path: apps/studio
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: Build Studio app
# Loose env mode required for env vars to be passed to the run
run: turbo build --filter=isomer-studio --env-mode=loose
- name: Start test containers
run: npm run setup:test
- name: Configure Datadog Test Visibility
uses: datadog/test-visibility-github-action@v2
with:
languages: js
service: isomer-studio
api_key: ${{ secrets.DD_API_KEY }}
- name: Run Playwright tests
run: turbo test-ci:e2e --filter=isomer-studio --env-mode=loose
env:
# Required to allow Datadog to trace Playwright tests
NODE_OPTIONS: -r ${{ 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: test results
path: apps/studio/playwright/test-results
retention-days: 7