Add bounded workflow task failure metrics #5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Server Perf | |
| on: | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - ".github/workflows/server-perf.yml" | |
| - "Dockerfile" | |
| - "docker-compose.yml" | |
| - "app/Support/ServerPollingCache.php" | |
| - "app/Support/WorkflowTaskPoller.php" | |
| - "app/Support/WorkflowTaskPollRequestStore.php" | |
| - "config/server.php" | |
| - "scripts/perf/**" | |
| push: | |
| branches: [main] | |
| paths: | |
| - ".github/workflows/server-perf.yml" | |
| - "Dockerfile" | |
| - "docker-compose.yml" | |
| - "app/Support/ServerPollingCache.php" | |
| - "app/Support/WorkflowTaskPoller.php" | |
| - "app/Support/WorkflowTaskPollRequestStore.php" | |
| - "config/server.php" | |
| - "scripts/perf/**" | |
| schedule: | |
| - cron: "17 7 * * *" | |
| workflow_dispatch: | |
| inputs: | |
| duration_seconds: | |
| description: "Soak duration in seconds" | |
| required: false | |
| default: "7200" | |
| concurrency: | |
| description: "Concurrent long-poll workers" | |
| required: false | |
| default: "24" | |
| grafana_remote_write: | |
| description: "Enable Grafana Cloud remote_write when variables/secrets are configured" | |
| required: false | |
| type: boolean | |
| default: true | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: server-perf-${{ github.event_name }}-${{ github.ref }} | |
| cancel-in-progress: false | |
| jobs: | |
| smoke: | |
| name: Polling cache bounded-growth smoke | |
| if: github.event_name == 'pull_request' || github.event_name == 'push' | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Checkout server | |
| uses: actions/checkout@v6 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v4 | |
| - name: Run short perf smoke | |
| env: | |
| DW_PERF_DURATION_SECONDS: "120" | |
| DW_PERF_CONCURRENCY: "8" | |
| DW_PERF_NAMESPACES: "4" | |
| DW_PERF_TASK_QUEUES: "8" | |
| DW_PERF_MAX_SERVER_MEMORY_MB: "768" | |
| DW_PERF_MAX_POLLING_KEYS: "512" | |
| DW_PERF_MAX_FINAL_POLLING_KEYS: "0" | |
| run: scripts/perf/run-server-soak.sh | |
| - name: Upload perf artifacts | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: server-perf-smoke | |
| path: build/perf/ | |
| if-no-files-found: warn | |
| soak: | |
| name: Vultr self-hosted polling cache soak | |
| if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' | |
| runs-on: [self-hosted, linux, x64, vultr-perf, server-perf] | |
| timeout-minutes: 390 | |
| steps: | |
| - name: Checkout server | |
| uses: actions/checkout@v6 | |
| - name: Run long perf soak | |
| env: | |
| DW_PERF_DURATION_SECONDS: ${{ github.event_name == 'workflow_dispatch' && inputs.duration_seconds || '7200' }} | |
| DW_PERF_CONCURRENCY: ${{ github.event_name == 'workflow_dispatch' && inputs.concurrency || '24' }} | |
| DW_PERF_NAMESPACES: "8" | |
| DW_PERF_TASK_QUEUES: "16" | |
| DW_PERF_MAX_SERVER_MEMORY_MB: "1024" | |
| DW_PERF_MAX_POLLING_KEYS: "2048" | |
| DW_PERF_MAX_FINAL_POLLING_KEYS: "0" | |
| DW_PERF_MAX_SERVER_MEMORY_SLOPE_MB_HOUR: "128" | |
| DW_PERF_GRAFANA_REMOTE_WRITE_ENABLED: ${{ github.event_name != 'workflow_dispatch' || inputs.grafana_remote_write }} | |
| DW_PERF_GRAFANA_REMOTE_WRITE_URL: ${{ vars.DW_PERF_GRAFANA_REMOTE_WRITE_URL }} | |
| DW_PERF_GRAFANA_USERNAME: ${{ vars.DW_PERF_GRAFANA_USERNAME }} | |
| DW_PERF_GRAFANA_API_TOKEN: ${{ secrets.DW_PERF_GRAFANA_API_TOKEN }} | |
| run: scripts/perf/run-server-soak.sh | |
| - name: Upload perf artifacts | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: server-perf-soak | |
| path: build/perf/ | |
| if-no-files-found: warn |