name: Regression suite # Запускается ПОСЛЕ успешного docker-api/docker-web (stage-verify), # когда stage уже задеплоен новой ревизией. Гонит полную регрессию # (35 flow-тестов + 60 visual-snapshot'ов). Время прогона цель < 15 мин. # # Если падает — Telegram-уведомление со ссылкой на playwright-html отчёт. on: workflow_run: workflows: ["Docker API", "Docker Web"] types: [completed] workflow_dispatch: jobs: regression: name: Regression suite на stage # Не запускаемся если триггерный workflow упал — нет смысла верифировать # незадеплоенное. if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }} runs-on: [self-hosted, linux] timeout-minutes: 20 env: E2E_ADMIN_URL: https://test.admin.food-market.kz CI: '1' steps: - uses: actions/checkout@v4 - name: Wait for stage /health/ready run: | for i in 1 2 3 4 5 6 7 8 9 10; do if curl -fsS "$E2E_ADMIN_URL/health/ready" | grep -q '"status":"Healthy"'; then echo "stage ready"; exit 0 fi sleep 3 done echo "stage NOT ready" >&2 exit 1 - name: Setup pnpm cache for regression suite uses: actions/cache@v4 with: path: ~/.local/share/pnpm/store key: pnpm-regression-${{ runner.os }}-${{ hashFiles('tests/regression/pnpm-lock.yaml') }} restore-keys: | pnpm-regression-${{ runner.os }}- - name: Cache Playwright browsers uses: actions/cache@v4 with: path: ~/.cache/ms-playwright key: pw-browsers-${{ hashFiles('tests/regression/package.json') }} restore-keys: | pw-browsers- - name: Install regression deps working-directory: tests/regression run: pnpm install --frozen-lockfile - name: Install Playwright Chromium working-directory: tests/regression run: pnpm exec playwright install chromium - name: Run flows (35 tests) id: flows working-directory: tests/regression run: pnpm exec playwright test flows/ --reporter=list,json - name: Run visual (60 snapshots) id: visual working-directory: tests/regression run: pnpm exec playwright test visual/ --reporter=list,json # Sprint 27/28: cross-feature integration suite (отдельная папка # tests/integration с собственным package.json). 7 specs, ~1.5 мин. # Реюзает factories из regression/, отдельный pnpm install. - name: Install integration deps working-directory: tests/integration run: pnpm install --frozen-lockfile - name: Run integration cross-feature suite (Sprint 27/28) id: integration working-directory: tests/integration run: pnpm exec playwright test --reporter=list,json - name: Upload playwright artifacts on failure if: failure() uses: actions/upload-artifact@v4 with: name: playwright-report-${{ github.run_id }} path: | tests/regression/reports/ tests/integration/reports/ - name: Notify Telegram on failure if: failure() env: BOT: ${{ secrets.TELEGRAM_BOT_TOKEN }} CHAT: ${{ secrets.TELEGRAM_CHAT_ID }} SHA: ${{ github.event.workflow_run.head_sha || github.sha }} run: | RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" curl -sS -X POST "https://api.telegram.org/bot$BOT/sendMessage" \ --data-urlencode "chat_id=$CHAT" \ --data-urlencode "text=❌ regression FAILED — ${SHA:0:7} — $RUN_URL" \ > /dev/null - name: Notify Telegram on success if: success() && github.event_name == 'workflow_run' env: BOT: ${{ secrets.TELEGRAM_BOT_TOKEN }} CHAT: ${{ secrets.TELEGRAM_CHAT_ID }} SHA: ${{ github.event.workflow_run.head_sha }} run: | curl -sS -X POST "https://api.telegram.org/bot$BOT/sendMessage" \ --data-urlencode "chat_id=$CHAT" \ --data-urlencode "text=✅ regression OK — ${SHA:0:7} (35 flows + 60 visual + 8 integration)" \ > /dev/null