Skip to content

[actions] chore: surface profiling metrics summary #10

[actions] chore: surface profiling metrics summary

[actions] chore: surface profiling metrics summary #10

Workflow file for this run

name: hotpath-profile
on:
pull_request:
permissions:
contents: read
jobs:
profile:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- id: head_timing_metrics
run: |
# Extract timing metrics from head branch
{
echo 'metrics<<EOF'
cargo run --example benchmark --features='hotpath,hotpath-ci' | grep '^{"hotpath_profiling_mode"'
echo 'EOF'
} >> "$GITHUB_OUTPUT"
- id: head_alloc_metrics
run: |
# Extract alloc metrics from head branch
{
echo 'metrics<<EOF'
cargo run --example benchmark --features='hotpath,hotpath-ci,hotpath-alloc-count-total' | grep '^{"hotpath_profiling_mode"'
echo 'EOF'
} >> "$GITHUB_OUTPUT"
- name: Checkout base
run: |
git checkout ${{ github.event.pull_request.base.sha }}
- id: base_timing_metrics
run: |
# Extract timing metrics from base branch
{
echo 'metrics<<EOF'
cargo run --example benchmark --features='hotpath,hotpath-ci' | grep '^{"hotpath_profiling_mode"'
echo 'EOF'
} >> "$GITHUB_OUTPUT"
- id: base_alloc_metrics
run: |
# Extract alloc metrics from base branch
{
echo 'metrics<<EOF'
cargo run --example benchmark --features='hotpath,hotpath-ci,hotpath-alloc-count-total' | grep '^{"hotpath_profiling_mode"'
echo 'EOF'
} >> "$GITHUB_OUTPUT"
- name: Save metrics to artifact
run: |
mkdir -p /tmp/metrics
echo '${{ steps.head_timing_metrics.outputs.metrics }}' > /tmp/metrics/head_timing.json
echo '${{ steps.base_timing_metrics.outputs.metrics }}' > /tmp/metrics/base_timing.json
echo '${{ steps.head_alloc_metrics.outputs.metrics }}' > /tmp/metrics/head_alloc.json
echo '${{ steps.base_alloc_metrics.outputs.metrics }}' > /tmp/metrics/base_alloc.json
echo '${{ github.event.pull_request.number }}' > /tmp/metrics/pr_number.txt
- name: Publish metrics summary
env:
HEAD_TIMING: ${{ steps.head_timing_metrics.outputs.metrics }}
BASE_TIMING: ${{ steps.base_timing_metrics.outputs.metrics }}
HEAD_ALLOC: ${{ steps.head_alloc_metrics.outputs.metrics }}
BASE_ALLOC: ${{ steps.base_alloc_metrics.outputs.metrics }}
run: |
{
echo "## Hotpath profiling metrics"
echo
echo "### Timing"
echo
echo "<details><summary>Head</summary>"
echo
printf '```json\n'
if [ -n "$HEAD_TIMING" ]; then
printf '%s\n' "$HEAD_TIMING"
else
echo '{}'
fi
printf '```\n'
echo
echo "</details>"
echo
echo "<details><summary>Base</summary>"
echo
printf '```json\n'
if [ -n "$BASE_TIMING" ]; then
printf '%s\n' "$BASE_TIMING"
else
echo '{}'
fi
printf '```\n'
echo
echo "</details>"
echo
echo "### Allocation"
echo
echo "<details><summary>Head</summary>"
echo
printf '```json\n'
if [ -n "$HEAD_ALLOC" ]; then
printf '%s\n' "$HEAD_ALLOC"
else
echo '{}'
fi
printf '```\n'
echo
echo "</details>"
echo
echo "<details><summary>Base</summary>"
echo
printf '```json\n'
if [ -n "$BASE_ALLOC" ]; then
printf '%s\n' "$BASE_ALLOC"
else
echo '{}'
fi
printf '```\n'
echo
echo "</details>"
} >> "$GITHUB_STEP_SUMMARY"
- uses: actions/upload-artifact@v4
with:
name: profile-metrics
path: /tmp/metrics/
retention-days: 1