name: QA on: schedule: - cron: '0 */4 * * *' # Every 4 hours — quality sweep - cron: '30 1 * * 1' # Every Monday 1:30am UTC — Telegram soak test (offset from */4 to avoid dedup) - cron: '0 6 * * *' # Daily 6am UTC — Interactive E2E (1 agent, 1 cloud) workflow_dispatch: inputs: reason: description: 'QA mode to trigger' required: false default: 'schedule' type: choice options: - schedule - e2e - e2e-interactive - fixtures - soak jobs: trigger: runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Trigger QA cycle env: SPRITE_URL: ${{ secrets.QA_SPRITE_URL }} TRIGGER_SECRET: ${{ secrets.QA_TRIGGER_SECRET }} run: | if [ "${{ github.event_name }}" = "schedule" ] && [ "${{ github.event.schedule }}" = "30 1 * * 1" ]; then REASON="soak" elif [ "${{ github.event_name }}" = "schedule" ] && [ "${{ github.event.schedule }}" = "0 6 * * *" ]; then REASON="e2e-interactive" else REASON="${{ github.event.inputs.reason || 'schedule' }}" fi curl -sS --fail-with-body -X POST \ "${SPRITE_URL}/trigger?reason=${REASON}" \ -H "Authorization: Bearer ${TRIGGER_SECRET}"