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

wusheng 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 0e734c46 Update release related files (#535)
0e734c46 is described below

commit 0e734c462571dcf55dbb7761211c07d8b156521e
Author: Gao Hongtao <[email protected]>
AuthorDate: Fri Sep 13 19:39:25 2024 +0800

    Update release related files (#535)
---
 Makefile                            |   6 +-
 banyand/measure/part.go             |   7 ++
 banyand/measure/tstable_test.go     | 152 ---------------------------------
 banyand/metadata/schema/property.go |   2 +-
 banyand/stream/part.go              |   7 ++
 banyand/stream/tstable_test.go      | 164 ------------------------------------
 docs/release.md                     |  12 +--
 go.mod                              |   2 +-
 pkg/index/inverted/metrics.go       |   1 +
 scripts/build/build.mk              |   2 +-
 scripts/push-release.sh             |  95 +++++++++++++++++++++
 scripts/release.sh                  |  15 ++--
 12 files changed, 132 insertions(+), 333 deletions(-)

diff --git a/Makefile b/Makefile
index aa5449df..0d6a1747 100644
--- a/Makefile
+++ b/Makefile
@@ -186,7 +186,7 @@ RELEASE_SCRIPTS := $(mk_dir)/scripts/release.sh
 release-binary: release-source ## Package binary archive
        ${RELEASE_SCRIPTS} -b
 
-release-source: clean ## Package source archive
+release-source: ## Package source archive
        ${RELEASE_SCRIPTS} -s
 
 release-sign: ## Sign artifacts
@@ -196,7 +196,11 @@ release-sign: ## Sign artifacts
 
 release-assembly: release-binary release-sign ## Generate release package
 
+PUSH_RELEASE_SCRIPTS := $(mk_dir)/scripts/push-release.sh
 
+release-push-candidate: ## Push release candidate
+       ${PUSH_RELEASE_SCRIPTS}
+       
 .PHONY: all $(PROJECTS) clean build  default nuke
 .PHONY: lint check tidy format pre-push
 .PHONY: test test-race test-coverage test-ci
diff --git a/banyand/measure/part.go b/banyand/measure/part.go
index 1e89b1e9..f4b6b812 100644
--- a/banyand/measure/part.go
+++ b/banyand/measure/part.go
@@ -269,6 +269,13 @@ func (pw *partWrapper) ID() uint64 {
        return pw.p.partMetadata.ID
 }
 
+func (pw *partWrapper) String() string {
+       if pw.mp != nil {
+               return fmt.Sprintf("mem part %v", pw.mp.partMetadata)
+       }
+       return fmt.Sprintf("part %v", pw.p.partMetadata)
+}
+
 func mustOpenFilePart(id uint64, root string, fileSystem fs.FileSystem) *part {
        var p part
        partPath := partPath(root, id)
diff --git a/banyand/measure/tstable_test.go b/banyand/measure/tstable_test.go
index 2f24d5a6..8b011bd0 100644
--- a/banyand/measure/tstable_test.go
+++ b/banyand/measure/tstable_test.go
@@ -30,13 +30,10 @@ import (
        "github.com/apache/skywalking-banyandb/api/common"
        "github.com/apache/skywalking-banyandb/pkg/convert"
        "github.com/apache/skywalking-banyandb/pkg/fs"
-       "github.com/apache/skywalking-banyandb/pkg/logger"
        pbv1 "github.com/apache/skywalking-banyandb/pkg/pb/v1"
        "github.com/apache/skywalking-banyandb/pkg/query/model"
        "github.com/apache/skywalking-banyandb/pkg/run"
        "github.com/apache/skywalking-banyandb/pkg/test"
-       "github.com/apache/skywalking-banyandb/pkg/test/flags"
-       "github.com/apache/skywalking-banyandb/pkg/timestamp"
        "github.com/apache/skywalking-banyandb/pkg/watcher"
 )
 
@@ -266,155 +263,6 @@ func Test_tstIter(t *testing.T) {
                        })
                }
        })
-
-       t.Run("file snapshot", func(t *testing.T) {
-               tests := []testCtx{
-                       {
-                               name:         "Test with no data points",
-                               dpsList:      []*dataPoints{},
-                               sids:         []common.SeriesID{1, 2, 3},
-                               minTimestamp: 1,
-                               maxTimestamp: 1,
-                       },
-                       {
-                               name:         "Test with single part",
-                               dpsList:      []*dataPoints{dpsTS1},
-                               sids:         []common.SeriesID{1, 2, 3},
-                               minTimestamp: 1,
-                               maxTimestamp: 1,
-                               want: []blockMetadata{
-                                       {seriesID: 1, count: 1, 
uncompressedSizeBytes: 1684},
-                                       {seriesID: 2, count: 1, 
uncompressedSizeBytes: 63},
-                                       {seriesID: 3, count: 1, 
uncompressedSizeBytes: 32},
-                               },
-                       },
-                       {
-                               name:         "Test with multiple parts with 
different ts, the block will be merged",
-                               dpsList:      []*dataPoints{dpsTS1, dpsTS2},
-                               sids:         []common.SeriesID{1, 2, 3},
-                               minTimestamp: 1,
-                               maxTimestamp: 2,
-                               want: []blockMetadata{
-                                       {seriesID: 1, count: 2, 
uncompressedSizeBytes: 3368},
-                                       {seriesID: 2, count: 2, 
uncompressedSizeBytes: 126},
-                                       {seriesID: 3, count: 2, 
uncompressedSizeBytes: 64},
-                               },
-                       },
-                       {
-                               name:         "Test with multiple parts with 
same ts, duplicated blocks will be merged",
-                               dpsList:      []*dataPoints{dpsTS1, dpsTS1},
-                               sids:         []common.SeriesID{1, 2, 3},
-                               minTimestamp: 1,
-                               maxTimestamp: 2,
-                               want: []blockMetadata{
-                                       {seriesID: 1, count: 1, 
uncompressedSizeBytes: 1684},
-                                       {seriesID: 2, count: 1, 
uncompressedSizeBytes: 63},
-                                       {seriesID: 3, count: 1, 
uncompressedSizeBytes: 32},
-                               },
-                       },
-               }
-               for _, tt := range tests {
-                       t.Run(tt.name, func(t *testing.T) {
-                               t.Run("merging on the fly", func(t *testing.T) {
-                                       tmpPath, defFn := 
test.Space(require.New(t))
-                                       fileSystem := fs.NewLocalFileSystem()
-                                       defer defFn()
-
-                                       tst, err := newTSTable(fileSystem, 
tmpPath, common.Position{},
-                                               logger.GetLogger("test"), 
timestamp.TimeRange{}, option{flushTimeout: 0, mergePolicy: 
newDefaultMergePolicyForTesting()}, nil)
-                                       require.NoError(t, err)
-                                       for i, dps := range tt.dpsList {
-                                               tst.mustAddDataPoints(dps)
-                                               timeout := 
time.After(flags.EventuallyTimeout) // Set the timeout duration
-                                       OUTER:
-                                               for {
-                                                       select {
-                                                       case <-timeout:
-                                                               
t.Fatalf("timeout waiting for snapshot %d to be introduced", i)
-                                                       default:
-                                                               snp := 
tst.currentSnapshot()
-                                                               if snp == nil {
-                                                                       
t.Logf("waiting for snapshot %d to be introduced", i)
-                                                                       
time.Sleep(100 * time.Millisecond)
-                                                                       continue
-                                                               }
-                                                               if snp.creator 
!= snapshotCreatorMemPart {
-                                                                       
snp.decRef()
-                                                                       break 
OUTER
-                                                               }
-                                                               t.Logf("waiting 
for snapshot %d to be flushed or merged: current creator:%d, parts: %+v",
-                                                                       i, 
snp.creator, snp.parts)
-                                                               snp.decRef()
-                                                               time.Sleep(100 
* time.Millisecond)
-                                                       }
-                                               }
-                                       }
-                                       // wait until some parts are merged
-                                       if len(tt.dpsList) > 0 {
-                                               timeout := 
time.After(flags.EventuallyTimeout) // Set the timeout duration
-                                       OUTER1:
-                                               for {
-                                                       select {
-                                                       case <-timeout:
-                                                               
t.Fatalf("timeout waiting for snapshot to be merged")
-                                                       default:
-                                                               snp := 
tst.currentSnapshot()
-                                                               if snp == nil {
-                                                                       
time.Sleep(100 * time.Millisecond)
-                                                                       continue
-                                                               }
-                                                               if 
len(snp.parts) == 1 {
-                                                                       
snp.decRef()
-                                                                       break 
OUTER1
-                                                               }
-                                                               t.Logf("waiting 
for snapshot to be merged: current creator:%d, parts: %+v", snp.creator, 
snp.parts)
-                                                               snp.decRef()
-                                                               time.Sleep(100 
* time.Millisecond)
-                                                       }
-                                               }
-                                       }
-                                       verify(t, tt, tst)
-                               })
-
-                               t.Run("merging on close", func(t *testing.T) {
-                                       t.Skip("the test is flaky due to 
unpredictable merge loop schedule.")
-                                       tmpPath, defFn := 
test.Space(require.New(t))
-                                       fileSystem := fs.NewLocalFileSystem()
-                                       defer defFn()
-
-                                       tst, err := newTSTable(fileSystem, 
tmpPath, common.Position{},
-                                               logger.GetLogger("test"), 
timestamp.TimeRange{}, option{flushTimeout: defaultFlushTimeout, mergePolicy: 
newDefaultMergePolicyForTesting()}, &metrics{})
-                                       require.NoError(t, err)
-                                       for _, dps := range tt.dpsList {
-                                               tst.mustAddDataPoints(dps)
-                                               time.Sleep(100 * 
time.Millisecond)
-                                       }
-                                       // wait until the introducer is done
-                                       if len(tt.dpsList) > 0 {
-                                               for {
-                                                       snp := 
tst.currentSnapshot()
-                                                       if snp == nil {
-                                                               time.Sleep(100 
* time.Millisecond)
-                                                               continue
-                                                       }
-                                                       if len(snp.parts) == 
len(tt.dpsList) {
-                                                               snp.decRef()
-                                                               tst.Close()
-                                                               break
-                                                       }
-                                                       snp.decRef()
-                                                       time.Sleep(100 * 
time.Millisecond)
-                                               }
-                                       }
-                                       // reopen the table
-                                       tst, err = newTSTable(fileSystem, 
tmpPath, common.Position{},
-                                               logger.GetLogger("test"), 
timestamp.TimeRange{}, option{flushTimeout: defaultFlushTimeout, mergePolicy: 
newDefaultMergePolicyForTesting()}, nil)
-                                       require.NoError(t, err)
-                                       verify(t, tt, tst)
-                               })
-                       })
-               }
-       })
 }
 
 var tagProjections = map[int][]model.TagProjection{
diff --git a/banyand/metadata/schema/property.go 
b/banyand/metadata/schema/property.go
index 8c72e7db..8c87ef02 100644
--- a/banyand/metadata/schema/property.go
+++ b/banyand/metadata/schema/property.go
@@ -190,7 +190,7 @@ func (e *etcdSchemaRegistry) replaceProperty(ctx 
context.Context, key string, pr
 
 func tagLen(property *propertyv1.Property) (uint32, error) {
        tagsCount := len(property.Tags)
-       if tagsCount < 0 || tagsCount > math.MaxUint32 {
+       if tagsCount < 0 || uint64(tagsCount) > math.MaxUint32 {
                return 0, errors.New("integer overflow: tags count exceeds 
uint32 range")
        }
        tagsNum := uint32(tagsCount)
diff --git a/banyand/stream/part.go b/banyand/stream/part.go
index b4ad9d47..d0dce1f9 100644
--- a/banyand/stream/part.go
+++ b/banyand/stream/part.go
@@ -247,6 +247,13 @@ func (pw *partWrapper) ID() uint64 {
        return pw.p.partMetadata.ID
 }
 
+func (pw *partWrapper) String() string {
+       if pw.mp != nil {
+               return fmt.Sprintf("mem part %v", pw.mp.partMetadata)
+       }
+       return fmt.Sprintf("part %v", pw.p.partMetadata)
+}
+
 func mustOpenFilePart(id uint64, root string, fileSystem fs.FileSystem) *part {
        var p part
        partPath := partPath(root, id)
diff --git a/banyand/stream/tstable_test.go b/banyand/stream/tstable_test.go
index 9224e552..42e2a6eb 100644
--- a/banyand/stream/tstable_test.go
+++ b/banyand/stream/tstable_test.go
@@ -31,13 +31,10 @@ import (
        "github.com/apache/skywalking-banyandb/api/common"
        "github.com/apache/skywalking-banyandb/pkg/convert"
        "github.com/apache/skywalking-banyandb/pkg/fs"
-       "github.com/apache/skywalking-banyandb/pkg/logger"
        pbv1 "github.com/apache/skywalking-banyandb/pkg/pb/v1"
        "github.com/apache/skywalking-banyandb/pkg/query/model"
        "github.com/apache/skywalking-banyandb/pkg/run"
        "github.com/apache/skywalking-banyandb/pkg/test"
-       "github.com/apache/skywalking-banyandb/pkg/test/flags"
-       "github.com/apache/skywalking-banyandb/pkg/timestamp"
        "github.com/apache/skywalking-banyandb/pkg/watcher"
 )
 
@@ -252,167 +249,6 @@ func Test_tstIter(t *testing.T) {
                        })
                }
        })
-
-       t.Run("file snapshot", func(t *testing.T) {
-               tests := []testCtx{
-                       {
-                               name:         "Test with no data points",
-                               esList:       []*elements{},
-                               sids:         []common.SeriesID{1, 2, 3},
-                               minTimestamp: 1,
-                               maxTimestamp: 1,
-                       },
-                       {
-                               name:         "Test with single part",
-                               esList:       []*elements{esTS1},
-                               sids:         []common.SeriesID{1, 2, 3},
-                               minTimestamp: 1,
-                               maxTimestamp: 1,
-                               want: []blockMetadata{
-                                       {seriesID: 1, count: 1, 
uncompressedSizeBytes: 889},
-                                       {seriesID: 2, count: 1, 
uncompressedSizeBytes: 63},
-                                       {seriesID: 3, count: 1, 
uncompressedSizeBytes: 16},
-                               },
-                       },
-                       {
-                               name:         "Test with multiple parts with 
different ts, the block will be merged",
-                               esList:       []*elements{esTS1, esTS2, esTS2},
-                               sids:         []common.SeriesID{1, 2, 3},
-                               minTimestamp: 1,
-                               maxTimestamp: 2,
-                               want: []blockMetadata{
-                                       {seriesID: 1, count: 3, 
uncompressedSizeBytes: 2667},
-                                       {seriesID: 2, count: 3, 
uncompressedSizeBytes: 189},
-                                       {seriesID: 3, count: 3, 
uncompressedSizeBytes: 48},
-                               },
-                       },
-                       {
-                               name:         "Test with multiple parts with 
same ts, duplicated blocks will be merged",
-                               esList:       []*elements{esTS1, esTS1},
-                               sids:         []common.SeriesID{1, 2, 3},
-                               minTimestamp: 1,
-                               maxTimestamp: 2,
-                               want: []blockMetadata{
-                                       {seriesID: 1, count: 2, 
uncompressedSizeBytes: 1778},
-                                       {seriesID: 2, count: 2, 
uncompressedSizeBytes: 126},
-                                       {seriesID: 3, count: 2, 
uncompressedSizeBytes: 32},
-                               },
-                       },
-               }
-               for _, tt := range tests {
-                       t.Run(tt.name, func(t *testing.T) {
-                               t.Run("merging on the fly", func(t *testing.T) {
-                                       tmpPath, defFn := 
test.Space(require.New(t))
-                                       fileSystem := fs.NewLocalFileSystem()
-                                       defer defFn()
-
-                                       tst, err := newTSTable(fileSystem, 
tmpPath, common.Position{},
-                                               logger.GetLogger("test"), 
timestamp.TimeRange{}, option{flushTimeout: 0, elementIndexFlushTimeout: 0, 
mergePolicy: newDefaultMergePolicyForTesting()}, nil)
-                                       require.NoError(t, err)
-                                       for i, es := range tt.esList {
-                                               tst.mustAddElements(es)
-                                               timeout := 
time.After(flags.EventuallyTimeout) // Set the timeout duration
-                                       OUTER:
-                                               for {
-                                                       select {
-                                                       case <-timeout:
-                                                               
t.Fatalf("timeout waiting for snapshot %d to be introduced", i)
-                                                       default:
-                                                               snp := 
tst.currentSnapshot()
-                                                               if snp == nil {
-                                                                       
t.Logf("waiting for snapshot %d to be introduced", i)
-                                                                       
time.Sleep(100 * time.Millisecond)
-                                                                       continue
-                                                               }
-                                                               if snp.creator 
!= snapshotCreatorMemPart {
-                                                                       
snp.decRef()
-                                                                       break 
OUTER
-                                                               }
-                                                               t.Logf("waiting 
for snapshot %d to be flushed or merged: current creator:%d, parts: %+v",
-                                                                       i, 
snp.creator, snp.parts)
-                                                               snp.decRef()
-                                                               time.Sleep(100 
* time.Millisecond)
-                                                       }
-                                               }
-                                       }
-                                       // wait until some parts are merged
-                                       if len(tt.esList) > 0 {
-                                               timeout := 
time.After(flags.EventuallyTimeout) // Set the timeout duration
-                                       OUTER1:
-                                               for {
-                                                       select {
-                                                       case <-timeout:
-                                                               
t.Fatalf("timeout waiting for snapshot to be merged")
-                                                       default:
-                                                               snp := 
tst.currentSnapshot()
-                                                               if snp == nil {
-                                                                       
time.Sleep(100 * time.Millisecond)
-                                                                       continue
-                                                               }
-                                                               if 
len(snp.parts) == 1 || len(snp.parts) < len(tt.esList) {
-                                                                       
snp.decRef()
-                                                                       break 
OUTER1
-                                                               }
-                                                               t.Logf("waiting 
for snapshot to be merged: current creator:%d, parts: %+v", snp.creator, 
snp.parts)
-                                                               snp.decRef()
-                                                               time.Sleep(100 
* time.Millisecond)
-                                                       }
-                                               }
-                                       }
-                                       verify(t, tt, tst)
-                               })
-
-                               t.Run("merging on close", func(t *testing.T) {
-                                       t.Skip("the test is flaky due to 
unpredictable merge loop schedule.")
-                                       tmpPath, defFn := 
test.Space(require.New(t))
-                                       fileSystem := fs.NewLocalFileSystem()
-                                       defer defFn()
-
-                                       tst, err := newTSTable(fileSystem, 
tmpPath, common.Position{},
-                                               logger.GetLogger("test"), 
timestamp.TimeRange{},
-                                               option{
-                                                       flushTimeout:           
  defaultFlushTimeout,
-                                                       
elementIndexFlushTimeout: defaultFlushTimeout,
-                                                       mergePolicy:            
  newDefaultMergePolicyForTesting(),
-                                               }, nil)
-                                       require.NoError(t, err)
-                                       for _, es := range tt.esList {
-                                               tst.mustAddElements(es)
-                                               time.Sleep(100 * 
time.Millisecond)
-                                       }
-                                       // wait until the introducer is done
-                                       if len(tt.esList) > 0 {
-                                               for {
-                                                       snp := 
tst.currentSnapshot()
-                                                       if snp == nil {
-                                                               time.Sleep(100 
* time.Millisecond)
-                                                               continue
-                                                       }
-                                                       if len(snp.parts) == 
len(tt.esList) {
-                                                               snp.decRef()
-                                                               tst.Close()
-                                                               break
-                                                       }
-                                                       snp.decRef()
-                                                       time.Sleep(100 * 
time.Millisecond)
-                                               }
-                                       } else {
-                                               tst.Close()
-                                       }
-                                       // reopen the table
-                                       tst, err = newTSTable(fileSystem, 
tmpPath, common.Position{},
-                                               logger.GetLogger("test"), 
timestamp.TimeRange{},
-                                               option{
-                                                       flushTimeout:           
  defaultFlushTimeout,
-                                                       
elementIndexFlushTimeout: defaultFlushTimeout,
-                                                       mergePolicy:            
  newDefaultMergePolicyForTesting(),
-                                               }, nil)
-                                       require.NoError(t, err)
-                                       verify(t, tt, tst)
-                               })
-                       })
-               }
-       })
 }
 
 var tagProjectionAll = []model.TagProjection{
diff --git a/docs/release.md b/docs/release.md
index 4201b70e..561c9696 100644
--- a/docs/release.md
+++ b/docs/release.md
@@ -29,16 +29,12 @@ The `skywalking-banyandb-${VERSION}-bin.tgz`, 
`skywalking-banyandb-${VERSION}-sr
 ## Upload to Apache svn
 
 ```shell
-svn co https://dist.apache.org/repos/dist/dev/skywalking/
-mkdir -p skywalking/banyandb/"$VERSION"
-cp skywalking-banyandb/build/skywalking-banyandb*.tgz 
skywalking/banyandb/"$VERSION"
-cp skywalking-banyandb/build/skywalking-banyandb*.tgz.asc 
skywalking/banyandb/"$VERSION"
-cp skywalking-banyandb/build/skywalking-banyandb*.tgz.sha512 
skywalking/banyandb/"$VERSION"
-
-cd skywalking/banyandb && svn add "$VERSION" && svn commit -m "Draft Apache 
SkyWalking BanyanDB release $VERSION"
+make release-push-candidate
 ```
 
-## Call for vote in dev@ mailing list
+The script will upload the source code package and binary package to the 
Apache SVN staging repository. The script will ask for your Apache ID and 
password. **You can do this only if you are a PMC member**.
+
+After the script is finished, you will get the vote mail subject and content 
based on the following template.
 
 Call for vote in `[email protected]`
 
diff --git a/go.mod b/go.mod
index 2c79c9aa..dde09b8f 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/apache/skywalking-banyandb
 
-go 1.23.0
+go 1.23
 
 toolchain go1.23.1
 
diff --git a/pkg/index/inverted/metrics.go b/pkg/index/inverted/metrics.go
index 6816b90e..98b6d7a3 100644
--- a/pkg/index/inverted/metrics.go
+++ b/pkg/index/inverted/metrics.go
@@ -112,6 +112,7 @@ func (s *store) CollectMetrics(labelValues ...string) {
        if s.metrics == nil {
                return
        }
+       // fixme: data race here
        status := s.writer.Status()
        s.metrics.totalUpdates.Set(float64(status.TotUpdates), labelValues...)
        s.metrics.totalDeletes.Set(float64(status.TotDeletes), labelValues...)
diff --git a/scripts/build/build.mk b/scripts/build/build.mk
index 647f0a89..899dfef0 100644
--- a/scripts/build/build.mk
+++ b/scripts/build/build.mk
@@ -86,7 +86,7 @@ clean-build:  ## Clean all artifacts
 # be rebuilt again.
 $(BUILD_LOCK):
        @echo "cleaning up stale build artifacts..."
-       $(MAKE) clean
+       $(MAKE) clean-build
        mkdir -p $(BUILD_DIR)
        touch $@
 
diff --git a/scripts/push-release.sh b/scripts/push-release.sh
new file mode 100755
index 00000000..0a0ed328
--- /dev/null
+++ b/scripts/push-release.sh
@@ -0,0 +1,95 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+set -ex
+
+if [ "$VERSION" == "" ]; then
+  echo "VERSION environment variable not found, Please setting the VERSION."
+  echo "For example: export VERSION=1.0.0"
+  exit 1
+fi
+
+VERSION=${VERSION}
+TAG_NAME=v${VERSION}
+PRODUCT_NAME="skywalking-banyandb-${VERSION}"
+
+echo "Release version "${VERSION}
+echo "Source tag "${TAG_NAME}
+
+SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+ROOTDIR=${SCRIPTDIR}/..
+BUILDDIR=${ROOTDIR}/build
+
+pushd ${BUILDDIR}
+trap 'popd' EXIT
+
+rm -rf skywalking
+
+svn co https://dist.apache.org/repos/dist/dev/skywalking/
+mkdir -p skywalking/banyandb/"$VERSION"
+cp ${PRODUCT_NAME}-*.tgz skywalking/banyandb/"$VERSION"
+cp ${PRODUCT_NAME}-*.tgz.asc skywalking/banyandb/"$VERSION"
+cp ${PRODUCT_NAME}-*.tgz.sha512 skywalking/banyandb/"$VERSION"
+
+cd skywalking/banyandb && svn add "$VERSION" && svn commit -m "Draft Apache 
SkyWalking BanyanDB release $VERSION"
+
+cat << EOF
+=========================================================================
+Subject: [VOTE] Release Apache SkyWalking BanyanDB version $VERSION
+
+Content:
+
+Hi the SkyWalking Community:
+This is a call for vote to release Apache SkyWalking BanyanDB version $VERSION.
+
+Release notes:
+
+ * https://github.com/apache/skywalking-banyandb/blob/v$VERSION/CHANGES.md
+
+Release Candidate:
+
+ * https://dist.apache.org/repos/dist/dev/skywalking/banyandb/$VERSION
+ * sha512 checksums
+   - $(cat ${PRODUCT_NAME}-src.tgz.sha512)
+   - $(cat ${PRODUCT_NAME}-banyand.tgz.sha512)
+   - $(cat ${PRODUCT_NAME}-bydbctl.tgz.sha512)
+
+Release Tag :
+
+ * (Git Tag) $TAG_NAME
+
+Release Commit Hash :
+
+ * https://github.com/apache/skywalking-banyandb/tree/$(git rev-list -n 1 
"$TAG_NAME")
+
+Keys to verify the Release Candidate :
+
+ * https://dist.apache.org/repos/dist/release/skywalking/KEYS
+
+Guide to build the release from source :
+
+ * 
https://github.com/apache/skywalking-banyandb/blob/v$VERSION/docs/installation/binaries.md#Build-From-Source
+
+Voting will start now and will remain open for at least 72 hours, all PMC 
members are required to give their votes.
+
+[ ] +1 Release this package.
+[ ] +0 No opinion.
+[ ] -1 Do not release this package because....
+
+Thanks.
+
+[1] 
https://github.com/apache/skywalking/blob/master/docs/en/guides/How-to-release.md#vote-check
+EOF
diff --git a/scripts/release.sh b/scripts/release.sh
index 8e16d117..ab619fa4 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -24,7 +24,8 @@ BUILDDIR=${ROOTDIR}/build
 RELEASE_TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
 RELEASE_VERSION=${RELEASE_TAG#"v"}
 
-SOURCE_FILE=${BUILDDIR}/skywalking-banyandb-${RELEASE_VERSION}-src.tgz
+SOURCE_FILE_NAME=skywalking-banyandb-${RELEASE_VERSION}-src.tgz
+SOURCE_FILE=${BUILDDIR}/${SOURCE_FILE_NAME}
 
 binary(){
     if [ ! -f "${SOURCE_FILE}" ]; then
@@ -34,8 +35,9 @@ binary(){
     tmpdir=`mktemp -d`
     trap "rm -rf ${tmpdir}" EXIT
     pushd ${tmpdir}
+    trap 'popd' EXIT
     tar -xvf ${SOURCE_FILE}
-    make generate
+    make generate && make -C ui build
     TARGET_OS=linux PLATFORMS=linux/amd64,linux/arm64 make -C banyand release
     bindir=./build
     mkdir -p ${bindir}/bin
@@ -57,7 +59,6 @@ binary(){
     copy_binaries bydbctl
     # Package
     tar -czf ${BUILDDIR}/skywalking-banyandb-${RELEASE_VERSION}-bydbctl.tgz -C 
${bindir} .
-    popd
 }
 
 copy_binaries() {
@@ -73,7 +74,8 @@ copy_binaries() {
 
 source(){
     # Package
-    mkdir -p ${BUILDDIR}
+    tmpdir=`mktemp -d`
+    trap "rm -rf ${tmpdir}" EXIT
     rm -rf ${SOURCE_FILE}
     pushd ${ROOTDIR}
     echo "RELEASE_VERSION=${RELEASE_VERSION}" > .env
@@ -85,8 +87,11 @@ source(){
     --exclude=".idea" \
     --exclude=".vscode" \
     --exclude="bin" \
-    -czf ${SOURCE_FILE} \
+    -czf ${tmpdir}/${SOURCE_FILE_NAME} \
     .
+
+    mkdir -p ${BUILDDIR}
+    mv ${tmpdir}/${SOURCE_FILE_NAME} ${BUILDDIR}
     popd
 }
 

Reply via email to