You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2026/05/25 16:21:21 UTC

(opendal) 01/01: fix(ci): address release gate failures

This is an automated email from the ASF dual-hosted git repository.

Xuanwo pushed a commit to branch xuanwo/fix-release-rc2-gates
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit f606c3286aa28b829216c6e5e02cfeb707791cb0
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Tue May 26 00:20:39 2026 +0800

    fix(ci): address release gate failures
---
 .agents/skills/opendal-release/SKILL.md | 45 +++++++++++++++++++++++++++++++++
 .github/workflows/release_dart.yml      | 12 +++++++--
 core/services/tos/src/backend.rs        |  6 ++++-
 3 files changed, 60 insertions(+), 3 deletions(-)

diff --git a/.agents/skills/opendal-release/SKILL.md b/.agents/skills/opendal-release/SKILL.md
index 49e172bf6..5204d2b7a 100644
--- a/.agents/skills/opendal-release/SKILL.md
+++ b/.agents/skills/opendal-release/SKILL.md
@@ -130,6 +130,7 @@ Default required gate:
 - `Release Java Binding`
 - `Bindings Java CI`
 - `Release Python Binding`
+- `Bindings Go CI`
 - `Release NodeJS Binding`
 - `Bindings NodeJS CI`
 - `Docs`
@@ -152,8 +153,52 @@ Rules:
 - Rerun transient workflow failures when logs indicate network, GitHub, package registry, or runner flakiness.
 - If code or workflow changes are needed, land a PR on `main`, then create the next RC.
 - Python wheel matrix can be slow. Poll job status before treating long runtime as a real failure.
+- The Go binding has no `release_go.yml` in this repository. Its RC gate in `apache/opendal` is `Bindings Go CI`; publishing is tag-driven and handled separately.
 - Dotnet/NuGet RC publish failures are nonblocking only if Dotnet is outside the agreed gate. RC tags must not publish prerelease packages to NuGet.
 
+## Go Binding Release Readiness
+
+The Go binding is a subdirectory Go module at `bindings/go` with module path
+`github.com/apache/opendal/bindings/go`. Go's module proxy discovers versions
+from tags prefixed by the module directory, for example
+`bindings/go/v0.1.16-rc.1` and `bindings/go/v0.1.16`; the top-level OpenDAL tag
+`v${release_version}` is not a Go binding module version.
+
+As of the current release flow, `bindings/go` is not listed in
+`dev/src/release/package.rs` and there is no Go source archive generated by
+`just release`. Treat it as a separate Go module release path unless the project
+explicitly decides to add a Go source package to the ASF artifact list.
+
+Release manager checks:
+
+```bash
+git tag --list 'bindings/go/v*' --sort=version:refname | tail
+go list -m -versions github.com/apache/opendal/bindings/go
+git log --oneline "$(git tag --list 'bindings/go/v*' --sort=version:refname | tail -n1)"..origin/main -- bindings/go bindings/c .github/workflows/ci_bindings_go.yml
+```
+
+If `bindings/go`, `bindings/c`, or C ABI changes should be exposed to Go users,
+choose the next Go binding version independently from `opendal_version`, push a
+signed RC tag such as `bindings/go/v${go_version}-rc.1` at the same commit as the
+OpenDAL RC, and include `Bindings Go CI` in the required gate.
+
+Go service packages are built in the separate `apache/opendal-go-services`
+repository. That repo polls for a newer `bindings/go/v*` tag in `apache/opendal`
+and then builds precompressed `libopendal_c` artifacts from the latest top-level
+OpenDAL tag. Verify it after pushing a Go binding RC tag:
+
+```bash
+gh run list --repo apache/opendal-go-services --limit 20 \
+  --json name,event,headBranch,status,conclusion,url
+
+go list -m -versions github.com/apache/opendal-go-services/fs
+```
+
+The service repo tags its own root version (`v${go_version}`) and service module
+versions such as `fs/v${go_version}`. Do not treat a green `Bindings Go CI` run
+as proof that the service artifacts were generated; check the separate
+`opendal-go-services` workflow and module versions when Go is in scope.
+
 ## Rust Release Readiness
 
 Before official release, and preferably before vote, inspect the Rust publish plan:
diff --git a/.github/workflows/release_dart.yml b/.github/workflows/release_dart.yml
index afac52c29..ad253944a 100644
--- a/.github/workflows/release_dart.yml
+++ b/.github/workflows/release_dart.yml
@@ -73,8 +73,16 @@ jobs:
       - name: Install cross
         run: cargo install cross --git https://github.com/cross-rs/cross --force
 
-      - name: Build on linux
-        if: runner.os == 'Linux'
+      - name: Build on native linux
+        if: runner.os == 'Linux' && matrix.target == 'x86_64-unknown-linux-gnu'
+        env:
+          CC_x86_64_unknown_linux_gnu: gcc
+        run: |
+          cd bindings/dart/rust
+          cargo build --release --target ${{ matrix.target }}
+
+      - name: Build on cross linux
+        if: runner.os == 'Linux' && matrix.target != 'x86_64-unknown-linux-gnu'
         run: |
           cd bindings/dart/rust
           cross build --release --target ${{ matrix.target }}
diff --git a/core/services/tos/src/backend.rs b/core/services/tos/src/backend.rs
index 3f7d3d4e1..872482af5 100644
--- a/core/services/tos/src/backend.rs
+++ b/core/services/tos/src/backend.rs
@@ -194,7 +194,11 @@ impl Builder for TosBuilder {
                     write_with_if_not_exists: true,
                     write_with_user_metadata: true,
                     write_multi_min_size: Some(5 * 1024 * 1024),
-                    write_multi_max_size: Some(5 * 1024 * 1024 * 1024),
+                    write_multi_max_size: if cfg!(target_pointer_width = "64") {
+                        Some(5 * 1024 * 1024 * 1024)
+                    } else {
+                        Some(usize::MAX)
+                    },
 
                     delete: true,
                     delete_max_size: Some(1000),