Skip to content

Commit a1fec70

Browse files
committed
Return benchmark results publication back to the main workflow
1 parent 0f031a9 commit a1fec70

File tree

2 files changed

+68
-79
lines changed

2 files changed

+68
-79
lines changed

.github/workflows/benchmark-upload.yml

-79
This file was deleted.

.github/workflows/benchmark.yml

+68
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,71 @@ jobs:
138138
with:
139139
name: bench-comparison-result-${{ matrix.os }}
140140
path: ${{ env.BENCHMARK_RESULTS }}/comparison/**/*.json
141+
142+
upload-benchmark-results:
143+
if: (github.event_name == 'push' || github.event_name == 'pull_request') && github.repository == 'OptimumCode/json-schema-validator'
144+
needs:
145+
- benchmark-matrix
146+
runs-on: ubuntu-latest
147+
env:
148+
RESULTS_DIR: bench-results
149+
permissions:
150+
# deployments permission to deploy GitHub pages website
151+
deployments: write
152+
# contents permission to update benchmark contents in gh-pages branch
153+
contents: write
154+
# pull-requests permission to create comments on PR in case of alert
155+
pull-requests: write
156+
strategy:
157+
# to make sure results are submitted one by one
158+
max-parallel: 1
159+
matrix:
160+
include:
161+
- artifact-pattern: 'bench-result-*'
162+
results-name: KMP JSON schema validator
163+
alert: true
164+
- artifact-pattern: 'bench-comparison-result-*'
165+
results-name: Compare KMP JSON schema validator
166+
alert: false
167+
name: 'Process benchmark results for ${{ matrix.results-name }}'
168+
steps:
169+
- name: 'Checkout Repository'
170+
uses: actions/checkout@v4
171+
- name: Download benchmark results
172+
uses: actions/download-artifact@v4
173+
with:
174+
pattern: ${{ matrix.artifact-pattern }}
175+
path: ${{ env.RESULTS_DIR }}
176+
merge-multiple: true
177+
- name: Show downloaded artifacts
178+
run: tree ${{ env.RESULTS_DIR }}
179+
- name: Prepare and join benchmark reports
180+
id: prep
181+
run: |
182+
for report in $(find ./${{ env.RESULTS_DIR }} -type f -name "*.json")
183+
do
184+
file_name=$(basename "$report")
185+
platform="${file_name%.*}"
186+
jq "[ .[] | .benchmark |= \"${platform}.\" + ltrimstr(\"io.github.optimumcode.json.schema.benchmark.\") | .params |= map_values(. |= split(\"/\")[-1]) ]" $report > ${{ env.RESULTS_DIR }}/$platform.json
187+
done
188+
AGGREGATED_REPORT=aggregated.json
189+
# Joined reports looks like this: [[{},{}], [{},{}]]
190+
# We need to transform them into this: [{},{}]
191+
ls ${{ env.RESULTS_DIR }}/*.json
192+
jq -s '[ .[] | .[] ]' ${{ env.RESULTS_DIR }}/*.json > $AGGREGATED_REPORT
193+
echo "report=$AGGREGATED_REPORT" >> $GITHUB_OUTPUT
194+
- name: Store benchmark result
195+
uses: benchmark-action/github-action-benchmark@v1
196+
with:
197+
name: ${{ matrix.results-name }}
198+
tool: 'jmh'
199+
output-file-path: ${{ steps.prep.outputs.report }}
200+
alert-comment-cc-users: "@OptimumCode"
201+
comment-on-alert: ${{ matrix.alert }}
202+
summary-always: true
203+
alert-threshold: '150%'
204+
fail-threshold: '200%'
205+
max-items-in-chart: 50
206+
github-token: ${{ secrets.GITHUB_TOKEN }}
207+
# Push and deploy GitHub pages branch automatically only if run in main repo and not in PR
208+
auto-push: ${{ github.event_name != 'pull_request' }}

0 commit comments

Comments
 (0)