forked from PostHog/posthog
-
Notifications
You must be signed in to change notification settings - Fork 0
386 lines (326 loc) · 14.4 KB
/
ci-backend.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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
name: Backend CI
on:
- pull_request
env:
SECRET_KEY: '6b01eee4f945ca25045b5aab440b953461faf08693a9abbf1166dc7c6b9772da' # unsafe - for testing only
DATABASE_URL: 'postgres://posthog:posthog@localhost:5432/posthog'
REDIS_URL: 'redis://localhost'
CLICKHOUSE_HOST: 'localhost'
CLICKHOUSE_SECURE: 'False'
CLICKHOUSE_VERIFY: 'False'
SAML_DISABLED: 1
TEST: 1
jobs:
# Job to decide if we should run backend ci
# See https://github.com/dorny/paths-filter#conditional-execution for more details
changes:
runs-on: ubuntu-latest
name: Determine need to run backend checks
# Set job outputs to values from filter step
outputs:
backend: ${{ steps.filter.outputs.backend }}
steps:
# For pull requests it's not necessary to checkout the code
- uses: dorny/paths-filter@v2
id: filter
with:
filters: |
backend:
# Avoid running backend tests for irrelevant changes
# NOTE: we are at risk of missing a dependency here. We could make
# the dependencies more clear if we separated the backend/frontend
# code completely
- 'ee/**/*'
- 'posthog/**/*'
- requirements.txt
- requirements-dev.txt
- mypy.ini
- pytest.ini
# Make sure we run if someone is explicitly change the workflow
- .github/workflows/ci-backend.yml
backend-code-quality:
needs: changes
# Make sure we only run on backend changes
if: ${{ needs.changes.outputs.backend == 'true' }}
name: Code quality checks
runs-on: ubuntu-latest
services:
postgres:
image: postgres:12
env:
POSTGRES_USER: posthog
POSTGRES_PASSWORD: posthog
POSTGRES_DB: posthog
ports: ['5432:5432']
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 1
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install SAML (python3-saml) dependencies
run: sudo apt-get install libxml2-dev libxmlsec1-dev libxmlsec1-openssl
- uses: syphar/[email protected]
id: cache-backend-tests-saml
- uses: syphar/restore-pip-download-cache@v1
if: steps.cache-backend-tests-saml.outputs.cache-hit != 'true'
- name: Install python dependencies
if: steps.cache-backend-tests-saml.outputs.cache-hit != 'true'
run: |
python -m pip install -r requirements-dev.txt
python -m pip install -r requirements.txt
- name: Check formatting
run: |
black --check .
isort --check-only .
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=120 --statistics
- name: Typecheck
run: |
mypy .
django:
needs: changes
if: ${{ needs.changes.outputs.backend == 'true' }}
name: Django tests – Py ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.8.5', '3.9.0']
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 1
- name: Start stack with Docker Compose
run: docker-compose -f ee/docker-compose.ch.yml up -d db clickhouse zookeeper kafka
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- uses: syphar/[email protected]
id: cache-backend-tests
- uses: syphar/restore-pip-download-cache@v1
if: steps.cache-backend-tests.outputs.cache-hit != 'true'
- name: Install python dependencies
if: steps.cache-backend-tests.outputs.cache-hit != 'true'
run: |
python -m pip install -r requirements-dev.txt
python -m pip install -r requirements.txt
- name: Check migrations
run: |
python manage.py makemigrations --check --dry-run
git fetch origin master
git diff --name-only origin/master..HEAD | grep posthog/migrations | python manage.py test_migrations_are_null
- name: Add kafka host to /etc/hosts for kafka connectivity
run: sudo echo "127.0.0.1 kafka" | sudo tee -a /etc/hosts
- name: Run posthog tests
run: |
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/shared_dashboard.html
pytest -m "not ee" posthog/ --cov --cov-report=xml:coverage-postgres.xml
- name: Run EE tests
env:
PRIMARY_DB: 'clickhouse'
run: |
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/shared_dashboard.html
pytest ee -m "not saml_only" --cov --cov-report=xml:coverage-clickhouse.xml
pytest posthog -m "ee"
- uses: codecov/codecov-action@v2
with:
files: ./coverage-postgres.xml,./coverage-clickhouse.xml
fail_ci_if_error: false
verbose: true
saml:
needs: changes
if: ${{ needs.changes.outputs.backend == 'true' }}
name: Django tests – with SAML
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 1
- name: Start stack with Docker Compose
run: docker-compose -f ee/docker-compose.ch.yml up -d db clickhouse zookeeper kafka
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install SAML (python3-saml) dependencies (not required for Cloud or FOSS)
run: sudo apt-get install libxml2-dev libxmlsec1-dev libxmlsec1-openssl
- uses: syphar/[email protected]
id: cache-backend-tests-saml
- uses: syphar/restore-pip-download-cache@v1
if: steps.cache-backend-tests-saml.outputs.cache-hit != 'true'
- name: Install python dependencies
if: steps.cache-backend-tests-saml.outputs.cache-hit != 'true'
run: |
python -m pip install -r requirements-dev.txt
python -m pip install -r requirements.txt
python -m pip install python3-saml==1.12.0
- name: Add kafka host to /etc/hosts for kafka connectivity
run: sudo echo "127.0.0.1 kafka" | sudo tee -a /etc/hosts
- name: Run posthog tests
run: |
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/shared_dashboard.html
pytest -m "not ee" posthog/
- name: Run EE tests
env:
PRIMARY_DB: 'clickhouse'
run: |
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/shared_dashboard.html
pytest ee/
pytest posthog -m "ee"
cloud:
needs: changes
if: ${{ needs.changes.outputs.backend == 'true' }}
name: Django tests – Cloud
runs-on: ubuntu-latest
steps:
- name: Fetch posthog-cloud
run: |
curl -L https://github.com/posthog/posthog-cloud/tarball/master | tar --strip-components=1 -xz --
mkdir deploy/
- name: Checkout master
uses: actions/checkout@v2
with:
ref: 'master'
path: 'deploy/'
- name: Link posthog-cloud at master
run: |
cp -r multi_tenancy deploy/
cp -r messaging deploy/
cat multi_tenancy_settings.py >> deploy/posthog/settings.py
cat requirements.txt >> deploy/requirements.txt
- name: Start stack with Docker Compose
run: docker-compose -f deploy/ee/docker-compose.ch.yml up -d db clickhouse zookeeper kafka
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- uses: syphar/[email protected]
id: cache-backend-tests
- uses: syphar/restore-pip-download-cache@v1
if: steps.cache-backend-tests.outputs.cache-hit != 'true'
- name: Install python dependencies
if: steps.cache-backend-tests.outputs.cache-hit != 'true'
run: |
python -m pip install -r deploy/requirements-dev.txt
python -m pip install -r deploy/requirements.txt
# The 2-step migration process (first master, then current branch) verifies that it'll always
# be possible to migrate to the new version without problems in production
- name: Migrate initially at master, then remove master deploy code
run: |
python deploy/manage.py migrate
rm -rf deploy
- name: Checkout current branch
uses: actions/checkout@v2
with:
path: 'deploy/'
- name: Install requirements.txt dependencies with pip at current branch
run: |
cd deploy
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install freezegun fakeredis pytest pytest-mock pytest-django syrupy
- name: Link posthog-cloud at current branch
run: |
cp deploy/ee/conftest.py multi_tenancy/conftest.py
cp deploy/ee/conftest.py messaging/conftest.py
cp -r multi_tenancy deploy/
cp -r messaging deploy/
cat multi_tenancy_settings.py >> deploy/posthog/settings.py
cat requirements.txt >> deploy/requirements.txt
- name: Check migrations
run: |
cd deploy
python manage.py makemigrations --check --dry-run
python manage.py migrate
- name: Add kafka host to /etc/hosts for kafka connectivity
run: sudo echo "127.0.0.1 kafka" | sudo tee -a /etc/hosts
- name: Run posthog tests
run: |
cd deploy
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/shared_dashboard.html
pytest posthog --reuse-db -m "not (skip_on_multitenancy or ee)"
- name: Run cloud tests (posthog-cloud)
env:
PRIMARY_DB: 'clickhouse'
run: |
source .env.template
cd deploy
pytest multi_tenancy messaging -m "not skip_on_multitenancy"
- name: Run EE tests
env:
PRIMARY_DB: 'clickhouse'
run: |
cd deploy/
pytest ee -m "not skip_on_multitenancy"
pytest posthog -m "ee and not skip_on_multitenancy"
foss:
needs: changes
if: ${{ needs.changes.outputs.backend == 'true' }}
name: Django tests – FOSS
runs-on: ubuntu-latest
services:
postgres:
image: postgres:12
env:
POSTGRES_USER: posthog
POSTGRES_PASSWORD: posthog
POSTGRES_DB: posthog
ports: ['5432:5432']
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 1
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- uses: syphar/[email protected]
id: cache-backend-tests
- uses: syphar/restore-pip-download-cache@v1
if: steps.cache-backend-tests.outputs.cache-hit != 'true'
- name: Install python dependencies
if: steps.cache-backend-tests.outputs.cache-hit != 'true'
run: |
python -m pip install -r requirements-dev.txt
python -m pip install -r requirements.txt
- name: Remove ee
run: |
rm -rf ee/
- name: Check migrations
run: python manage.py makemigrations --check --dry-run
- name: Add kafka host to /etc/hosts for kafka connectivity
run: sudo echo "127.0.0.1 kafka" | sudo tee -a /etc/hosts
- name: Run tests
env:
SAML_DISABLED: '1'
run: |
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/shared_dashboard.html
pytest -m "not ee"