Benchmarks oct 23 fix #98
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: benchmarks | |
on: | |
push: | |
branches: | |
- master | |
pull_request_target: | |
branches: | |
- master | |
types: | |
- opened | |
- reopened | |
- synchronize | |
- labeled # benchmarks label required | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} | |
cancel-in-progress: true | |
defaults: | |
run: | |
shell: bash -l {0} | |
jobs: | |
build: | |
if: github.event_name == 'push' || | |
github.event_name == 'workflow_dispatch' || | |
(github.event_name == 'pull_request_target' && | |
contains(github.event.pull_request.labels.*.name, 'benchmarks')) | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
if: github.event_name != 'pull_request_target' | |
with: | |
fetch-depth: 0 | |
- name: Checkout pull/${{ github.event.number }} | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.sha }} | |
fetch-depth: 0 | |
if: github.event_name == 'pull_request_target' | |
- name: Restore Atom Data | |
uses: actions/cache/restore@v3 | |
id: atom-data-restore | |
with: | |
path: benchmarks/data/kurucz_cd23_chianti_H_He.h5 | |
key: atom-data | |
- name: Download Atom Data | |
if: steps.atom-data-restore.outputs.cache-hit != 'true' | |
run: | | |
REPO_URL="https://dev.azure.com/tardis-sn/TARDIS/_apis/git/repositories/tardis-refdata" | |
wget -q "$REPO_URL/items?path=atom_data/kurucz_cd23_chianti_H_He.h5&versionType=branch&version=master&resolveLfs=true" -O benchmarks/data/kurucz_cd23_chianti_H_He.h5 | |
- name: Save Atom Data | |
uses: actions/cache/save@v3 | |
if: ${{ steps.atom-data-restore.outputs.cache-hit != 'true' && always() || false }} | |
id: atom-data-cache-save | |
with: | |
path: benchmarks/data/kurucz_cd23_chianti_H_He.h5 | |
key: atom-data | |
- name: Setup Mamba | |
uses: mamba-org/setup-micromamba@v1 | |
with: | |
environment-name: benchmark | |
init-shell: >- | |
bash | |
create-args: >- | |
python | |
asv | |
mamba | |
- name: Install asv | |
run: pip install asv | |
- name: Accept all asv questions | |
run: asv machine --yes | |
- name: Run benchmarks for last 5 commits if not PR | |
if: github.event_name != 'pull_request_target' | |
run: | | |
git log -n 5 --pretty=format:"%H" >> tag_commits.txt | |
asv run HASHFILE:tag_commits.txt | tee asv-output.log | |
if grep -q failed asv-output.log; then | |
echo "Some benchmarks have failed!" | |
exit 1 | |
fi | |
- name: Generate Graphs and HTML | |
if: github.event_name != 'pull_request_target' | |
run: asv publish | |
- name: Delete env files | |
if: github.event_name != 'pull_request_target' | |
run: rm -r .asv/env | |
- name: Push results to results repository | |
if: github.event_name != 'pull_request_target' | |
continue-on-error: true | |
uses: cpina/github-action-push-to-another-repository@main | |
env: | |
API_TOKEN_GITHUB: ${{ secrets.BOT_TOKEN }} | |
with: | |
source-directory: .asv | |
destination-github-username: tardis-sn | |
destination-repository-name: tardis-benchmarks | |
user-email: tardis.sn.bot@gmail.com | |
target-branch: main | |
target-directory: .asv | |
- name: Compare HEAD with master if PR | |
if: github.event_name == 'pull_request_target' | |
continue-on-error: true # TODO: step failed sporadically while testing | |
run: | | |
asv continuous ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | tee asv-cont-output.log | |
if grep -q failed asv-cont-output.log; then | |
echo "Some benchmarks have errors!" | |
exit 1 | |
fi | |
- name: Compare Master and PR head | |
run: asv compare ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | tee asv-compare-output.log | |
- name: Compare Master and PR head but only show changed results | |
run: asv compare ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} --only-changed | tee asv-compare-changed-output.log | |
- name: Benchmarks compare output | |
id: asv_pr_vs_master | |
uses: juliangruber/read-file-action@v1.0.0 | |
with: | |
path: asv-compare-output.log | |
- name: Benchmarks compare only changed output | |
id: asv_pr_vs_master_changed | |
uses: juliangruber/read-file-action@v1.0.0 | |
with: | |
path: asv-compare-changed-output.log | |
- name: Find Comment | |
if: always() && github.event_name == 'pull_request_target' | |
uses: peter-evans/find-comment@v1 | |
id: fc | |
with: | |
issue-number: ${{ github.event.number }} | |
body-includes: I ran benchmarks as you asked | |
- name: Post comment | |
if: github.event_name == 'pull_request_target' | |
uses: peter-evans/create-or-update-comment@v2 | |
with: | |
token: ${{ secrets.BOT_TOKEN }} | |
issue-number: ${{ github.event.number }} | |
comment-id: ${{ steps.fc.outputs.comment-id }} | |
edit-mode: replace | |
body: | | |
*\*beep\* \*bop\** | |
Hi human, | |
I ran benchmarks as you asked comparing master (${{ github.event.pull_request.base.sha }}) and the latest commit (${{ github.event.pull_request.head.sha }}). | |
Here are the logs produced by ASV. | |
Results can also be downloaded as artifacts [**here**](${{ env.URL }}). | |
Significantly changed benchmarks: | |
<details> | |
```diff | |
${{ steps.asv_pr_vs_master_changed.outputs.content }} | |
``` | |
</details> | |
All benchmarks: | |
<details> | |
```diff | |
${{ steps.asv_pr_vs_master.outputs.content }} | |
``` | |
</details> | |
env: | |
URL: https://github.com/${{ github.repository_owner }}/${{ github.event.repository.name }}/actions/runs/${{ github.run_id }}?check_suite_focus=true | |
- name: Save results artifact | |
uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: asv-benchmark-results-${{ runner.os }} | |
path: | | |
.asv/results | |
asv-cont-output.log | |
asv-compare-output.log | |
asv-compare-changed-output.log | |