87 lines
2.9 KiB
YAML
87 lines
2.9 KiB
YAML
|
|
name: CI - Tests et Syntax
|
||
|
|
on:
|
||
|
|
push:
|
||
|
|
branches: [main, dev]
|
||
|
|
pull_request:
|
||
|
|
branches: [main]
|
||
|
|
|
||
|
|
jobs:
|
||
|
|
lint-and-test:
|
||
|
|
runs-on: ubuntu-latest
|
||
|
|
container: python:3.13-slim
|
||
|
|
|
||
|
|
services:
|
||
|
|
mariadb:
|
||
|
|
image: mariadb:11
|
||
|
|
env:
|
||
|
|
MARIADB_ROOT_PASSWORD: root123
|
||
|
|
MARIADB_DATABASE: gmao_test_db
|
||
|
|
MARIADB_USER: gmao
|
||
|
|
MARIADB_PASSWORD: gmao123
|
||
|
|
ports:
|
||
|
|
- 3306:3306
|
||
|
|
options: --health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=10s --health-timeout=5s --health-retries=5
|
||
|
|
|
||
|
|
env:
|
||
|
|
DATABASE_URL: mysql+pymysql://gmao:gmao123@mariadb/gmao_test_db?charset=utf8mb4
|
||
|
|
SECRET_KEY: test-secret-key-with-at-least-32-characters
|
||
|
|
OUTLOOK_ENCRYPTION_KEY: S1Baix4126-5QfNnofmCV5qKqrMMvBoJj7MZ6WVFpQE=
|
||
|
|
SETUP_TOKEN: test-setup-token-with-at-least-32-characters
|
||
|
|
FLASK_DEBUG: "0"
|
||
|
|
|
||
|
|
steps:
|
||
|
|
- name: Checkout
|
||
|
|
uses: actions/checkout@v4
|
||
|
|
|
||
|
|
- name: Install dependencies
|
||
|
|
run: |
|
||
|
|
apt-get update && apt-get install -y --no-install-recommends gcc libffi-dev libssl-dev && rm -rf /var/lib/apt/lists/*
|
||
|
|
pip install --no-cache-dir -r requirements.txt
|
||
|
|
|
||
|
|
- name: Syntax check
|
||
|
|
run: |
|
||
|
|
python3 -m py_compile app_new/__init__.py
|
||
|
|
python3 -m py_compile app_new/outlook/auth.py
|
||
|
|
python3 -m py_compile app_new/outlook/models.py
|
||
|
|
python3 -m py_compile app_new/status/routes.py
|
||
|
|
python3 -m py_compile app_new/gmao_config/routes.py
|
||
|
|
python3 -m py_compile gmao_watchdog.py
|
||
|
|
python3 -m py_compile ent_watchdog.py
|
||
|
|
python3 -m py_compile pronote_watchdog.py
|
||
|
|
python3 -m py_compile watchdog_dnd.py
|
||
|
|
echo "Syntax check OK"
|
||
|
|
|
||
|
|
- name: Jinja2 template parse
|
||
|
|
run: |
|
||
|
|
python3 -c "
|
||
|
|
from jinja2 import Environment
|
||
|
|
env = Environment()
|
||
|
|
import glob
|
||
|
|
errors = []
|
||
|
|
for f in glob.glob('app_new/**/templates/**/*.html', recursive=True):
|
||
|
|
try:
|
||
|
|
with open(f) as fh:
|
||
|
|
env.parse(fh.read())
|
||
|
|
except Exception as e:
|
||
|
|
errors.append(f'{f}: {e}')
|
||
|
|
if errors:
|
||
|
|
for e in errors:
|
||
|
|
print(f'ERROR: {e}')
|
||
|
|
exit(1)
|
||
|
|
print(f'All {len(glob.glob(\"app_new/**/templates/**/*.html\", recursive=True))} templates OK')
|
||
|
|
"
|
||
|
|
|
||
|
|
- name: Wait for MariaDB
|
||
|
|
run: |
|
||
|
|
for i in $(seq 1 30); do
|
||
|
|
python3 -c "import pymysql; pymysql.connect(host='mariadb', port=3306, user='root', password='root123')" 2>/dev/null && echo "MariaDB ready" && break
|
||
|
|
echo "Waiting for MariaDB... ($i)"
|
||
|
|
sleep 2
|
||
|
|
done
|
||
|
|
|
||
|
|
- name: Run unit tests
|
||
|
|
run: python3 -m pytest tests/unit/ -x --tb=short -q
|
||
|
|
|
||
|
|
- name: Run integration tests
|
||
|
|
run: python3 -m pytest tests/integration/ -x --tb=short -q
|