This document covers OpenDAL's continuous integration and continuous deployment (CI/CD) pipeline, including automated testing, quality checks, build processes, and release automation. The CI/CD system ensures code quality across the core Rust library, language bindings, and associated tools.
For information about the build and testing processes from a developer perspective, see Building and Testing. For details about the release process and artifact publishing, see Release Process.
OpenDAL's CI/CD pipeline is built on GitHub Actions and provides comprehensive automation for testing, quality assurance, and deployment across multiple languages and platforms.
Sources: .github/actions/setup/action.yaml1-137 .github/workflows/test_edge.yml1-141
The central setup
action provides a standardized environment for all CI jobs:
Sources: .github/actions/setup/action.yaml20-34 .github/actions/setup/action.yaml38-52
The setup action configures the Rust build environment with optimized settings for CI:
Variable | Value | Purpose |
---|---|---|
RUSTFLAGS | -C force-frame-pointers=yes -C debuginfo=1 | Enable frame pointers and minimal debug info |
RUST_BACKTRACE | 1 | Enable error backtraces |
RUST_LOG | opendal=trace | Enable detailed logging for OpenDAL |
CARGO_REGISTRIES_CRATES_IO_PROTOCOL | sparse | Use sparse registry protocol |
Sources: .github/actions/setup/action.yaml44-50
The pipeline installs required system libraries on Linux:
Sources: .github/actions/setup/action.yaml58
Tool | Version | Purpose |
---|---|---|
protoc | 23.4 | Protocol Buffer compiler |
cargo-nextest | 0.9.72 | Advanced test runner |
cargo-deny | 0.14.22 | Dependency security and license checking |
Sources: .github/actions/setup/action.yaml64 .github/actions/setup/action.yaml71 .github/actions/setup/action.yaml77
OpenDAL employs a multi-layered testing approach covering different scenarios and environments.
The edge testing workflow validates OpenDAL behavior in challenging scenarios:
Sources: .github/workflows/test_edge.yml36-61 .github/workflows/test_edge.yml62-108 .github/workflows/test_edge.yml109-141
Tests file operations when storage is exhausted:
Sources: .github/workflows/test_edge.yml44-60
Validates S3 operations in browser environments:
Sources: .github/workflows/test_edge.yml73-83 .github/workflows/test_edge.yml90-107
The pipeline includes specialized setup for RocksDB testing:
Sources: .github/actions/setup/action.yaml86-111 .github/services/rocksdb/rocksdb/action.yml27-32
Similar caching and setup process for FoundationDB:
Component | Configuration |
---|---|
Cache Key | r0-foundationdb-7.1.17 |
Client Package | foundationdb-clients_7.1.17-1_amd64.deb |
Server Package | foundationdb-server_7.1.17-1_amd64.deb |
Install Path | /etc/foundationdb |
Sources: .github/actions/setup/action.yaml113-136
Each language binding has its own CI/CD workflow with language-specific tooling and testing.
Sources: Based on CI/CD architecture patterns from setup action
The cargo-deny
tool provides comprehensive dependency validation:
Sources: .github/actions/setup/action.yaml73-77
The CI pipeline includes optimizations for build performance:
Optimization | Implementation | Purpose |
---|---|---|
Debug Info | debuginfo=1 | Minimal debug symbols for backtraces |
Frame Pointers | force-frame-pointers=yes | Better profiling and debugging |
Sparse Index | CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse | Faster dependency resolution |
Parallel Builds | make -j$(nproc) | Use all available CPU cores |
Dependency Caching | actions/cache@v4 | Reuse built dependencies |
Sources: .github/actions/setup/action.yaml44 .github/actions/setup/action.yaml50 .github/actions/setup/action.yaml107
Refresh this wiki
Last indexed: 5 June 2025 (37efe2)
This wiki was recently refreshed. Please wait 2 days to refresh again.