name: Benchmark Download Client on: workflow_dispatch: inputs: mode: description: Download client implementation to benchmark required: true default: both type: choice options: - both - fetch - request concurrency: description: Maximum number of concurrent downloads required: true default: "18" type: string rounds: description: Measured rounds; mode order alternates between rounds required: true default: "2" type: string warmup: description: Warm shared DNS/CDN state with both clients before measuring required: true default: true type: boolean encoding: description: Accepted response compression; all enables Brotli, gzip, deflate, and zstd required: true default: all type: choice options: - all - gzip - identity urls: description: Optional URLs, one per line; empty uses the configured reject and phishing sources required: false type: string permissions: contents: read jobs: benchmark: name: ${{ inputs.mode }} at concurrency ${{ inputs.concurrency }} (${{ inputs.rounds }} rounds) runs-on: ubuntu-24.04-arm timeout-minutes: 20 steps: - uses: smorimoto/tune-github-hosted-runner-network@v1 # Keep the runner network setup comparable with the production build. - uses: actions/checkout@v7 with: persist-credentials: false - uses: pnpm/action-setup@v6 with: run_install: false cache: true - uses: actions/setup-node@v6 with: node-version-file: ".node-version" package-manager-cache: false - run: pnpm config set --location=global minimumReleaseAge 0 - run: pnpm install - name: Run download benchmark shell: bash env: BENCHMARK_MODE: ${{ inputs.mode }} BENCHMARK_CONCURRENCY: ${{ inputs.concurrency }} BENCHMARK_ROUNDS: ${{ inputs.rounds }} BENCHMARK_WARMUP: ${{ inputs.warmup }} BENCHMARK_ENCODING: ${{ inputs.encoding }} BENCHMARK_URLS: ${{ inputs.urls }} run: | benchmark_args=( "--mode=${BENCHMARK_MODE}" "--concurrency=${BENCHMARK_CONCURRENCY}" "--rounds=${BENCHMARK_ROUNDS}" "--warmup=${BENCHMARK_WARMUP}" "--encoding=${BENCHMARK_ENCODING}" ) if [[ -n "${BENCHMARK_URLS}" ]]; then while IFS= read -r url; do url="${url%$'\r'}" if [[ -n "${url}" ]]; then benchmark_args+=("${url}") fi done <<< "${BENCHMARK_URLS}" fi pnpm run bench-download -- "${benchmark_args[@]}" | tee benchmark-output.txt { echo "## Download client benchmark" echo echo "- Runner: \`ubuntu-24.04-arm\`" echo "- Mode: \`${BENCHMARK_MODE}\`" echo "- Concurrency: \`${BENCHMARK_CONCURRENCY}\`" echo "- Measured rounds: \`${BENCHMARK_ROUNDS}\`" echo "- Warm-up: \`${BENCHMARK_WARMUP}\`" echo "- Accept-Encoding: \`${BENCHMARK_ENCODING}\`" echo echo '```text' cat benchmark-output.txt echo '```' } >> "${GITHUB_STEP_SUMMARY}"