name: CI on: push: pull_request: jobs: backend: runs-on: ubuntu-latest defaults: run: working-directory: dsp/backend steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install deps run: | pip install "Django>=5.2,<5.3" "djangorestframework>=3.15,<3.16" "adrf>=0.1.9" \ "psycopg[binary]>=3.2,<4.0" "redis>=5.0,<6.0" "channels>=4.1,<5.0" "channels-redis>=4.2" \ "daphne>=4.1" "django-cors-headers>=4.4" "django-redis>=5.4" "Pillow>=10.4" \ "python-decouple>=3.8" "argon2-cffi>=23.1" "PyJWT>=2.9" \ "pytest" "pytest-asyncio" "pytest-django" "httpx" - name: Tests (DSP_TEST=1, zero external deps) run: DSP_TEST=1 python -m pytest tests/ -q - name: 推荐算法自检(热度排序 + 复合游标边界) run: DSP_TEST=1 python -m pytest tests/test_ranking.py -q web: runs-on: ubuntu-latest defaults: run: working-directory: dsp/web steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - run: npm ci - run: npx vue-tsc -b - name: Unit tests (401 单飞刷新 / 契约回归) run: npm test - run: npm run build android: runs-on: ubuntu-latest defaults: run: working-directory: dsp/android steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: distribution: temurin java-version: "17" - uses: android-actions/setup-android@v3 - name: Install SDK platform (compileSdk=34) run: sdkmanager "platforms;android-34" "build-tools;34.0.0" - name: Unit tests (JSON 契约回归,无需模拟器) run: ./gradlew testDebugUnitTest --no-daemon