Build System and CI
Relevant source files
This document covers the build system configuration and continuous integration pipeline for the axio crate. It explains how the project is structured for compilation across multiple target platforms, the automated testing strategy, and the documentation deployment process. For information about the crate's feature configuration and dependencies, see Crate Configuration and Features.
Build Configuration
The axio crate uses a minimal build configuration designed for no_std compatibility across diverse target platforms. The build system is defined primarily through Cargo.toml and supports conditional compilation based on feature flags.
Package Metadata and Dependencies
The crate is configured as a library package with specific metadata targeting the embedded and OS kernel development ecosystem:
| Configuration | Value |
|---|---|
| Package Name | axio |
| Version | 0.1.1 |
| Edition | 2021 |
| License | Dual/Triple licensed (GPL-3.0-or-later OR Apache-2.0 OR MulanPSL-2.0) |
The dependency structure is intentionally minimal, with only one required dependency:
axerrno = "0.1"- Provides error handling types compatible withno_stdenvironments
Feature Gate Configuration
The build system supports feature-based conditional compilation through two defined features:
flowchart TD
subgraph subGraph2["Available APIs"]
CORE_API["Core I/O Traitsread(), write(), seek()"]
ALLOC_API["Dynamic Memory APIsread_to_end(), read_to_string()"]
end
subgraph subGraph1["Compilation Modes"]
MINIMAL["Minimal Buildno_std only"]
ENHANCED["Enhanced Buildno_std + alloc"]
end
subgraph subGraph0["Feature Configuration"]
DEFAULT["default = []"]
ALLOC["alloc = []"]
end
ALLOC --> ENHANCED
DEFAULT --> MINIMAL
ENHANCED --> ALLOC_API
ENHANCED --> CORE_API
MINIMAL --> CORE_API
Sources: Cargo.toml(L14 - L16)
CI Pipeline Architecture
The continuous integration system uses GitHub Actions to validate code quality, build compatibility, and documentation generation across multiple target platforms. The pipeline is defined in a single workflow file that orchestrates multiple jobs.
Workflow Trigger Configuration
The CI pipeline activates on two primary events:
- Push events to any branch
- Pull request events
Multi-Target Build Matrix
The CI system employs a matrix strategy to test compilation across diverse target platforms:
flowchart TD
subgraph subGraph2["CI Steps"]
CHECKOUT["actions/checkout@v4"]
TOOLCHAIN_SETUP["dtolnay/rust-toolchain@nightly"]
FORMAT_CHECK["cargo fmt --check"]
CLIPPY_CHECK["cargo clippy"]
BUILD_STEP["cargo build"]
TEST_STEP["cargo test"]
end
subgraph subGraph1["Build Matrix"]
TOOLCHAIN["nightly toolchain"]
TARGET1["x86_64-unknown-linux-gnu"]
TARGET2["x86_64-unknown-none"]
TARGET3["riscv64gc-unknown-none-elf"]
TARGET4["aarch64-unknown-none-softfloat"]
end
subgraph subGraph0["CI Workflow"]
TRIGGER["push/pull_request events"]
CI_JOB["ci job"]
DOC_JOB["doc job"]
end
BUILD_STEP --> TEST_STEP
CHECKOUT --> TOOLCHAIN_SETUP
CI_JOB --> CHECKOUT
CI_JOB --> TOOLCHAIN
CLIPPY_CHECK --> BUILD_STEP
FORMAT_CHECK --> CLIPPY_CHECK
TOOLCHAIN --> TARGET1
TOOLCHAIN --> TARGET2
TOOLCHAIN --> TARGET3
TOOLCHAIN --> TARGET4
TOOLCHAIN_SETUP --> FORMAT_CHECK
TRIGGER --> CI_JOB
TRIGGER --> DOC_JOB
Sources: .github/workflows/ci.yml(L1 - L31)
Target Platform Categories
The build matrix validates compatibility across three categories of target platforms:
| Target | Architecture | Environment | Purpose |
|---|---|---|---|
| x86_64-unknown-linux-gnu | x86_64 | Linux with std | Testing and validation |
| x86_64-unknown-none | x86_64 | Bare metal | OS kernel development |
| riscv64gc-unknown-none-elf | RISC-V | Bare metal | Embedded systems |
| aarch64-unknown-none-softfloat | ARM64 | Bare metal | ARM-based embedded |
Sources: .github/workflows/ci.yml(L12)
Quality Assurance Pipeline
The CI system implements a comprehensive quality assurance strategy that validates code formatting, linting, compilation, and functional correctness.
Code Quality Checks
The quality assurance pipeline executes the following checks in sequence:
flowchart TD START["CI Job Start"] VERSION_CHECK["rustc --version --verbose"] FORMAT["cargo fmt --all -- --check"] CLIPPY["cargo clippy --target TARGET --all-features"] BUILD["cargo build --target TARGET --all-features"] TEST_CONDITION["target == x86_64-unknown-linux-gnu?"] UNIT_TEST["cargo test --target TARGET -- --nocapture"] END["Job Complete"] CLIPPY_CONFIG["clippy config:-A clippy::new_without_default"] BUILD --> TEST_CONDITION CLIPPY --> BUILD CLIPPY --> CLIPPY_CONFIG FORMAT --> CLIPPY START --> VERSION_CHECK TEST_CONDITION --> END TEST_CONDITION --> UNIT_TEST UNIT_TEST --> END VERSION_CHECK --> FORMAT
Sources: .github/workflows/ci.yml(L20 - L30)
Testing Strategy
Unit tests are executed only on the x86_64-unknown-linux-gnu target, which provides a standard library environment suitable for test execution. The testing configuration includes:
- Test Command:
cargo test --target x86_64-unknown-linux-gnu -- --nocapture - Output Mode: No capture mode for detailed test output
- Conditional Execution: Only runs on Linux GNU target to avoid
no_stdtest environment complications
Sources: .github/workflows/ci.yml(L28 - L30)
Documentation Generation and Deployment
The CI pipeline includes a separate job dedicated to documentation generation and automated deployment to GitHub Pages.
Documentation Build Process
flowchart TD
subgraph subGraph2["Deploy Configuration"]
BRANCH["gh-pages branch"]
FOLDER["target/doc"]
COMMIT_MODE["single-commit: true"]
end
subgraph subGraph1["Build Configuration"]
RUSTDOCFLAGS["-D rustdoc::broken_intra_doc_links-D missing-docs"]
PERMISSIONS["contents: write"]
end
subgraph subGraph0["Documentation Job"]
DOC_TRIGGER["push/PR events"]
DOC_CHECKOUT["actions/checkout@v4"]
DOC_TOOLCHAIN["dtolnay/rust-toolchain@nightly"]
DOC_BUILD["cargo doc --no-deps --all-features"]
INDEX_GEN["Generate index.html redirect"]
DEPLOY_CHECK["ref == default-branch?"]
DEPLOY["JamesIves/github-pages-deploy-action@v4"]
end
DEPLOY --> BRANCH
DEPLOY --> COMMIT_MODE
DEPLOY --> FOLDER
DEPLOY_CHECK --> DEPLOY
DOC_BUILD --> INDEX_GEN
DOC_CHECKOUT --> DOC_TOOLCHAIN
DOC_TOOLCHAIN --> DOC_BUILD
DOC_TRIGGER --> DOC_CHECKOUT
INDEX_GEN --> DEPLOY_CHECK
PERMISSIONS --> DEPLOY
RUSTDOCFLAGS --> DOC_BUILD
Documentation Quality Enforcement
The documentation build process enforces strict quality standards through RUSTDOCFLAGS:
- Broken Link Detection:
-D rustdoc::broken_intra_doc_linkstreats broken documentation links as errors - Missing Documentation:
-D missing-docsrequires documentation for all public APIs
The index generation creates a redirect page using the crate name extracted from cargo tree output, providing seamless navigation to the main documentation.
Sources: .github/workflows/ci.yml(L32 - L55)
Deployment Strategy
Documentation deployment follows a conditional strategy:
- Automatic Deployment: Occurs only on pushes to the default branch
- Target Branch:
gh-pagesbranch for GitHub Pages hosting - Deployment Mode: Single commit to maintain clean history
- Content Source:
target/docdirectory containing generated documentation
Sources: .github/workflows/ci.yml(L49 - L55)