[WiP][DNM] IMR: illustrate running in IMR #14317
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: IPC fuzzing | |
# 'workflow_dispatch' allows running this workflow manually from the | |
# 'Actions' tab | |
# yamllint disable-line rule:truthy | |
on: | |
workflow_call: | |
inputs: | |
fuzzing_duration_s: | |
type: number | |
default: 300 # 5 minutes | |
workflow_dispatch: | |
inputs: | |
fuzzing_duration_s: | |
type: number | |
default: 300 | |
pull_request: | |
# TODO: can we provide a default inputs here too? | |
jobs: | |
simple-IPC-fuzz_sh: | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
# Keep these names short due to questionable Github UI choices | |
IPC: [3, 4] | |
steps: | |
- name: add i386 arch | |
run: | | |
sudo dpkg --add-architecture i386 | |
sudo apt-get update | |
- name: apt-get install i386 packages | |
run: | | |
# We don't know why Github requires us to explicit all these i386 | |
# dependencies. On a vanilla Ubuntu 22.04 the last apt-get is | |
# enough. | |
# Also, it does not seem possible to download Github images for | |
# local testing which means trial and error for this requires a | |
# force-push every time: excruciatingly slow! | |
sudo apt-get -y install \ | |
libgcc-s1:i386 libc6-dev:i386 libstdc++6:i386 \ | |
libgomp1:i386 libitm1:i386 libatomic1:i386 \ | |
libasan8:i386 libubsan1:i386 libquadmath0:i386 \ | |
sudo apt-get -y install \ | |
libc6-dev-i386 libstdc++-12-dev:i386 | |
- name: apt-get install build tools | |
run: | |
sudo apt-get -y install | |
clang llvm ninja-build device-tree-compiler python3-pyelftools | |
- uses: actions/checkout@v4 | |
with: | |
path: ./workspace/sof | |
filter: 'tree:0' | |
- name: west update | |
run: | | |
cd workspace/sof | |
pip3 install west | |
west init -l | |
west update --narrow --fetch-opt=--filter=tree:0 | |
- name: build and run fuzzer for a few minutes | |
run: | | |
cd workspace | |
clang --verbose | |
set -x | |
duration="${{inputs.fuzzing_duration_s}}" | |
duration="${duration:-301}" # pull_request has not 'inputs.' :-( | |
# Note libFuzzer makes a difference between -jobs and -workers (capped at nproc/2) | |
sof/scripts/fuzz.sh -i '${{ matrix.IPC }}' -o fuzz-stdout.txt -t "$duration" -j"$(nproc)" | |
- name: Upload stdout | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: ${{ matrix.IPC }} logs | |
path: | | |
workspace/crash-* | |
workspace/fuzz-stdout.txt | |
workspace/fuzz-*.log |