Development and Maintenance
Relevant source files
This document covers the development infrastructure, build processes, and maintenance procedures for the flatten_objects
crate. It provides guidance for contributors working on the codebase and maintainers responsible for releases and quality assurance.
For detailed API usage information, see Overview. For implementation specifics, see Implementation Details.
Development Workflow Overview
The flatten_objects
crate follows a standard Rust development workflow with automated CI/CD pipelines and multi-target support for embedded and kernel environments.
Development Workflow
flowchart TD Dev["Developer"] LocalDev["Local Development"] Format["cargo fmt"] Clippy["cargo clippy"] Build["cargo build"] Test["cargo test"] Push["git push"] CI["GitHub Actions CI"] FormatCheck["Format Check"] ClippyCheck["Clippy Analysis"] MultiTarget["Multi-Target Build"] UnitTest["Unit Tests"] DocBuild["Documentation Build"] Linux["x86_64-unknown-linux-gnu"] BareMetal["x86_64-unknown-none"] RISCV["riscv64gc-unknown-none-elf"] ARM["aarch64-unknown-none-softfloat"] DocDeploy["GitHub Pages"] Success["✓ All Checks Pass"] Merge["Ready for Merge"] CI --> ClippyCheck CI --> DocBuild CI --> FormatCheck CI --> MultiTarget CI --> UnitTest Dev --> LocalDev DocBuild --> DocDeploy LocalDev --> Build LocalDev --> Clippy LocalDev --> Format LocalDev --> Push LocalDev --> Test MultiTarget --> ARM MultiTarget --> BareMetal MultiTarget --> Linux MultiTarget --> RISCV Push --> CI Success --> Merge UnitTest --> Success
Sources: .github/workflows/ci.yml(L1 - L56)
Continuous Integration Pipeline
The CI system runs on every push and pull request, performing comprehensive validation across multiple target platforms.
CI Job Configuration
Component | Configuration |
---|---|
Runner | ubuntu-latest |
Rust Toolchain | nightly |
Required Components | rust-src,clippy,rustfmt |
Target Platforms | 4 distinct targets |
Failure Strategy | fail-fast: false |
CI Pipeline Stages
flowchart TD subgraph Documentation["Documentation"] DocGen["cargo doc"] PagesDeploy["GitHub Pages Deploy"] end subgraph Testing["Testing"] UnitTests["cargo test"] LinuxOnly["Linux target only"] end subgraph subGraph1["Quality Assurance"] FmtCheck["cargo fmt --check"] ClippyRun["cargo clippy"] BuildStep["cargo build"] end subgraph subGraph0["Setup Phase"] Checkout["actions/checkout@v4"] Toolchain["dtolnay/rust-toolchain@nightly"] Version["rustc --version"] end BuildStep --> DocGen BuildStep --> UnitTests Checkout --> Toolchain ClippyRun --> BuildStep DocGen --> PagesDeploy FmtCheck --> ClippyRun Toolchain --> Version UnitTests --> LinuxOnly Version --> FmtCheck
Sources: .github/workflows/ci.yml(L5 - L31)
Multi-Target Build Support
The crate supports multiple target architectures to accommodate different embedded and kernel environments.
Supported Target Platforms
Target | Purpose | Environment |
---|---|---|
x86_64-unknown-linux-gnu | Development and testing | Standard Linux userspace |
x86_64-unknown-none | Bare metal x86_64 | Kernel/bootloader environments |
riscv64gc-unknown-none-elf | RISC-V bare metal | RISC-V embedded systems |
aarch64-unknown-none-softfloat | ARM64 bare metal | ARM embedded systems |
Build Matrix Execution
flowchart TD subgraph subGraph2["Target-Specific Logic"] LinuxTest["Unit tests: Linux only"] BareMetalBuild["Bare metal: Build only"] end subgraph subGraph1["Per-Target Operations"] ClippyTarget["cargo clippy --target TARGET"] BuildTarget["cargo build --target TARGET"] TestTarget["cargo test --target TARGET"] end subgraph subGraph0["Matrix Strategy"] Toolchain["nightly toolchain"] Targets["4 target platforms"] end BuildTarget --> TestTarget ClippyTarget --> BuildTarget Targets --> ClippyTarget TestTarget --> BareMetalBuild TestTarget --> LinuxTest Toolchain --> ClippyTarget
Sources: .github/workflows/ci.yml(L8 - L30)
Code Quality Assurance
The CI pipeline enforces code quality through multiple automated checks.
Quality Check Commands
Check | Command | Purpose |
---|---|---|
Formatting | cargo fmt --all -- --check | Enforce consistent code style |
Linting | cargo clippy --target TARGET --all-features | Static analysis and best practices |
Build Verification | cargo build --target TARGET --all-features | Compilation validation |
Testing | cargo test --target TARGET -- --nocapture | Functional correctness |
Clippy Configuration
The CI pipeline includes specific clippy configuration to suppress certain warnings:
- Suppressed:
clippy::new_without_default
- Allowsnew()
methods withoutDefault
trait - Features:
--all-features
- Enables all crate features during analysis
Sources: .github/workflows/ci.yml(L22 - L30)
Documentation System
The crate maintains automatically generated and deployed documentation.
Documentation Pipeline
flowchart TD subgraph Configuration["Configuration"] RustDocFlags["RUSTDOCFLAGS environment"] BrokenLinks["-D rustdoc::broken_intra_doc_links"] MissingDocs["-D missing-docs"] end subgraph subGraph1["Deployment Logic"] BranchCheck["Check if default branch"] Deploy["JamesIves/github-pages-deploy-action@v4"] PagesUpdate["Update gh-pages branch"] end subgraph subGraph0["Documentation Generation"] DocBuild["cargo doc --no-deps"] IndexGen["Generate index.html redirect"] TreeParse["cargo tree | head -1"] end BranchCheck --> Deploy BrokenLinks --> DocBuild Deploy --> PagesUpdate DocBuild --> IndexGen IndexGen --> BranchCheck MissingDocs --> DocBuild RustDocFlags --> BrokenLinks RustDocFlags --> MissingDocs TreeParse --> IndexGen
Documentation Configuration
Setting | Value | Purpose |
---|---|---|
RUSTDOCFLAGS | -D rustdoc::broken_intra_doc_links -D missing-docs | Enforce complete documentation |
Deployment Branch | gh-pages | GitHub Pages hosting |
Build Options | --no-deps --all-features | Generate only crate docs with all features |
Deployment Trigger | Default branch pushes only | Automatic documentation updates |
Sources: .github/workflows/ci.yml(L32 - L56)
Development Environment Requirements
Required Rust Components
Component | Purpose |
---|---|
nightly toolchain | Required for no_std development |
rust-src | Source code for cross-compilation |
clippy | Linting and static analysis |
rustfmt | Code formatting |
Target Installation
To set up a complete development environment:
# Install nightly toolchain with required components
rustup toolchain install nightly --component rust-src clippy rustfmt
# Add target platforms
rustup target add x86_64-unknown-none
rustup target add riscv64gc-unknown-none-elf
rustup target add aarch64-unknown-none-softfloat
Local Development Commands
Operation | Command |
---|---|
Format code | cargo fmt |
Check formatting | cargo fmt --check |
Run clippy | cargo clippy --all-features |
Build for target | cargo build --target |
Run tests | cargo test -- --nocapture |
Generate docs | cargo doc --no-deps --all-features |
Sources: .github/workflows/ci.yml(L15 - L19)