sequential-storage 7.1.0

A crate for storing data in flash with minimal erase cycles.
Documentation
name: CI

on:
  push:
    branches:
      - master
  # Run on any PR
  pull_request:

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo fmt --all -- --check

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo test --features arrayvec,heapless,heapless-09,alloc

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo clippy --features arrayvec,heapless,heapless-09,alloc -- -D warnings

  fuzz:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
      - uses: cargo-bins/cargo-binstall@main

      - name: Install cargo fuzz
        run: cargo binstall cargo-fuzz --no-confirm --target x86_64-unknown-linux-gnu

      - name: Smoke-test fuzz targets
        run: |
          cargo fuzz build --sanitizer none
          for target in $(cargo fuzz list) ; do
            cargo fuzz run --sanitizer none $target -- -max_total_time=10
          done

  binary-size:
    runs-on: ubuntu-latest
    permissions:
      actions: read
      pull-requests: write
    steps:
      - uses: dtolnay/rust-toolchain@nightly
      - uses: actions/cache@v3
        id: cache-cargo
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            ./example/target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - run: rustup target add thumbv7em-none-eabihf
      - run: rustup component add rust-src llvm-tools
      - if: steps.cache-cargo.outputs.cache-hit != 'true'
        run: cargo install cargo-binutils

      - name: Check out the repo with the full git history
        uses: actions/checkout@v3
        with:
          fetch-depth: "0"
      - name: Build new binary
        working-directory: ./example
        run: |
          echo 'RESULT<<EOF' >> $GITHUB_OUTPUT
          cargo size --release >> $GITHUB_OUTPUT
          echo 'EOF' >> $GITHUB_OUTPUT
        id: new-size
      - name: Save binary
        run: |
          mv ./example/target/thumbv7em-none-eabihf/release/example ./example/target/thumbv7em-none-eabihf/release/original.elf
      - name: If it's a PR checkout the base commit
        if: ${{ github.event.pull_request }}
        run: git checkout ${{ github.event.pull_request.base.sha }}
      - name: Rebuild with the base commit
        if: ${{ github.event.pull_request }}
        working-directory: ./example
        run: cargo build --release
      - name: Run Bloaty to compare both output files
        if: ${{ github.event.pull_request }}
        id: bloaty-comparison
        uses: carlosperate/bloaty-action@v1
        with:
          bloaty-args: ./example/target/thumbv7em-none-eabihf/release/original.elf -- ./example/target/thumbv7em-none-eabihf/release/example
          output-to-summary: true
      - name: Add a PR comment with the bloaty diff
        if: ${{ github.event.pull_request }}
        continue-on-error: true
        uses: actions/github-script@v7
        with:
          script: |
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## PR build size\n \`\`\`\n${{ join(steps.new-size.outputs.*, '\n') }}\n\`\`\`\n ### Diff\n\`\`\`\n${{ steps.bloaty-comparison.outputs.bloaty-output-encoded }}\`\`\`\n`
            })