name: Deploy EnCoach on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - name: Pull latest code run: | cd /opt/encoach/encoach_v4 git fetch origin main git reset --hard origin/main - name: Apply server-side patches run: | cd /opt/encoach/encoach_v4 # Fix pip for Debian Bookworm (developer runs macOS — his Dockerfile doesn't need these flags) sed -i \ 's|RUN pip3 install --no-cache-dir|RUN pip3 install --break-system-packages --no-cache-dir --ignore-installed typing_extensions|' \ backend/Dockerfile || true # Ensure required Python packages are present grep -q "sentence_transformers" backend/requirements.txt || \ echo "sentence_transformers>=2.7.0" >> backend/requirements.txt echo "Dockerfile pip line:"; grep "pip3" backend/Dockerfile echo "Extra packages:"; grep -E "langgraph|sentence" backend/requirements.txt - name: Copy odoo.conf into build context run: cp /opt/encoach/overrides/odoo.conf /opt/encoach/encoach_v4/backend/odoo.conf - name: Build backend image run: | cd /opt/encoach/encoach_v4 docker compose -f docker-compose.yml -f /opt/encoach/overrides/encoach.override.yml build odoo - name: Build frontend image run: | cd /opt/encoach/encoach_v4 docker compose -f docker-compose.yml -f /opt/encoach/overrides/encoach.override.yml build frontend - name: Cleanup build context run: rm -f /opt/encoach/encoach_v4/backend/odoo.conf - name: Run DB migrations run: | MODULES=$(docker exec encoach-v4-db psql -U odoo -d encoach_v2 -tAc \ "SELECT string_agg(name, ',') FROM ir_module_module WHERE state='installed' AND name LIKE 'encoach%';") echo "Upgrading: $MODULES" docker run --rm \ --network encoach_v4_default \ -v /opt/encoach/overrides/odoo.conf:/etc/odoo/odoo.conf:ro \ -v /opt/encoach/encoach_v4/backend:/mnt/extra-addons:ro \ -v /opt/encoach/encoach_v4/backend/openeducat_erp-19.0/openeducat_erp-19.0:/mnt/extra-addons/openeducat_erp-19.0:ro \ -v encoach_backend_new_v2_odoo-web-data:/var/lib/odoo \ encoach-backend:latest \ odoo -u "$MODULES" --stop-after-init 2>&1 | tail -5 - name: Restart services run: | cd /opt/encoach/encoach_v4 docker compose -f docker-compose.yml -f /opt/encoach/overrides/encoach.override.yml \ up -d --no-deps odoo frontend - name: Smoke test run: | for i in $(seq 1 12); do CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8069/api/health) [ "$CODE" = "200" ] && echo "Health OK: HTTP $CODE" && exit 0 echo "Attempt $i: HTTP $CODE — waiting 10s..." sleep 10 done echo "Health check failed after 2 min" && exit 1