diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index acf9aee..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ed23ead --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,174 @@ +name: CI + +on: + pull_request: + types: + - opened + - reopened + - synchronize + - labeled + push: + branches: + - main + +jobs: + tests: + name: Unit tests + + if: | + github.event_name != 'pull_request' || + github.event.pull_request.author_association == 'COLLABORATOR' || + github.event.pull_request.author_association == 'MEMBER' || + github.event.pull_request.user.login == 'dependabot[bot]' || + contains(github.event.pull_request.labels.*.name, 'safe to test') + + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [ windows-latest, macos-latest, ubuntu-latest ] + rust_version: [ stable, 1.76.0 ] + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ matrix.rust_version }} + components: llvm-tools-preview + + - name: Cache Rust dependencies + uses: Swatinem/rust-cache@v2 + + clippy_check: + name: Clippy + runs-on: ubuntu-latest + + if: | + github.event_name != 'pull_request' || + github.event.pull_request.author_association == 'COLLABORATOR' || + github.event.pull_request.author_association == 'MEMBER' || + github.event.pull_request.user.login == 'dependabot[bot]' || + contains(github.event.pull_request.labels.*.name, 'safe to test') + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + components: clippy + + - name: Cache Rust dependencies + uses: Swatinem/rust-cache@v2 + + - name: Run Clippy + run: cargo clippy --all-features --all-targets -- -Dwarnings + + cargo_fmt: + name: Enforce Rust code format + + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install nightly toolchain + uses: dtolnay/rust-toolchain@nightly + with: + components: rustfmt + + - name: Check format + run: cargo +nightly fmt --all -- --check + + docs_rs: + name: Preflight docs.rs build + + if: | + github.event_name != 'pull_request' || + github.event.pull_request.author_association == 'COLLABORATOR' || + github.event.pull_request.author_association == 'MEMBER' || + github.event.pull_request.user.login == 'dependabot[bot]' || + contains(github.event.pull_request.labels.*.name, 'safe to test') + + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install nightly Rust toolchain + # Nightly is used here because the docs.rs build + # uses nightly and we use doc_cfg features that are + # not in stable Rust as of this writing (Rust 1.76). + uses: dtolnay/rust-toolchain@nightly + + - name: Run cargo docs + # This is intended to mimic the docs.rs build + # environment. The goal is to fail PR validation + # if the subsequent release would result in a failed + # documentation build on docs.rs. + run: cargo +nightly doc --workspace --all-features --no-deps + env: + RUSTDOCFLAGS: --cfg docsrs + DOCS_RS: 1 + cargo-deny: + name: License / vulnerability audit + + if: | + github.event_name != 'pull_request' || + github.event.pull_request.author_association == 'COLLABORATOR' || + github.event.pull_request.author_association == 'MEMBER' || + github.event.pull_request.user.login == 'dependabot[bot]' || + contains(github.event.pull_request.labels.*.name, 'safe to test') + + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + checks: + - advisories + - bans licenses sources + + # Prevent sudden announcement of a new advisory from failing CI: + continue-on-error: ${{ matrix.checks == 'advisories' }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Audit crate dependencies + uses: EmbarkStudios/cargo-deny-action@v2 + with: + command: check ${{ matrix.checks }} + + unused_deps: + name: Check for unused dependencies + + if: | + github.event_name != 'pull_request' || + github.event.pull_request.author_association == 'COLLABORATOR' || + github.event.pull_request.author_association == 'MEMBER' || + github.event.pull_request.user.login == 'dependabot[bot]' || + contains(github.event.pull_request.labels.*.name, 'safe to test') + + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install nightly Rust toolchain + uses: dtolnay/rust-toolchain@nightly + + - name: Run cargo-udeps + uses: aig787/cargo-udeps-action@v1 + with: + version: latest + args: --all-targets --all-features \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3076073..f8bba65 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ Cargo.lock **/*.rs.bk .DS_Store -__pycache__/ \ No newline at end of file +__pycache__/ +/.idea diff --git a/src/manifest_builder.rs b/src/manifest_builder.rs index 186d95a..7d288e2 100644 --- a/src/manifest_builder.rs +++ b/src/manifest_builder.rs @@ -140,7 +140,9 @@ mod tests { builder .from_json(MANIFEST_JSON) .expect("Failed to load manifest Json"); - builder.add_resource("thumbnail", &IMAGE.to_vec()).expect("Failed to add thumbnail stream"); + builder + .add_resource("thumbnail", &IMAGE.to_vec()) + .expect("Failed to add thumbnail stream"); let mut input = TestStream::from_memory(IMAGE.to_vec()); let mut input = StreamAdapter::from_stream_mut(&mut input); //let mut output = Cursor::new(Vec::new()); @@ -165,7 +167,9 @@ mod tests { builder .from_json(MANIFEST_JSON) .expect("Failed to load manifest Json"); - builder.add_resource("thumbnail", &IMAGE.to_vec()).expect("Failed to add thumbnail stream"); + builder + .add_resource("thumbnail", &IMAGE.to_vec()) + .expect("Failed to add thumbnail stream"); let mut input = TestStream::from_memory(IMAGE.to_vec()); let mut output = TestStream::new(); let test_signer = Box::new(TestSigner::new());