-
Notifications
You must be signed in to change notification settings - Fork 4
133 lines (114 loc) · 4.9 KB
/
test.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
name: Build & Test
on:
push:
branches: ["master"]
pull_request:
branches: ["master"]
env:
ENVIRONMENT: CI-test
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres
DJANGO_SETTINGS_MODULE: up.settings.production
MANUAL_PRODUCTION: True
SECRET_KEY: ${{ secrets.SECRET_KEY }}
GPR_TOKEN: ${{ secrets.GPR_TOKEN }}
jobs:
build_and_test:
name: Build & Test
runs-on: ubuntu-22.04
steps:
# priprav prostredi
- name: ☁️ Checkout repo
uses: actions/checkout@v4
- name: 🔧 Setup node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: "**/package-lock.json"
- name: 🔧 Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
cache: "pipenv"
# spust skripty pro upravu souboru
- name: 📝 Create .npmrc file
run: ./scripts/shell/ci/create_npmrc.sh
- name: 📝 Apply string substitution
run: ./scripts/shell/ci/string_substitution.sh
- name: 📝 Create dummy .env file
run: touch .env
# nainstaluj JS zavislosti
- name: 🔧 JS - install deps & build frontend app
run: npm ci
# nainstaluj Python zavislosti
- name: 🔧 Python - install deps
run: |
pip install pipenv
pipenv install --deploy --dev
# spust audit frontendu
- name: 🔍 JS - run audit
continue-on-error: true
run: npm run frontend:audit
# otestuj frontend (typy, linting, jest)
- name: 🔍 JS - run tests
run: npm run frontend:test
# TODO zapnout kontrolu typu na CI
# otestuj typy v backendu pres mypy
# - name: 🔍 Python - run tests
# run: mypy .
# PostgreSQL
# - build custom PSQL container image with CZ locale
# - and then start the PSQL service (tcp port 5432 on service container is mapped to the host)
# https://github.com/orgs/community/discussions/24923
- name: 📦 PostgreSQL - container build & run
run: source scripts/shell/postgresql_docker.sh
# priprav Django aplikaci
- name: 🔧 Python - build Django app (staticfiles & migration)
run: ./scripts/shell/release_tasks.sh
# spust Django deployment checklist
- name: 🔍 Python - run Django deployment checklist
env:
MANUAL_PRODUCTION: False
run: pipenv run python manage.py check --deploy --fail-level WARNING
- name: 🐞 Debug env log
run: |
node --version
npm --version
python --version
pipenv --version
firefox --version
geckodriver --version
docker exec postgresql_cz psql -U postgres -c "SHOW LC_COLLATE;"
docker exec postgresql_cz psql --version
docker exec postgresql_cz pg_config --version
# proved testy, spocitej pokryti kodu a posli ho do cloudu
- name: 🔍 Python - run tests
run: pipenv run coverage run -a manage.py test
- name: 🔍 Run E2E API tests
run: pipenv run coverage run -a manage.py behave --stage=api --format=progress3
- name: 🔍 Run E2E UI tests
run: pipenv run coverage run -a manage.py behave --stage=ui --format=progress3
- name: 📝 Generate test reports
run: |
pipenv run coverage report
pipenv run coverage xml
- name: ☁️ Upload code coverage
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
run: ./scripts/shell/ci/codecov_run.sh
# smazani dat z buildu, testovani a dokumentace
- name: 🧹 Cleanup project folder
run: ./scripts/shell/ci/cleanup.sh
# nastavime spravnou fly.io konfiguraci
- name: 🧹 Pre-deploy tasks Fly.io - config files
run: mv fly.test.toml fly.toml
# pripravime fly.io klienta pro deploy
- name: 🧹 Pre-deploy tasks Fly.io - client
uses: superfly/flyctl-actions/setup-flyctl@master
# nasazeni testing verze na Fly.io
- name: 🚀 Deploy to test Fly.io
if: ${{ github.actor != 'dependabot[bot]' }}
run: flyctl deploy --remote-only
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN_TEST }}