|
|
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 . |
|
|
|