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

hanahmily pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git


The following commit(s) were added to refs/heads/main by this push:
     new 32055eb1a chore(security): bump Go toolchain to 1.25.12 and add 
govulncheck CI job (#1219)
32055eb1a is described below

commit 32055eb1a069a8c6ab93b5e7de5bb72e7bf7dec0
Author: Gao Hongtao <[email protected]>
AuthorDate: Thu Jul 16 13:54:06 2026 +0800

    chore(security): bump Go toolchain to 1.25.12 and add govulncheck CI job 
(#1219)
    
    * chore(security): bump Go toolchain to 1.25.12 and wire govulncheck into CI
    
    Bump the go.mod go directive from 1.25.8 to 1.25.12 to pick up the fixed
    stdlib toolchain and close all outstanding stdlib CVEs (fix floors up to
    1.25.12). x/net (v0.56.0) and x/crypto (v0.53.0) were already patched.
    
    Wire the existing `make vuln-check` (govulncheck) target into the CI
    pipeline as a dedicated parallel job so stdlib/toolchain and dependency
    CVE regressions are caught going forward. Dependabot does not track the
    Go stdlib/toolchain, so govulncheck fills that gap with reachability
    analysis.
    
    * test(schema): de-flake clamp multi-group query on group2 topology race
    
    The "clips TimeRange.Begin to max(CreatedAt)" spec created group2 and only
    waited via AwaitRevision, which confirms the schema cache but not that
    group2's topology has propagated to the distributed query coordinator. The
    final multi-group query could then fire before group2 resolved and fail
    with "group not found" (STATUS_INTERNAL_ERROR).
    
    Wrap the query in gm.Eventually, retrying only on error — matching the
    single-group baseline retry already in this spec. Retrying on error (not on
    emptiness) keeps the clamp assertion falsifiable: a genuine regression still
    surfaces as a non-empty successful response.
---
 .github/workflows/ci.yml   | 21 ++++++++++++++++++++-
 go.mod                     |  2 +-
 plugins/README.md          |  2 +-
 test/cases/schema/clamp.go | 46 ++++++++++++++++++++++++++++------------------
 4 files changed, 50 insertions(+), 21 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6c9c14598..991f35718 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -89,6 +89,25 @@ jobs:
         run: make license-dep
       - name: Check
         run: make check
+  vuln-check:
+    name: Vulnerability Scan
+    runs-on: ubuntu-latest
+    needs: [prepare]
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+      - name: Setup build environment
+        uses: ./.github/actions/setup-build-env
+        with:
+          download-artifacts: 'true'
+          setup-docker: 'false'
+      - name: Cache Tools
+        uses: actions/cache@v4
+        with:
+          path: bin
+          key: ${{ runner.os }}-generate-tool-${{ hashFiles('**/version.mk') }}
+      - name: Run govulncheck (stdlib + dependency CVEs)
+        run: make vuln-check
   detect_fodc_e2e_changes:
     name: Detect FODC E2E Changes
     runs-on: ubuntu-latest
@@ -165,6 +184,6 @@ jobs:
     name: Continuous Integration
     runs-on: ubuntu-24.04
     needs:
-      [detect_fodc_e2e_changes, test-banyand, test-bydbctl, test-fodc, 
test-fodc-e2e, test-pkg, test-integration-standalone, 
test-integration-distributed, e2e]
+      [vuln-check, detect_fodc_e2e_changes, test-banyand, test-bydbctl, 
test-fodc, test-fodc-e2e, test-pkg, test-integration-standalone, 
test-integration-distributed, e2e]
     steps:
       - run: echo 'success'
diff --git a/go.mod b/go.mod
index 50b8fed1e..717e60ab1 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/apache/skywalking-banyandb
 
-go 1.25.8
+go 1.25.12
 
 require (
        cloud.google.com/go/storage v1.63.0
diff --git a/plugins/README.md b/plugins/README.md
index 609d2c384..8ba0483a2 100644
--- a/plugins/README.md
+++ b/plugins/README.md
@@ -55,7 +55,7 @@ func main() {}                               // required by 
-buildmode=plugin
 A Go plugin is loaded via `plugin.Open`, which requires the `.so` and the
 host process to share the **exact same**:
 
-- Go toolchain version (this repo pins `go 1.25.8` via `go.mod`; 
`GOTOOLCHAIN=auto`
+- Go toolchain version (this repo pins `go 1.25.12` via `go.mod`; 
`GOTOOLCHAIN=auto`
   resolves it identically in CI, in the `-plugins` Docker builder stage, and
   in a local `make build-plugins`),
 - `pkg/pipeline/sdk` package build (and its full transitive module graph),
diff --git a/test/cases/schema/clamp.go b/test/cases/schema/clamp.go
index 2e113bdd7..bdfa2e00b 100644
--- a/test/cases/schema/clamp.go
+++ b/test/cases/schema/clamp.go
@@ -283,25 +283,35 @@ var _ = g.Describe("Schema time-range clamp", func() {
                        "CreatedAt2 must be strictly after T_data1 for the 
falsification to be meaningful")
 
                g.By("Querying group1+group2 with Begin far before T_data1 — 
clamp forwards Begin to CreatedAt2 > T_data1, excluding the datum")
-               queryResp, queryErr := clients.MeasureWriteClient.Query(ctx, 
&measurev1.QueryRequest{
-                       Groups: []string{group1, group2},
-                       Name:   measureName,
-                       TimeRange: &modelv1.TimeRange{
-                               Begin: 
timestamppb.New(tData1.Add(-time.Hour).Truncate(time.Millisecond)),
-                               End:   
timestamppb.New(time.Now().Add(time.Hour).Truncate(time.Millisecond)),
-                       },
-                       GroupModRevisions: map[string]int64{group1: r1, group2: 
r2},
-                       TagProjection: &modelv1.TagProjection{
-                               TagFamilies: []*modelv1.TagProjection_TagFamily{
-                                       {Name: "default", Tags: 
[]string{"host"}},
+               // In distributed mode the newly created group2 topology can 
still race the
+               // query fan-out even after AwaitRevision confirms the schema 
cache — the
+               // coordinator transiently reports "group not found". Retry 
until the query
+               // resolves, then assert the clamp excludes the pre-creation 
datum. Mirrors
+               // the single-group baseline retry above. Retrying only on 
error is safe: a
+               // genuine clamp regression surfaces as a non-empty successful 
response.
+               var queryResp *measurev1.QueryResponse
+               gm.Eventually(func() error {
+                       var queryErr error
+                       queryResp, queryErr = 
clients.MeasureWriteClient.Query(ctx, &measurev1.QueryRequest{
+                               Groups: []string{group1, group2},
+                               Name:   measureName,
+                               TimeRange: &modelv1.TimeRange{
+                                       Begin: 
timestamppb.New(tData1.Add(-time.Hour).Truncate(time.Millisecond)),
+                                       End:   
timestamppb.New(time.Now().Add(time.Hour).Truncate(time.Millisecond)),
                                },
-                       },
-                       FieldProjection: 
&measurev1.QueryRequest_FieldProjection{
-                               Names: []string{"value"},
-                       },
-                       Limit: 100,
-               })
-               gm.Expect(queryErr).ShouldNot(gm.HaveOccurred())
+                               GroupModRevisions: map[string]int64{group1: r1, 
group2: r2},
+                               TagProjection: &modelv1.TagProjection{
+                                       TagFamilies: 
[]*modelv1.TagProjection_TagFamily{
+                                               {Name: "default", Tags: 
[]string{"host"}},
+                                       },
+                               },
+                               FieldProjection: 
&measurev1.QueryRequest_FieldProjection{
+                                       Names: []string{"value"},
+                               },
+                               Limit: 100,
+                       })
+                       return queryErr
+               }, 10*time.Second, 
200*time.Millisecond).ShouldNot(gm.HaveOccurred())
                gm.Expect(queryResp.GetDataPoints()).Should(gm.BeEmpty(),
                        "Rule 7 clamp invariant: T_data1 < CreatedAt2 must be 
excluded by the clamp; without clamp the datum would leak")
 

Reply via email to