bench all weekly - and fix for pallet_multisig lib #1
Workflow file for this run
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: Bench all runtimes (frame-omni-bencher) | |
on: | |
# schedule: | |
# - cron: '0 1 * * 0' # weekly on Sunday night 01:00 UTC | |
# workflow_dispatch: | |
pull_request: | |
permissions: # allow the action to create a PR | |
contents: write | |
issues: write | |
pull-requests: write | |
actions: read | |
jobs: | |
preflight: | |
uses: ./.github/workflows/reusable-preflight.yml | |
runtime-matrix: | |
runs-on: ubuntu-latest | |
needs: [preflight] | |
timeout-minutes: 30 | |
outputs: | |
runtime: ${{ steps.runtime.outputs.runtime }} | |
container: | |
image: ${{ needs.preflight.outputs.IMAGE }} | |
name: Extract runtimes from matrix | |
steps: | |
- uses: actions/checkout@v4 | |
- id: runtime | |
run: | | |
RUNTIMES=$(jq '[.[] | select(.package != null)]' .github/workflows/runtimes-matrix.json | head -n 2) | |
RUNTIMES=$(echo $RUNTIMES | jq -c .) | |
echo "runtime=$RUNTIMES" | |
echo "runtime=$RUNTIMES" >> $GITHUB_OUTPUT | |
run-frame-omni-bencher: | |
runs-on: ${{ needs.preflight.outputs.RUNNER_WEIGHTS }} | |
needs: [preflight, runtime-matrix] | |
timeout-minutes: 1440 # 24 hours per runtime | |
strategy: | |
fail-fast: false # keep running other workflows even if one fails, to see the logs of all possible failures | |
matrix: | |
runtime: ${{ fromJSON(needs.runtime-matrix.outputs.runtime) }} | |
container: | |
image: ${{ needs.preflight.outputs.IMAGE }} | |
env: | |
PACKAGE_NAME: ${{ matrix.runtime.package }} | |
FLAGS: ${{ matrix.runtime.bench_flags }} | |
RUST_LOG: "frame_omni_bencher=info,polkadot_sdk_frame=info" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: master | |
- name: script | |
id: required | |
run: | | |
# Fixes "detected dubious ownership" error in the ci | |
git config --global --add safe.directory '*' | |
git remote -v | |
python3 -m pip install -r .github/scripts/generate-prdoc.requirements.txt | |
python3 .github/scripts/cmd/cmd.py bench --runtime ${{ matrix.runtime.name }} | |
git add . | |
git status | |
if [ -f /tmp/cmd/command_output.log ]; then | |
CMD_OUTPUT=$(cat /tmp/cmd/command_output.log) | |
# export to summary to display in the PR | |
echo "$CMD_OUTPUT" >> $GITHUB_STEP_SUMMARY | |
# should be multiline, otherwise it captures the first line only | |
echo 'cmd_output<<EOF' >> $GITHUB_OUTPUT | |
echo "$CMD_OUTPUT" >> $GITHUB_OUTPUT | |
echo 'EOF' >> $GITHUB_OUTPUT | |
fi | |
git diff HEAD > diff-${{ matrix.runtime.name }}.patch | |
- name: Upload diff | |
uses: actions/upload-artifact@v4 | |
with: | |
name: diff-${{ matrix.runtime.name }} | |
path: diff-${{ matrix.runtime.name }}.patch | |
apply-diff-commit: | |
runs-on: ubuntu-latest | |
needs: [run-frame-omni-bencher] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: master | |
- name: Download all artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: patches | |
- uses: actions/create-github-app-token@v1 | |
id: generate_token | |
with: | |
app-id: ${{ secrets.CMD_BOT_APP_ID }} | |
private-key: ${{ secrets.CMD_BOT_APP_KEY }} | |
- name: Install subweight | |
run: cargo install subweight | |
- name: Apply diff and create PR | |
env: | |
GH_TOKEN: ${{ steps.generate_token.outputs.token }} | |
run: | | |
DATE=$(date +'%Y-%m-%d-%s') | |
BRANCH="update-weights-weekly-$DATE" | |
git config user.name "github-actions[bot]" | |
git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git checkout -b "$BRANCH" | |
for file in patches/diff-*/diff-*.patch; do | |
if [ -f "$file" ]; then | |
echo "Applying $file" | |
git apply "$file" | |
fi | |
done | |
rm -rf patches | |
git add . | |
git commit -m "Update all weights weekly for $DATE" | |
git push --set-upstream origin "$BRANCH" | |
SUBWEIGHT_OUTPUT=$(subweight compare commits \ | |
--path-pattern "./**/weights/**/*.rs,./**/weights.rs" \ | |
--method asymptotic \ | |
--format markdown \ | |
--no-color \ | |
--change added changed \ | |
--ignore-errors \ | |
refs/remotes/origin/master "refs/heads/$BRANCH") | |
DEGRADATION_WARNING="" | |
PR_TITLE="Update weights weekly for $DATE" | |
gh pr create \ | |
--title "$PR_TITLE" \ | |
--body "Update weights weekly for $DATE\n\n${DEGRADATION_WARNING}\n\n<details><summary>Weight Changes Analysis</summary>\n\n\`\`\`\n${SUBWEIGHT_OUTPUT}\n\`\`\`\n\n</details>" |