Skip to content

Add fuzzing for state journal #90

Add fuzzing for state journal

Add fuzzing for state journal #90

Workflow file for this run

# This workflow runs whenever a PR is opened or updated, or a commit is pushed to main. It runs
# several checks:
# - fmt: checks that the code is formatted according to rustfmt
# - clippy: checks that the code does not contain any clippy warnings
# - doc: checks that the code can be documented without errors
# - hack: check combinations of feature flags
# - msrv: check that the msrv specified in the crate is correct
permissions:
contents: read
# This configuration allows maintainers of this repo to create a branch and pull request based on
# the new branch. Restricting the push trigger to the main branch ensures that the PR only gets
# built once.
on:
push:
branches: [main]
pull_request:
# If new code is pushed to a PR branch, then cancel in progress workflows for that PR. Ensures that
# we don't waste CI time, and returns results quicker https://github.com/jonhoo/rust-ci-conf/pull/5
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: check
jobs:
fmt:
runs-on: ubuntu-latest
name: nightly / fmt
strategy:
fail-fast: false
matrix:
target: [thumbv8m.main-none-eabihf]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: rustup target add ${{ matrix.target }}
run: rustup target add ${{ matrix.target }}
- name: Install nightly
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- name: cargo fmt --check (libs)
run: cargo fmt --check
working-directory: "./libs"
- name: cargo fmt --check (examples)
run: cargo fmt --check
working-directory: "./examples/rt685s"
- name: cargo fmt --check (bootloader-tool)
run: cargo fmt --check
working-directory: "./bootloader-tool"
clippy:
runs-on: ubuntu-latest
name: ${{ matrix.toolchain }} / clippy
permissions:
contents: read
checks: write
strategy:
fail-fast: false
matrix:
# Get early warning of new lints which are regularly introduced in beta channels.
toolchain: [stable, beta]
target: [thumbv8m.main-none-eabihf]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install ${{ matrix.toolchain }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
components: clippy,rustfmt
- name: rustup target add ${{ matrix.target }}
run: rustup target add ${{ matrix.target }}
- name: cargo clippy (libs)
uses: giraffate/clippy-action@v1
with:
reporter: "github-pr-check"
clippy_flags: -- -F clippy::suspicious -D clippy::correctness -F clippy::perf -F clippy::style
github_token: ${{ secrets.GITHUB_TOKEN }}
workdir: "./libs"
- name: cargo clippy (examples)
uses: giraffate/clippy-action@v1
with:
reporter: "github-pr-check"
clippy_flags: -- -F clippy::suspicious -D clippy::correctness -F clippy::perf -F clippy::style
github_token: ${{ secrets.GITHUB_TOKEN }}
workdir: "./examples/rt685s"
- name: cargo clippy (bootloader-tool)
uses: giraffate/clippy-action@v1
with:
reporter: "github-pr-check"
clippy_flags: -- -D clippy::suspicious -D clippy::correctness -D clippy::perf -D clippy::style
github_token: ${{ secrets.GITHUB_TOKEN }}
workdir: "./bootloader-tool"
# Enable once we have a released crate
# semver:
# runs-on: ubuntu-latest
# name: semver
# strategy:
# fail-fast: false
# steps:
# - uses: actions/checkout@v4
# with:
# submodules: true
# - name: Install stable
# uses: dtolnay/rust-toolchain@stable
# with:
# components: rustfmt
# - name: cargo-semver-checks
# uses: obi1kenobi/cargo-semver-checks-action@v2
doc:
# run docs generation on nightly rather than stable. This enables features like
# https://doc.rust-lang.org/beta/unstable-book/language-features/doc-cfg.html which allows an
# API be documented as only available in some specific platforms.
runs-on: ubuntu-latest
name: nightly / doc
strategy:
fail-fast: false
matrix:
target: [thumbv8m.main-none-eabihf]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install nightly
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt # required for device-driver
- name: rustup target add ${{ matrix.target }}
run: rustup target add ${{ matrix.target }}
- name: cargo doc (libs)
run: cargo doc --no-deps --features mimxrt685s
working-directory: "./libs"
env:
RUSTDOCFLAGS: --cfg docsrs
- name: cargo doc (examples)
run: cargo doc --no-deps
working-directory: "./examples/rt685s"
env:
RUSTDOCFLAGS: --cfg docsrs
hack:
# cargo-hack checks combinations of feature flags to ensure that features are all additive
# which is required for feature unification
runs-on: ubuntu-latest
name: ubuntu / stable / features
strategy:
fail-fast: false
matrix:
target: [thumbv8m.main-none-eabihf]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt # required for device-driver
- name: rustup target add thumbv8m.main-none-eabihf
run: rustup target add thumbv8m.main-none-eabihf
- name: cargo install cargo-batch
run: cargo install --git https://github.com/embassy-rs/cargo-batch cargo --bin cargo-batch --locked
- name: cargo manual hack (libs)
run: ./ci.sh
working-directory: "./libs"
- name: cargo manual hack (examples/rt685s)
run: ./ci.sh
working-directory: "./examples/rt685s"
deny:
# cargo-deny checks licenses, advisories, sources, and bans for
# our dependencies.
runs-on: ubuntu-latest
name: ubuntu / stable / deny
strategy:
fail-fast: false
matrix:
target: [thumbv8m.main-none-eabihf]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: rustup target add ${{ matrix.target }}
run: rustup target add ${{ matrix.target }}
- name: Cargo deny (libs)
uses: EmbarkStudios/cargo-deny-action@v2
with:
log-level: warn
manifest-path: ./libs/Cargo.toml
command: check
- name: Cargo deny (examples)
uses: EmbarkStudios/cargo-deny-action@v2
with:
log-level: warn
manifest-path: ./examples/rt685s/Cargo.toml
command: check
msrv:
# check that we can build using the minimal rust version that is specified by this crate
runs-on: ubuntu-latest
# we use a matrix here just because env can't be used in job names
# https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability
strategy:
fail-fast: false
matrix:
msrv: ["1.90"] # We are depending on embassy-imxrt.
target: [thumbv8m.main-none-eabihf]
name: ubuntu / MSRV ${{ matrix.msrv }}
steps:
- name: Install libudev (linux)
run: |
sudo apt update
sudo apt install -y libudev-dev
- uses: actions/checkout@v4
with:
submodules: true
- name: Install ${{ matrix.msrv }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.msrv }}
components: rustfmt # required for device-driver
- name: rustup target add ${{ matrix.target }}
run: rustup target add ${{ matrix.target }}
- name: cargo +${{ matrix.msrv }} check (libs)
run: cargo check --features mimxrt685s
working-directory: "./libs"
- name: cargo +${{ matrix.msrv }} check (examples)
run: cargo check
working-directory: "./examples/rt685s"
- name: cargo +${{ matrix.msrv }} check (bootloader-tool)
run: cargo check
working-directory: "./bootloader-tool"
fuzz:
runs-on: ubuntu-latest
name: ubuntu / stable / fuzz
strategy:
fail-fast: false
matrix:
bin: [random-flash, interrupted]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: cargo install cargo-fuzz
run: cargo install cargo-fuzz --locked
- name: cargo fuzz (libs/state)
run: cargo fuzz run --sanitizer none -j`nproc` ${{ matrix.bin }} -- -max_total_time=10
working-directory: "./libs/ec-slimloader-state/fuzz"