ShaunGves's picture
Initial commit: SmartRAG - Production AI Assistant for Programmers
1c58cca
Raw
History Blame Contribute Delete
2.71 kB
name: SmartRAG CI/CD
on:
push:
branches: [main, dev]
pull_request:
branches: [main]
jobs:
# ── 1. Run Tests ───────────────────────────────────────────────
test:
name: Run Test Suite
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: "pip"
- name: Install dependencies
run: |
pip install --upgrade pip
pip install pytest pytest-cov
# Install CPU-only torch for CI (no GPU needed for unit tests)
pip install torch --index-url https://download.pytorch.org/whl/cpu
pip install transformers peft datasets langchain langchain-community \
chromadb sentence-transformers fastapi httpx pydantic \
uvicorn trl bitsandbytes mlflow ragas
- name: Run unit tests (no GPU required)
run: |
pytest tests/ -v -m "not slow" --cov=. --cov-report=xml
- name: Upload coverage
uses: codecov/codecov-action@v4
with:
file: coverage.xml
# ── 2. Build Docker Image ──────────────────────────────────────
build:
name: Build Docker Image
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build & push API image
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
push: ${{ github.ref == 'refs/heads/main' }}
tags: |
${{ secrets.DOCKER_USERNAME }}/smartrag-api:latest
${{ secrets.DOCKER_USERNAME }}/smartrag-api:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
# ── 3. Deploy to Hugging Face Spaces (on main push) ───────────
deploy-hf-spaces:
name: Deploy to HF Spaces
runs-on: ubuntu-latest
needs: [test, build]
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Push to HF Spaces
uses: huggingface/hf-actions/push-to-hub@v1
with:
space_name: ${{ secrets.HF_USERNAME }}/smartrag
token: ${{ secrets.HF_TOKEN }}