mirror of https://github.com/gofiber/fiber.git
142 lines
4.9 KiB
YAML
142 lines
4.9 KiB
YAML
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
- main
|
|
paths:
|
|
- "**.go"
|
|
pull_request:
|
|
paths:
|
|
- "**.go"
|
|
|
|
permissions:
|
|
# deployments permission to deploy GitHub pages website
|
|
deployments: write
|
|
# contents permission to update benchmark contents in gh-pages branch
|
|
contents: write
|
|
# allow posting comments to pull request
|
|
pull-requests: write
|
|
|
|
name: Benchmark
|
|
jobs:
|
|
Compare:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Fetch Repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0 # to be able to retrieve the last commit in main
|
|
|
|
- name: Install Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
# NOTE: Keep this in sync with the version from go.mod
|
|
go-version: "1.23.x"
|
|
|
|
- name: Run Benchmark
|
|
run: set -o pipefail; go test ./... -benchmem -run=^$ -bench . | tee output.txt
|
|
### hack because of the problem with duplicated benchmark names - https://github.com/benchmark-action/github-action-benchmark/issues/264
|
|
- name: Extract Module Name
|
|
id: extract-module
|
|
run: |
|
|
MODULE_NAME=$(awk '/^module / {print $2}' go.mod)
|
|
echo "MODULE_NAME=$MODULE_NAME" >> $GITHUB_ENV
|
|
|
|
- name: Identify Duplicate Benchmark Names
|
|
run: |
|
|
awk '/^Benchmark/ {print $1}' output.txt | sort | uniq -d > duplicate_benchmarks.txt
|
|
|
|
- name: Add Normalized Package Prefix to Duplicate Benchmark Names
|
|
run: |
|
|
awk -v MODULE_NAME="$MODULE_NAME" '
|
|
FNR==NR {duplicates[$1]; next}
|
|
/^pkg: / { package=$2 }
|
|
/^Benchmark/ {
|
|
if ($1 in duplicates) {
|
|
sub("^" MODULE_NAME "/?", "", package)
|
|
gsub("/", "_", package)
|
|
print $1 "_" package substr($0, length($1) + 1)
|
|
} else {
|
|
print $0
|
|
}
|
|
next
|
|
}
|
|
{ print }
|
|
' duplicate_benchmarks.txt output.txt > output_prefixed.txt
|
|
mv output_prefixed.txt output.txt
|
|
### end
|
|
|
|
# NOTE: Benchmarks could change with different CPU types
|
|
- name: Get GitHub Runner System Information
|
|
uses: kenchan0130/actions-system-info@v1.3.0
|
|
id: system-info
|
|
|
|
- name: Get Main branch SHA
|
|
id: get-main-branch-sha
|
|
run: |
|
|
SHA=$(git rev-parse origin/main)
|
|
echo "sha=$SHA" >> $GITHUB_OUTPUT
|
|
|
|
- name: Get Benchmark Results from main branch
|
|
id: cache
|
|
uses: actions/cache/restore@v4
|
|
with:
|
|
path: ./cache
|
|
key: ${{ steps.get-main-branch-sha.outputs.sha }}-${{ runner.os }}-${{ steps.system-info.outputs.cpu-model }}-benchmark
|
|
|
|
# This will only run if we have Benchmark Results from main branch
|
|
- name: Compare PR Benchmark Results with main branch
|
|
uses: benchmark-action/github-action-benchmark@v1.20.4
|
|
if: steps.cache.outputs.cache-hit == 'true'
|
|
with:
|
|
tool: 'go'
|
|
output-file-path: output.txt
|
|
external-data-json-path: ./cache/benchmark-data.json
|
|
# Do not save the data (This allows comparing benchmarks)
|
|
save-data-file: false
|
|
fail-on-alert: true
|
|
# Comment on the PR if the branch is not a fork
|
|
comment-on-alert: ${{ github.event.pull_request.head.repo.fork == false }}
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
summary-always: true
|
|
alert-threshold: "150%"
|
|
|
|
- name: Store Benchmark Results for main branch
|
|
uses: benchmark-action/github-action-benchmark@v1.20.4
|
|
if: ${{ github.ref_name == 'main' }}
|
|
with:
|
|
tool: 'go'
|
|
output-file-path: output.txt
|
|
external-data-json-path: ./cache/benchmark-data.json
|
|
# Save the data to external file (cache)
|
|
save-data-file: true
|
|
fail-on-alert: false
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
summary-always: true
|
|
alert-threshold: "150%"
|
|
|
|
- name: Publish Benchmark Results to GitHub Pages
|
|
uses: benchmark-action/github-action-benchmark@v1.20.4
|
|
if: ${{ github.ref_name == 'main' }}
|
|
with:
|
|
tool: 'go'
|
|
output-file-path: output.txt
|
|
benchmark-data-dir-path: "benchmarks"
|
|
fail-on-alert: false
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
comment-on-alert: true
|
|
summary-always: true
|
|
# Save the data to external file (GitHub Pages)
|
|
save-data-file: true
|
|
alert-threshold: "150%"
|
|
# TODO: reactivate it later -> when v3 is the stable one
|
|
#auto-push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
|
|
auto-push: false
|
|
|
|
- name: Update Benchmark Results cache
|
|
uses: actions/cache/save@v4
|
|
if: ${{ github.ref_name == 'main' }}
|
|
with:
|
|
path: ./cache
|
|
key: ${{ steps.get-main-branch-sha.outputs.sha }}-${{ runner.os }}-${{ steps.system-info.outputs.cpu-model }}-benchmark
|