Menu

CI/CD Pipeline

Relevant source files

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.

Pipeline Architecture

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.

Overall CI/CD Flow

Sources: .github/actions/setup/action.yaml1-137 .github/workflows/test_edge.yml1-141

Environment Setup Action

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

Build Environment Configuration

The setup action configures the Rust build environment with optimized settings for CI:

Rust Environment Variables

VariableValuePurpose
RUSTFLAGS-C force-frame-pointers=yes -C debuginfo=1Enable frame pointers and minimal debug info
RUST_BACKTRACE1Enable error backtraces
RUST_LOGopendal=traceEnable detailed logging for OpenDAL
CARGO_REGISTRIES_CRATES_IO_PROTOCOLsparseUse sparse registry protocol

Sources: .github/actions/setup/action.yaml44-50

System Dependencies

The pipeline installs required system libraries on Linux:

Sources: .github/actions/setup/action.yaml58

Development Tools

ToolVersionPurpose
protoc23.4Protocol Buffer compiler
cargo-nextest0.9.72Advanced test runner
cargo-deny0.14.22Dependency security and license checking

Sources: .github/actions/setup/action.yaml64 .github/actions/setup/action.yaml71 .github/actions/setup/action.yaml77

Testing Strategy

OpenDAL employs a multi-layered testing approach covering different scenarios and environments.

Edge Testing

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

Full Disk Testing

Tests file operations when storage is exhausted:

Sources: .github/workflows/test_edge.yml44-60

WebAssembly Testing

Validates S3 operations in browser environments:

Sources: .github/workflows/test_edge.yml73-83 .github/workflows/test_edge.yml90-107

Database and Service Testing

RocksDB Integration

The pipeline includes specialized setup for RocksDB testing:

Sources: .github/actions/setup/action.yaml86-111 .github/services/rocksdb/rocksdb/action.yml27-32

FoundationDB Integration

Similar caching and setup process for FoundationDB:

ComponentConfiguration
Cache Keyr0-foundationdb-7.1.17
Client Packagefoundationdb-clients_7.1.17-1_amd64.deb
Server Packagefoundationdb-server_7.1.17-1_amd64.deb
Install Path/etc/foundationdb

Sources: .github/actions/setup/action.yaml113-136

Language Binding CI/CD

Each language binding has its own CI/CD workflow with language-specific tooling and testing.

Binding Pipeline Structure

Sources: Based on CI/CD architecture patterns from setup action

Quality Assurance

Security and License Checking

The cargo-deny tool provides comprehensive dependency validation:

Sources: .github/actions/setup/action.yaml73-77

Performance and Resource Management

The CI pipeline includes optimizations for build performance:

OptimizationImplementationPurpose
Debug Infodebuginfo=1Minimal debug symbols for backtraces
Frame Pointersforce-frame-pointers=yesBetter profiling and debugging
Sparse IndexCARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparseFaster dependency resolution
Parallel Buildsmake -j$(nproc)Use all available CPU cores
Dependency Cachingactions/cache@v4Reuse built dependencies

Sources: .github/actions/setup/action.yaml44 .github/actions/setup/action.yaml50 .github/actions/setup/action.yaml107