name: Run Pytest on: pull_request: paths: - "backend/**" push: branches: - "master" paths: - "backend/**" permissions: read-all jobs: pytest: runs-on: ubuntu-latest permissions: checks: write pull-requests: write strategy: fail-fast: false matrix: db: [mariadb, postgresql] services: mariadb: image: mariadb:10.11 ports: - 3306 env: MYSQL_USER: romm_test MYSQL_PASSWORD: passwd MYSQL_DATABASE: romm_test MYSQL_ROOT_PASSWORD: passwd options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3 postgresql: image: postgres:16 ports: - 5432 env: POSTGRES_USER: romm_test POSTGRES_PASSWORD: passwd POSTGRES_DB: romm_test options: --health-cmd="pg_isready" --health-interval=5s --health-timeout=2s --health-retries=3 valkey: image: valkey/valkey:7.2 ports: - 6379 options: >- --health-cmd="redis-cli ping" --health-interval=5s --health-timeout=2s --health-retries=3 steps: - name: Checkout repository uses: actions/checkout@v4.3.0 - name: Install mariadb connectors if: matrix.db == 'mariadb' run: | sudo apt-get update sudo apt-get install -y libmariadb3 libmariadb-dev - name: Install uv uses: astral-sh/setup-uv@v6.7.0 - name: Install python run: | uv python install 3.13 - name: Install dependencies run: | uv sync --extra test - name: Initiate MariaDB database if: matrix.db == 'mariadb' run: | mysql --host 127.0.0.1 --port ${{ job.services.mariadb.ports['3306'] }} -uroot -ppasswd -e "GRANT ALL PRIVILEGES ON romm_test.* TO 'romm_test'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;" - name: Run python tests env: DB_HOST: 127.0.0.1 DB_PORT: ${{ matrix.db == 'mariadb' && job.services.mariadb.ports['3306'] || job.services.postgresql.ports['5432'] }} ROMM_DB_DRIVER: ${{ matrix.db }} REDIS_HOST: 127.0.0.1 REDIS_PORT: ${{ job.services.valkey.ports['6379'] }} run: | cd backend uv run pytest -vv --maxfail=10 --junitxml=pytest-report.xml --cov --cov-report xml:coverage.xml --cov-config=.coveragerc . - name: Publish test results uses: EnricoMi/publish-unit-test-result-action/linux@v2.20.0 if: (!cancelled()) with: check_name: Test Results (${{ matrix.db }}) files: | backend/pytest-report.xml - name: Publish coverage report uses: orgoro/coverage@v3.2 continue-on-error: true if: matrix.db == 'mariadb' with: coverageFile: backend/coverage.xml token: ${{ secrets.GITHUB_TOKEN }}