This guide covers the development workflow, build processes, testing, documentation system, and release procedures for OpenDAL contributors. It provides essential information for setting up a development environment and understanding the project's infrastructure.
For information about using OpenDAL as a library, see Getting Started. For architecture details, see Core Architecture. For specific language binding development, see Language Bindings.
OpenDAL requires a Rust development environment with additional tools for multi-language bindings and documentation generation. The project uses GitHub Actions for automated setup through reusable actions.
The primary development setup is defined in the .github/actions/setup/action.yaml
which configures:
Environment Configuration:
RUSTFLAGS="-C force-frame-pointers=yes -C debuginfo=1"
for optimized CI buildsRUST_BACKTRACE=1
and RUST_LOG=opendal=trace
for debuggingCARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
for faster dependency resolutionSources: .github/actions/setup/action.yaml38-52
OpenDAL uses a sophisticated documentation system that generates API documentation for multiple languages and maintains a central website built with Docusaurus.
The documentation build process is orchestrated by the docs.yml
workflow which:
Key Documentation Tools:
cargo doc
with nightly toolchain for advanced featurespnpm run docs
Sources: .github/workflows/docs.yml47-516 website/docusaurus.config.js88-116
The Docusaurus website supports multiple deployment modes through environment variables:
Variable | Purpose |
---|---|
OPENDAL_WEBSITE_BASE_URL | Base URL for deployment |
OPENDAL_WEBSITE_NOT_LATEST | Shows banner for historical releases |
OPENDAL_WEBSITE_STAGING | Enables staging mode for RC releases |
The website includes custom plugins for enhanced functionality:
Sources: website/docusaurus.config.js30-38 website/plugins/image-ssr-plugin.js27-233
OpenDAL's continuous integration system uses GitHub Actions with a comprehensive workflow structure for building, testing, and deploying the project.
Deployment Logic:
site/*-staging
branchesThe pipeline uses artifact uploading/downloading to pass documentation between jobs, with each language binding and integration building independently for optimal parallelization.
Sources: .github/workflows/docs.yml499-719
The website uses modern JavaScript tooling:
Development Commands:
pnpm start
: Local development serverpnpm build
: Production buildpnpm serve
: Serve built site locallySources: website/package.json5-14 website/README.md6-34
Each language binding has specific build requirements managed through the CI setup:
Language | Build Tool | Requirements |
---|---|---|
Rust | cargo | Nightly toolchain for docs |
Java | Maven | Java 17, Javadoc plugin |
NodeJS | pnpm | Node.js 18, TypeDoc |
Python | uv | Python 3.11, MkDocs |
Ruby | bundler | Ruby with yard |
C/C++ | cmake/make | Doxygen, ninja |
Haskell | cabal | GHC 9.2.8, Haddock |
OCaml | dune | OCaml with odoc |
Sources: .github/workflows/docs.yml64-354
OpenDAL is an Apache Software Foundation project with specific configuration requirements defined in .asf.yaml
:
Repository Configuration:
commits@opendal.apache.org
and dev@opendal.apache.org
site/*
branchesLabels and Metadata:
Sources: .asf.yaml20-61
Local website development:
Build language-specific docs:
cargo doc --all-features
Test documentation build:
npx license-checker
for website dependency trackingSources: website/README.md32-34