froster02's picture
ci: skip backend-tests job on pull_request (heavy GPU deps)
d2c3c37
name: BIAF-offASR CI/CD Pipeline
on:
push:
branches: [main]
paths-ignore:
- '**.md'
- 'docs/**'
- 'diagram/**'
pull_request:
branches: [main]
paths-ignore:
- '**.md'
- 'docs/**'
- 'diagram/**'
env:
CI_MODE: "true"
jobs:
backend-tests:
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install FFmpeg
run: |
sudo apt update
sudo apt install -y ffmpeg
- name: Cache pip dependencies
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('backend/requirements.txt') }}
- name: Install backend dependencies
run: |
python -m pip install --upgrade pip
pip install -r backend/requirements.txt
- name: Run backend unit tests
run: |
pytest testcase/backend/ -v
- name: Run backend pipeline test (Mocked)
run: |
python backend/test_pipeline.py
frontend-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
cache-dependency-path: frontend/package-lock.json
- name: Install frontend dependencies
working-directory: frontend
run: npm ci
- name: Run frontend linting
working-directory: frontend
run: npm run lint
- name: Build frontend
working-directory: frontend
run: npm run build
e2e-tests:
needs: [backend-tests, frontend-tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y ffmpeg
pip install -r backend/requirements.txt
npm ci --prefix frontend
- name: Install Playwright browsers
run: npx playwright install --with-deps chromium
- name: Start backend server
run: |
cd backend
nohup python app.py > backend.log 2>&1 &
echo $! > ../backend.pid
sleep 5
- name: Start frontend server
run: |
cd frontend
nohup npm run dev > frontend.log 2>&1 &
echo $! > ../frontend.pid
sleep 10
- name: Run E2E tests
run: |
pytest testcase/e2e/test_app_flow.py -v
- name: Stop servers
if: always()
run: |
[ -f backend.pid ] && kill $(cat backend.pid) || true
[ -f frontend.pid ] && kill $(cat frontend.pid) || true
- name: Upload logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: server-logs
path: |
backend/backend.log
frontend/frontend.log
code-quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Run backend linting
run: |
pip install flake8
flake8 backend/ --count --select=E9,F63,F7,F82 --show-source --statistics
- name: Run Python complexity analysis
run: |
pip install radon
radon cc backend/ -a -s
radon mi backend/ -s
# Docker build (without pushing for now as secrets aren't set)
docker-build:
needs: [backend-tests, frontend-tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker image
uses: docker/build-push-action@v5
with:
context: .
push: false
tags: biaf-offasr:latest
cache-from: type=gha
cache-to: type=gha,mode=max