Menu

Release Process

Relevant source files

This document describes the comprehensive release process for OpenDAL, covering version management, automated workflows, and distribution of artifacts across multiple programming language bindings. The process encompasses the core Rust library and all language bindings including Java, Node.js, Python, C, and others.

For information about building and testing during development, see Building and Testing. For details about the CI/CD pipeline infrastructure, see CI/CD Pipeline.

Overview

OpenDAL follows a coordinated release strategy where the core Rust library drives version numbers, and language bindings may have independent release cadences based on their specific needs. The release process is heavily automated through GitHub Actions and involves multiple artifact types and distribution channels.

Release Components Architecture

Sources: CHANGELOG.md1-379 bindings/java/pom.xml35 bindings/nodejs/package.json4

Version Management Strategy

OpenDAL uses semantic versioning with coordinated releases across components. The version progression follows a predictable pattern with major, minor, and patch releases.

Version Synchronization

Sources: CHANGELOG.md10-379 bindings/java/pom.xml35 bindings/nodejs/package.json4 core/src/docs/upgrade.md1-761

Java Release Workflow

The Java binding release process is the most complex, involving cross-platform compilation and Apache Nexus staging for release candidates.

Java Build Matrix and Artifacts

Sources: .github/workflows/release_java.yml38-188 bindings/java/tools/build.py26-104 bindings/java/pom.xml249-273

Java Release Trigger Conditions

The Java release workflow is triggered by specific conditions:

Trigger TypeConditionPurpose
Tag Pushv[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+Release candidate staging
Pull RequestChanges to workflow or build filesTesting
Manualworkflow_dispatchAd-hoc releases

Sources: .github/workflows/release_java.yml20-32

Node.js Release Architecture

The Node.js binding uses a different approach with platform-specific npm packages and N-API for native integration.

Node.js Package Structure

Sources: bindings/nodejs/package.json11-25 bindings/nodejs/npm/darwin-x64/package.json1-20 bindings/nodejs/npm/linux-x64-gnu/package.json1-23 bindings/nodejs/npm/win32-x64-msvc/package.json1-19

Cross-Platform Build Orchestration

The release process coordinates builds across multiple platforms and architectures, ensuring consistent artifacts for all supported targets.

Platform Target Mapping

Sources: bindings/java/tools/build.py26-47

Release Artifact Distribution

Different language bindings use different distribution mechanisms optimized for their respective ecosystems.

Distribution Channels by Language

LanguageRegistryPackage FormatAuthentication
Rustcrates.io.crateAPI token
JavaMaven Central.jar, .pomGPG signing
Node.jsnpm registry.tgznpm token
PythonPyPI.whl, .tar.gzPyPI token
CGitHub ReleasesSource + headersGitHub token

Java Maven Deployment Process

The Java binding uses a sophisticated staging process through Apache Nexus:

  1. Local Staging: Each platform builds and stages artifacts locally
  2. Artifact Merging: Python script combines platform-specific staging directories
  3. Remote Deployment: Staged artifacts are deployed to Apache Nexus
  4. GPG Signing: All artifacts are signed with project GPG key
  5. Repository Closure: Staging repository is closed for release

Sources: .github/workflows/release_java.yml165-187

Environment Detection and Native Library Loading

Language bindings implement sophisticated environment detection to load the correct native libraries at runtime.

Java Environment Detection

Sources: bindings/java/src/main/java/org/apache/opendal/Environment.java47-63 bindings/java/src/main/java/org/apache/opendal/NativeObject.java55-76

Release Quality Assurance

The release process includes multiple quality gates to ensure artifact integrity and compatibility.

Testing Integration

Sources: .github/workflows/test_fuzz.yml38-67 .github/actions/fuzz_test/action.yaml31-49

This comprehensive release process ensures that OpenDAL maintains high quality across all supported platforms and language bindings while providing a smooth upgrade experience for users.