Skip to content

Fast-fail oversize SA key/value and operation names at request boundary #3

Fast-fail oversize SA key/value and operation names at request boundary

Fast-fail oversize SA key/value and operation names at request boundary #3

Workflow file for this run

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