name: Test Suite on: push: branches: [ main, develop ] pull_request: branches: [ main, develop ] jobs: backend-pr-quick: if: gitea.event_name == 'pull_request' runs-on: backend-node24 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js 24.15.0 uses: actions/setup-node@v4 with: node-version: '24.15.0' - name: Install dependencies (backend) working-directory: ./backend run: npm ci - name: Prisma schema validate working-directory: ./backend run: npx prisma validate --schema prisma/schema.prisma - name: Generate Prisma Client working-directory: ./backend run: npm run prisma:generate - name: Verify generated Prisma client is typed working-directory: ./backend run: | if ! grep -q "export \* from '.prisma/client/default'" node_modules/@prisma/client/index.d.ts; then echo "Prisma client export is unexpected" exit 1 fi - name: Run receipt-import focused tests (PR quick) working-directory: ./backend run: npx jest src/receipt-import/receipt-import.service.spec.ts src/receipt-import/receipt-import.parse-flow.spec.ts src/receipt-import/receipt-import.save.spec.ts --no-coverage - name: Build NestJS app working-directory: ./backend run: npm run build quick-import-pr-quick: if: gitea.event_name == 'pull_request' runs-on: backend-node24 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js 24.15.0 uses: actions/setup-node@v4 with: node-version: '24.15.0' - name: Install dependencies (backend) working-directory: ./backend run: npm ci - name: Run quick-import focused tests (PR quick) working-directory: ./backend run: npx jest src/quick-import/quick-import.service.spec.ts --no-coverage backend-full: if: gitea.event_name == 'push' runs-on: backend-node24 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js 24.15.0 uses: actions/setup-node@v4 with: node-version: '24.15.0' - name: Install dependencies (backend) working-directory: ./backend run: npm ci - name: Prisma schema validate working-directory: ./backend run: npx prisma validate --schema prisma/schema.prisma - name: Generate Prisma Client working-directory: ./backend run: npm run prisma:generate - name: Verify generated Prisma client is typed working-directory: ./backend run: | if ! grep -q "export \* from '.prisma/client/default'" node_modules/@prisma/client/index.d.ts; then echo "Prisma client export is unexpected" exit 1 fi - name: Dependency audit (high+critical) working-directory: ./backend run: npm audit --audit-level=high - name: Run tests (backend) working-directory: ./backend run: npm test - name: Build NestJS app working-directory: ./backend run: npm run build flutter-quality: runs-on: flutter-3-41 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Flutter uses: subosito/flutter-action@v2 with: flutter-version: '3.41.9' - name: Install dependencies (flutter) working-directory: ./flutter run: flutter pub get - name: Analyze Flutter code working-directory: ./flutter run: flutter analyze - name: Set Flutter test mode shell: bash run: | if [ "${{ gitea.event_name }}" = "pull_request" ]; then echo "FLUTTER_TEST_CMD=flutter test --reporter=compact" >> "$GITHUB_ENV" else echo "FLUTTER_TEST_CMD=flutter test" >> "$GITHUB_ENV" fi - name: Run Flutter tests working-directory: ./flutter run: ${{ env.FLUTTER_TEST_CMD }}