| | name: CI Pipeline |
| |
|
| | on: |
| | push: |
| | branches: [ "main", "feature/*" ] |
| | pull_request: |
| | branches: [ "main" ] |
| |
|
| | jobs: |
| | unit-tests: |
| | runs-on: ubuntu-latest |
| | steps: |
| | - name: Checkout code |
| | uses: actions/checkout@v3 |
| |
|
| | - name: Free Disk Space |
| | run: | |
| | sudo rm -rf /usr/share/dotnet |
| | sudo rm -rf /usr/local/lib/android |
| | sudo rm -rf /opt/ghc |
| | sudo rm -rf /opt/hostedtoolcache/CodeQL |
| | sudo docker image prune --all --force |
| | |
| | - name: Set up Python 3.10 |
| | uses: actions/setup-python@v4 |
| | with: |
| | python-version: "3.10" |
| | cache: 'pip' |
| |
|
| | - name: Install dependencies |
| | run: | |
| | python -m pip install --upgrade pip |
| | # Install CPU-only PyTorch to save space (we don't need CUDA for tests) |
| | pip install torch --index-url https://download.pytorch.org/whl/cpu |
| | # Install other dependencies |
| | pip install -r requirements.txt --no-cache-dir |
| | pip install -e . |
| | |
| | - name: Lint with Ruff |
| | run: | |
| | make lint |
| | |
| | - name: Run Unit Tests |
| | run: | |
| | pytest tests/unit/ -v -m unit --html=report.html --self-contained-html |
| | |
| | |
| | - name: Upload Test Report |
| | if: failure() |
| | uses: actions/upload-artifact@v4 |
| | with: |
| | name: test-report |
| | path: report.html |
| |
|
| | build-image: |
| | needs: unit-tests |
| | runs-on: ubuntu-latest |
| | steps: |
| | - name: Checkout code |
| | uses: actions/checkout@v3 |
| |
|
| | - name: Free Disk Space |
| | run: | |
| | sudo rm -rf /usr/share/dotnet |
| | sudo rm -rf /usr/local/lib/android |
| | sudo rm -rf /opt/ghc |
| | sudo rm -rf /opt/hostedtoolcache/CodeQL |
| | sudo docker image prune --all --force |
| | |
| | - name: Set up Python 3.10 |
| | uses: actions/setup-python@v4 |
| | with: |
| | python-version: "3.10" |
| | cache: 'pip' |
| |
|
| | - name: Install DVC |
| | run: | |
| | python -m pip install --upgrade pip |
| | pip install dvc dvc-s3 |
| | |
| | - name: Configure DVC |
| | run: | |
| | dvc remote modify origin --local auth basic |
| | dvc remote modify origin --local user ${{ secrets.DAGSHUB_USERNAME }} |
| | dvc remote modify origin --local password ${{ secrets.DAGSHUB_TOKEN }} |
| | |
| | - name: Pull Models with DVC |
| | run: | |
| | # Clean any potentially corrupted cache |
| | rm -rf .dvc/cache/files/md5/e1 || true |
| | |
| | |
| | max_attempts=3 |
| | attempt=0 |
| | until [ $attempt -ge $max_attempts ] |
| | do |
| | dvc pull models/random_forest_embedding_gridsearch.pkl models/label_names.pkl && break |
| | attempt=$((attempt+1)) |
| | echo "DVC pull attempt $attempt failed. Retrying in 10 seconds..." |
| | |
| | rm -rf .dvc/cache || true |
| | sleep 10 |
| | done |
| | if [ $attempt -ge $max_attempts ]; then |
| | echo "DVC pull failed after $max_attempts attempts" |
| | exit 1 |
| | fi |
| |
|
| | - name: Verify Models Downloaded |
| | run: | |
| | if [ ! -f "models/random_forest_embedding_gridsearch.pkl" ] || [ ! -f "models/label_names.pkl" ]; then |
| | echo "ERROR: Required model files not found after DVC pull" |
| | exit 1 |
| | fi |
| | echo "All required model files present" |
| | |
| | - name: Build Docker Image |
| | run: | |
| | docker build -t hopcroft-app:latest . |
| | |