snapshot of https://github.com/casbin/casbin.git (master, 2026-09-15; blobs > 131072B omitted)
This commit is contained in:
97
.github/workflows/performance-pr.yml
vendored
Normal file
97
.github/workflows/performance-pr.yml
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
name: Performance Comparison for Pull Requests
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
jobs:
|
||||
benchmark-pr:
|
||||
name: Performance benchmark comparison
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout PR branch
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 'stable'
|
||||
|
||||
# Save commit SHAs for display
|
||||
- name: Save commit info
|
||||
id: commits
|
||||
run: |
|
||||
BASE_SHA="${{ github.event.pull_request.base.sha }}"
|
||||
HEAD_SHA="${{ github.event.pull_request.head.sha }}"
|
||||
echo "base_short=${BASE_SHA:0:7}" >> $GITHUB_OUTPUT
|
||||
echo "head_short=${HEAD_SHA:0:7}" >> $GITHUB_OUTPUT
|
||||
|
||||
# Run benchmark on PR branch
|
||||
- name: Run benchmark on PR branch
|
||||
run: |
|
||||
go test -bench '.' -benchtime=2s -benchmem ./... | tee pr-bench.txt
|
||||
|
||||
# Checkout base branch and run benchmark
|
||||
- name: Checkout base branch
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.base.sha }}
|
||||
clean: false
|
||||
path: base
|
||||
|
||||
- name: Run benchmark on base branch
|
||||
working-directory: base
|
||||
run: |
|
||||
go test -bench '.' -benchtime=2s -benchmem ./... | \
|
||||
tee ../base-bench.txt
|
||||
|
||||
# Install benchstat for comparison
|
||||
- name: Install benchstat
|
||||
run: go install golang.org/x/perf/cmd/benchstat@latest
|
||||
|
||||
# Compare benchmarks using benchstat
|
||||
- name: Compare benchmarks with benchstat
|
||||
id: benchstat
|
||||
run: |
|
||||
cat > comparison.md << 'EOF'
|
||||
## Benchmark Comparison
|
||||
|
||||
Comparing base branch (`${{ steps.commits.outputs.base_short }}`)
|
||||
vs PR branch (`${{ steps.commits.outputs.head_short }}`)
|
||||
|
||||
```
|
||||
EOF
|
||||
benchstat base-bench.txt pr-bench.txt >> comparison.md || true
|
||||
echo '```' >> comparison.md
|
||||
|
||||
# Post-process to append percentage + emoji column (🚀 faster < -10%, 🐌 slower > +10%, otherwise ➡️)
|
||||
if [ ! -f comparison.md ]; then
|
||||
echo "comparison.md not found after benchstat." >&2
|
||||
exit 1
|
||||
fi
|
||||
python3 .github/scripts/benchmark_formatter.py
|
||||
|
||||
# Save PR number
|
||||
- name: Save PR number
|
||||
run: |
|
||||
PR_NUMBER="${{ github.event.pull_request.number }}"
|
||||
if [ -z "$PR_NUMBER" ]; then
|
||||
echo "Error: Pull request number is not available in event payload." >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "$PR_NUMBER" > pr_number.txt
|
||||
|
||||
# Upload benchmark results
|
||||
- name: Upload benchmark results
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: benchmark-results
|
||||
path: |
|
||||
comparison.md
|
||||
pr_number.txt
|
||||
Reference in New Issue
Block a user