-
Notifications
You must be signed in to change notification settings - Fork 181
131 lines (125 loc) · 4.63 KB
/
startup-tests.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
name: Startup Tests
on:
pull_request:
workflow_dispatch:
env:
GITHUB_WORKFLOW: github_actions
backend-directory: ./backend
working-directory: ./frontend
jobs:
startup-functional-test:
runs-on: ubuntu-20.04
services:
postgres:
image: postgres:14.12
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports: ["5432:5432"]
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
strategy:
max-parallel: 4
matrix:
python-version: ["3.11"]
steps:
- uses: actions/checkout@v4
- name: Set up python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: "pip"
- uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Install requirements
working-directory: ${{ env.backend-directory }}
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Install dependencies
working-directory: ${{ env.working-directory }}
run: |
npm install -g pnpm
pnpm i --frozen-lockfile
- name: Install Playwright Browsers
working-directory: ${{ env.working-directory }}
run: npx playwright install --with-deps
- name: Create frontend environment variables file
working-directory: ${{ env.working-directory }}
run: |
touch .env
echo PUBLIC_BACKEND_API_URL=http://localhost:8000/api >> .env
- name: Create backend environment variables file
working-directory: ${{ env.backend-directory }}
run: |
touch .env
echo [email protected] >> .env
echo DJANGO_SUPERUSER_PASSWORD=1234 >> .env
echo POSTGRES_NAME=postgres >> .env
echo POSTGRES_USER=postgres >> .env
echo POSTGRES_PASSWORD=postgres >> .env
echo DB_HOST=localhost >> .env
echo CISO_ASSISTANT_SUPERUSER_EMAIL='' >> .env
echo CISO_ASSISTANT_URL=http://localhost:4173 >> .env
- name: Run migrations
working-directory: ${{ env.backend-directory }}
run: |
export $(grep -v '^#' .env | xargs)
python manage.py migrate
- name: Start test server
working-directory: ${{ env.backend-directory }}
run: |
export $(grep -v '^#' .env | xargs)
python manage.py createsuperuser --noinput
nohup python manage.py runserver &
- name: Run tests
working-directory: ${{ env.working-directory }}
run: npx playwright test tests/functional/startup.test.ts
- uses: actions/upload-artifact@v4
if: always()
with:
name: startup-functional-test-report
path: |
${{ env.working-directory }}/tests/reports/
retention-days: 5
startup-docker-compose-test:
runs-on: ubuntu-20.04
env:
COMPOSE_TEST: True
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: latest
- name: Install dependencies
working-directory: ${{ env.working-directory }}
run: |
npm install -g pnpm
pnpm i --frozen-lockfile
- name: Install Playwright Browsers
working-directory: ${{ env.working-directory }}
run: npx playwright install --with-deps
- name: Build the Docker app
run: docker compose -f docker-compose-build.yml up -d
- name: Create backend environment variables file
working-directory: ${{ env.backend-directory }}
run: |
touch .env
export $(grep -v '^#' .env | xargs)
- name: Config the Docker app
run: |
sleep 60 # give the migrations time to finish (included in the up on the previous step)
docker compose -f docker-compose-build.yml exec backend /bin/bash -c "[email protected] DJANGO_SUPERUSER_PASSWORD=1234 python manage.py createsuperuser --noinput && exit 0"
- name: Run tests
working-directory: ${{ env.working-directory }}
run: |
response=$(curl -d "[email protected]&password=1234" -H "Origin: https://localhost:8443" https://localhost:8443/login -k)
server_reponse='{"type":"redirect","status":302,"location":"/analytics"}'
if [[ "$response" == "$server_reponse" ]]; then
echo "Success"
exit 0
else
echo "Failure"
exit 1
fi