Skip to content

Setup end to end tests #2408

Setup end to end tests

Setup end to end tests #2408

Workflow file for this run

name: CI
# Enable Buildkit and let compose use it to speed up image building
env:
DATABASE_URL: 'postgis://envergo:envergo@localhost:5432/envergo'
USE_DOCKER: False
LANG: 'fr_FR.UTF-8'
LC_ALL: 'fr_FR.UTF-8'
DJANGO_SETTINGS_MODULE: 'config.settings.ci'
on:
pull_request:
branches: [ "main" ]
push:
branches: [ "main" ]
jobs:
linter:
runs-on: ubuntu-latest
steps:
- name: Checkout Code Repository
uses: actions/checkout@v3
- name: Set up Python 3.12
uses: actions/[email protected]
with:
python-version: 3.12.3
# Run all pre-commit hooks on all the files.
# Getting only staged files can be tricky in case a new PR is opened
# since the action is run on a branch in detached head state
- name: Install and Run Pre-commit
uses: pre-commit/[email protected]
# With no caching at all the entire ci process takes 4m 30s to complete!
pytest:
runs-on: ubuntu-latest
# Configure the database service
services:
database:
image: postgis/postgis:14-master
env:
POSTGRES_USER: envergo
POSTGRES_PASSWORD: envergo
POSTGRES_DB: envergo
ports:
- 5432:5432
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Update package list
run: |
sudo apt update
- name: Install french locale
run: |
sudo apt install language-pack-fr
sudo locale-gen
- name: Activate french locale
run: |
sudo update-locale LANG="fr_FR.UTF-8" LC_ALL="fr_FR.UTF-8"
- name: Set up the database
run: |
psql -d postgresql://envergo:envergo@localhost/template1 -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
psql -d postgresql://envergo:envergo@localhost/template1 -c 'CREATE EXTENSION IF NOT EXISTS postgis_raster;'
env:
PGPASSWORD: envergo
- name: Install dependencies
run: |
sudo apt install binutils libproj-dev gdal-bin gettext
- name: Checkout Code Repository
uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/[email protected]
with:
python-version: 3.9
- name: Install python dependencies
run: pip install -r requirements/local.txt
- name: Install js dependencies
run: npm ci
- name: Build assets
run: bash bin/build_assets.sh
- name: Run Django Tests
run: pytest
e2e:
timeout-minutes: 60
runs-on: ubuntu-latest
# Configure the database service
services:
database:
image: postgis/postgis:14-master
env:
POSTGRES_USER: envergo
POSTGRES_PASSWORD: envergo
POSTGRES_DB: envergo
ports:
- 5432:5432
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Install dependencies
run: npm ci
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Print DJANGO_SETTINGS_MODULE
run: echo $DJANGO_SETTINGS_MODULE
- name: Launch services
run: echo $DJANGO_SETTINGS_MODULE && docker compose up -d
- name: Print DJANGO_SETTINGS_MODULE again
run: docker compose exec django env
- name: Print ENV_NAME
run: docker compose run --rm django python manage.py shell -c "from django.conf import settings; print(settings.ENV_NAME)"
- name: Migrate database
run: docker compose run --rm django python manage.py migrate
- name: Seed database
run: docker compose run --rm django python manage.py loaddata e2e/fixtures/db_seed.json
- name: Wait for services to be ready
run: wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 --tries 10 http://localhost:3000/
- name: Run Playwright tests
run: npx playwright test
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: playwright-report
path: playwright-report/
retention-days: 30