name: E2E IFT smoke (admin) # После успешного Deploy IFT — smoke против живого IFT (без API-моков). # Учётки берутся с хоста IFT из /opt/eventhub-ift/.env # (SMOKE_ADMIN_* → fallback ADMIN_SUPER_*; см. EventHubDevOps/ift/.env.example). # Опц. secret E2E_IFT_BASE_URL (default https://admin-ui.ift.eventhub.local). on: workflow_run: workflows: ["Deploy IFT (admin)"] types: [completed] workflow_dispatch: concurrency: group: eventhub-frontadmin-e2e-ift cancel-in-progress: false jobs: ift-smoke: if: | github.event_name == 'workflow_dispatch' || (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success') runs-on: ubuntu-latest timeout-minutes: 20 steps: - uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }} - uses: actions/setup-node@v4 with: node-version: '22' - run: npm ci - name: Install Playwright browser run: npx playwright install --with-deps chromium - name: Load smoke credentials from IFT .env env: SSH_HOST: ${{ secrets.IFT_SSH_HOST }} SSH_USER: ${{ secrets.IFT_SSH_USER }} SSH_KEY: ${{ secrets.IFT_SSH_PRIVATE_KEY }} run: | set -euo pipefail KEY=$(mktemp) printf '%s\n' "$SSH_KEY" > "$KEY" chmod 600 "$KEY" # Источник истины — env на стенде (не отдельные Gitea E2E secrets). REMOTE=$(ssh -i "$KEY" -o BatchMode=yes -o StrictHostKeyChecking=accept-new \ "${SSH_USER}@${SSH_HOST}" \ "grep -E '^(SMOKE_ADMIN_EMAIL|SMOKE_ADMIN_PASSWORD|ADMIN_SUPER_EMAIL|ADMIN_SUPER_PASSWORD)=' /opt/eventhub-ift/.env || true") rm -f "$KEY" EMAIL=$(printf '%s\n' "$REMOTE" | sed -n 's/^SMOKE_ADMIN_EMAIL=//p' | head -1) PASS=$(printf '%s\n' "$REMOTE" | sed -n 's/^SMOKE_ADMIN_PASSWORD=//p' | head -1) if [ -z "$EMAIL" ]; then EMAIL=$(printf '%s\n' "$REMOTE" | sed -n 's/^ADMIN_SUPER_EMAIL=//p' | head -1) fi if [ -z "$PASS" ]; then PASS=$(printf '%s\n' "$REMOTE" | sed -n 's/^ADMIN_SUPER_PASSWORD=//p' | head -1) fi if [ -z "$EMAIL" ] || [ -z "$PASS" ]; then echo "::error::В /opt/eventhub-ift/.env нет SMOKE_ADMIN_* / ADMIN_SUPER_*" exit 1 fi echo "SMOKE_ADMIN_EMAIL=${EMAIL}" >> "$GITHUB_ENV" echo "SMOKE_ADMIN_PASSWORD=${PASS}" >> "$GITHUB_ENV" echo "Loaded smoke admin email: ${EMAIL}" - name: IFT smoke env: E2E_TARGET: ift E2E_IFT_BASE_URL: ${{ secrets.E2E_IFT_BASE_URL }} run: npm run test:e2e:ift - name: Upload Playwright report if: failure() uses: actions/upload-artifact@v3 with: name: playwright-ift-report path: playwright-report/ retention-days: 7