chore: Enhance CI workflow with comprehensive checks for linting, type checking, and testing
Some checks failed
CI / skip-ci-check (pull_request) Successful in 1m34s
CI / lint-and-type-check (pull_request) Failing after 2m13s
CI / python-lint (pull_request) Failing after 2m1s
CI / test-backend (pull_request) Successful in 3m45s
CI / build (pull_request) Successful in 4m43s
CI / secret-scanning (pull_request) Successful in 1m43s
CI / dependency-scan (pull_request) Successful in 1m41s
CI / sast-scan (pull_request) Successful in 2m50s
CI / workflow-summary (pull_request) Successful in 1m34s

This commit updates the CI workflow to include additional checks for ESLint, type checking, and backend tests. It introduces steps to validate the outcomes of these checks, ensuring that any failures will cause the job to fail. This enhancement improves the overall quality control in the CI pipeline, requiring developers to address issues before proceeding with the build process.
This commit is contained in:
Tanya 2026-01-12 13:08:21 -05:00
parent 29c8a27e01
commit c490235ad1
5 changed files with 97 additions and 5 deletions

View File

@ -102,6 +102,7 @@ jobs:
continue-on-error: true
- name: Run ESLint (admin-frontend)
id: eslint-check
run: |
cd admin-frontend
npm run lint
@ -112,6 +113,12 @@ jobs:
cd viewer-frontend
npm ci
- name: Generate Prisma Clients (for type-check)
run: |
cd viewer-frontend
npm run prisma:generate:all || true
continue-on-error: true
- name: Audit viewer-frontend dependencies
run: |
cd viewer-frontend
@ -119,11 +126,31 @@ jobs:
continue-on-error: true
- name: Type check (viewer-frontend)
id: type-check
run: |
cd viewer-frontend
npm run type-check
continue-on-error: true
- name: Check for lint/type-check failures
if: always()
run: |
FAILED=false
if [ "x${{ steps.eslint-check.outcome }}" = "xfailure" ]; then
echo "❌ ESLint check failed"
FAILED=true
fi
if [ "x${{ steps.type-check.outcome }}" = "xfailure" ]; then
echo "❌ Type check failed"
FAILED=true
fi
if [ "$FAILED" = "true" ]; then
echo "❌ One or more checks failed. Failing job."
exit 1
else
echo "✅ All checks passed"
fi
python-lint:
needs: skip-ci-check
runs-on: ubuntu-latest
@ -145,15 +172,36 @@ jobs:
pip install --no-cache-dir flake8 black mypy pylint
- name: Check Python syntax
id: python-syntax-check
run: |
find backend -name "*.py" -exec python -m py_compile {} \;
continue-on-error: true
- name: Run flake8
id: flake8-check
run: |
flake8 backend --max-line-length=100 --ignore=E501,W503
continue-on-error: true
- name: Check for Python lint failures
if: always()
run: |
FAILED=false
if [ "x${{ steps.python-syntax-check.outcome }}" = "xfailure" ]; then
echo "❌ Python syntax check failed"
FAILED=true
fi
if [ "x${{ steps.flake8-check.outcome }}" = "xfailure" ]; then
echo "❌ Flake8 check failed"
FAILED=true
fi
if [ "$FAILED" = "true" ]; then
echo "❌ One or more Python lint checks failed. Failing job."
exit 1
else
echo "✅ All Python lint checks passed"
fi
test-backend:
needs: skip-ci-check
runs-on: ubuntu-latest
@ -388,6 +436,7 @@ jobs:
echo "✅ Database schemas initialized (main and auth)"
- name: Run backend tests
id: backend-tests
run: |
export PYTHONPATH=$(pwd)
export SKIP_DEEPFACE_IN_TESTS=1
@ -395,6 +444,16 @@ jobs:
echo "⚠️ DeepFace/TensorFlow disabled in tests to avoid CPU instruction errors"
python -m pytest tests/ -v --tb=short --cov=backend --cov-report=term-missing --cov-report=xml --junit-xml=test-results.xml || true
continue-on-error: true
- name: Check for test failures
if: always()
run: |
if [ "x${{ steps.backend-tests.outcome }}" = "xfailure" ]; then
echo "❌ Backend tests failed. Failing job."
exit 1
else
echo "✅ Backend tests passed"
fi
- name: Test results summary
if: always()
@ -461,6 +520,7 @@ jobs:
uses: actions/checkout@v4
- name: Validate backend (imports and app instantiation)
id: validate-backend
continue-on-error: true
run: |
# Install Python 3.12 using pyenv (required for modern type hints like str | None)
@ -557,9 +617,10 @@ jobs:
continue-on-error: true
- name: Build admin-frontend
id: build-admin-frontend
run: |
cd admin-frontend
npm run build || true
npm run build
continue-on-error: true
env:
VITE_API_URL: http://localhost:8000
@ -582,10 +643,34 @@ jobs:
continue-on-error: true
- name: Build viewer-frontend
id: build-viewer-frontend
run: |
cd viewer-frontend
npm run build || true
npm run build
continue-on-error: true
- name: Check for build failures
if: always()
run: |
FAILED=false
if [ "x${{ steps.validate-backend.outcome }}" = "xfailure" ]; then
echo "❌ Backend validation failed"
FAILED=true
fi
if [ "x${{ steps.build-admin-frontend.outcome }}" = "xfailure" ]; then
echo "❌ Admin frontend build failed"
FAILED=true
fi
if [ "x${{ steps.build-viewer-frontend.outcome }}" = "xfailure" ]; then
echo "❌ Viewer frontend build failed"
FAILED=true
fi
if [ "$FAILED" = "true" ]; then
echo "❌ One or more builds failed. Failing job."
exit 1
else
echo "✅ All builds passed"
fi
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/punimtag
DATABASE_URL_AUTH: postgresql://postgres:postgres@localhost:5432/punimtag_auth

View File

@ -32,7 +32,7 @@ export async function GET(request: NextRequest) {
where: { userId },
select: { photoId: true },
});
favoritePhotoIds = favorites.map(f => f.photoId);
favoritePhotoIds = favorites.map((f: { photoId: number }) => f.photoId);
// If user has no favorites, return empty result
if (favoritePhotoIds.length === 0) {

View File

@ -279,7 +279,7 @@ export async function DELETE(
prismaAuth.photoFavorite.count({ where: { userId } }),
]);
const finalHasRelatedRecords = finalCheck.some(count => count > 0);
const finalHasRelatedRecords = finalCheck.some((count: number) => count > 0);
if (finalHasRelatedRecords) {
console.log(`[DELETE User ${userId}] Final check found related records, deactivating instead`);

View File

@ -28,7 +28,8 @@
"**/*.tsx",
".next/types/**/*.ts",
".next/dev/types/**/*.ts",
"**/*.mts"
"**/*.mts",
"types/**/*.d.ts"
],
"exclude": ["node_modules", "scripts"]
}

View File

@ -0,0 +1,6 @@
// Type declaration for Prisma client-auth
// This module is generated at build time by Prisma
declare module '../node_modules/.prisma/client-auth' {
export * from '@prisma/client';
}