Skip to content

chore: Improve CI benchmark speed #263

chore: Improve CI benchmark speed

chore: Improve CI benchmark speed #263

Workflow file for this run

name: Test all targets
on:
push:
pull_request:
workflow_dispatch:
permissions:
contents: write
jobs:
quick-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Check Type
run: cargo fmt -- --check
- name: Check Clippy
run: cargo clippy -- -Dwarnings
- name: Run internal tests
run: cargo test --verbose -- --nocapture
- name: Build
run: cargo build
build:
needs: quick-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Build docs
run: cargo doc
- name: Move documentation
run: mkdir -p pages/doc && mv target/doc/* pages/doc/
- name: Get previous benchmark data
if: ${{ github.ref == 'refs/heads/master' }}
run: |
echo "Fetching gh-pages branch"
git fetch origin gh-pages
echo "Checking out gh-pages branch"
git checkout gh-pages
echo "Copying data file from gh-pages to cache"
mkdir -p pages/dev && cp -r dev/* pages/dev/ || { echo "Failed to copy dev folder" ; exit 1; }
echo "Checking out current previous branch"
git checkout -
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
if: ${{ github.ref == 'refs/heads/master' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./pages
cross-compile-bench:
needs: build
if: ${{ github.repository_owner == 'bluerobotics' }}
runs-on: ubuntu-latest
strategy:
matrix:
TARGET: [armv7-unknown-linux-gnueabihf]
steps:
- uses: actions/checkout@master
- name: Cross-compile benchmark
uses: RaulTrombin/actions-rust-cross@add_bench
with:
command: bench
target: ${{ matrix.TARGET }}
args: "--no-run"
- name: List benchmark files
run: |
echo "Available files in target directory:"
find target/${{ matrix.TARGET }}/release -type f -name "bench-*" -not -name "*.d"
- name: Upload benchmark binary
uses: actions/upload-artifact@v3
with:
name: benchmark-binary
# Exclude .d files and only get the actual binary
path: target/${{ matrix.TARGET }}/release/deps/bench-[0-9a-f]*
retention-days: 1
run-bench:
needs: cross-compile-bench
if: ${{ github.repository_owner == 'bluerobotics' }}
runs-on: raspbian-armv7-kernel-5.10.33
steps:
- uses: actions/checkout@master
- name: Download benchmark binary
uses: actions/download-artifact@v3
with:
name: benchmark-binary
path: ./bench-binary
- name: Get previous benchmark data
run: |
echo "Fetching gh-pages branch"
git fetch origin gh-pages
echo "Checking out gh-pages branch"
git checkout gh-pages
if [ ! -d "cache" ]; then
echo "Cache folder does not exist, creating it"
mkdir cache
fi
echo "Copying data file from gh-pages to cache"
cp dev/cache/benchmark-data.json cache/benchmark-data.json || { echo "Failed to copy data file" ; exit 1; }
echo "Checking out current previous branch"
git checkout -
- name: Debug downloaded files
run: |
echo "Files in bench-binary directory:"
ls -la ./bench-binary/
- name: Make benchmark executable
run: |
chmod +x ./bench-binary/*
find ./bench-binary -type f -executable -name "bench-*" -not -name "*.d"
- name: Run benchmark
run: |
BENCH_BINARY=$(find ./bench-binary -type f -executable -name "bench-*" -not -name "*.d" | head -n 1)
echo "Found benchmark binary: $BENCH_BINARY"
if [ -z "$BENCH_BINARY" ]; then
echo "No benchmark binary found!"
exit 1
fi
$BENCH_BINARY --jobs 1 --bench bench -- --output-format bencher | tee output.txt || { echo "Benchmark failed"; exit 1; }
- name: Compare results & store cached results
uses: benchmark-action/[email protected]
with:
tool: 'cargo'
output-file-path: output.txt
summary-always: true
alert-threshold: "130%"
fail-on-alert: true
external-data-json-path: ./cache/benchmark-data.json
skip-fetch-gh-pages: "true"
- name: Update data file
if: ${{ github.ref == 'refs/heads/master' }}
run: |
git config user.name "GitHub Actions Bot"
git config user.email "[email protected]"
git fetch origin gh-pages
git checkout gh-pages
if [ ! -d "dev/cache" ]; then
echo "Cache folder does not exist, creating it"
mkdir -p dev/cache
fi
cp cache/benchmark-data.json dev/cache/benchmark-data.json
tree cache
git add dev/cache/benchmark-data.json
git commit -m "Update benchmark-data file"
git push origin gh-pages
deploy:
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Checkout to repository
uses: actions/checkout@v2
- name: Setup Rust toolchain
uses: actions-rs/[email protected]
with:
toolchain: stable
override: true
- name: Install cargo-bump
run: cargo install cargo-bump --force
- name: Modify version with tag
run: cargo bump ${{ github.ref_name }}
- name: Automatic commit for crate version upgrade
uses: stefanzweifel/git-auto-commit-action@v4
with:
branch: master
commit_message: "Cargo: Update the crate version to ${{ github.ref_name }}"
- name: Publish to crates.io
uses: katyo/publish-crates@v1
with:
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}