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

laiyingchun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git


The following commit(s) were added to refs/heads/master by this push:
     new 05466d3e2 chore(CI): Improve github actions (#1791)
05466d3e2 is described below

commit 05466d3e2becd1a3fe0164bd45febf5b799e83d3
Author: Yingchun Lai <[email protected]>
AuthorDate: Thu Dec 21 21:06:41 2023 +0800

    chore(CI): Improve github actions (#1791)
    
    This patch mainly improve the github actions for CI, including:
    - Separate Java client CI 'test' step into 'build_server' and 
'test_java_client'.
      So it's not needed to build server again when retrying to run Java client 
tests.
    - Encapsulate some actions when build and test servers, including:
      - rebuild_thirdparty_if_needed
      - build_pegasus
      - upload_artifact
      - download_artifact
      - run_server_tests
---
 .github/actions/build_pegasus/action.yaml          |  52 +++
 .../download_artifact/action.yaml}                 |  51 +--
 .../rebuild_thirdparty_if_needed/action.yaml       |  56 +++
 .../run_server_tests/action.yaml}                  |  42 +-
 .github/actions/upload_artifact/action.yaml        |  38 ++
 .github/workflows/lint_and_test_admin-cli.yml      |   1 +
 .../lint_and_test_admin-cli_always_pass.yml        |   1 +
 .github/workflows/lint_and_test_collector.yml      |   4 +-
 .github/workflows/lint_and_test_cpp.yaml           | 440 +++------------------
 .github/workflows/lint_and_test_go-client.yml      |   1 +
 ...va-client.yml => lint_and_test_java-client.yml} |  71 ++--
 .github/workflows/lint_and_test_pegic.yml          |   1 +
 .../workflows/lint_and_test_pegic_always_pass.yml  |   1 +
 .github/workflows/test_nodejs-client.yml           |   1 +
 .github/workflows/test_python-client.yml           |   1 +
 .github/workflows/test_scala-client.yml            |   4 +-
 run.sh                                             |  21 +-
 17 files changed, 286 insertions(+), 500 deletions(-)

diff --git a/.github/actions/build_pegasus/action.yaml 
b/.github/actions/build_pegasus/action.yaml
new file mode 100644
index 000000000..ad640f2fa
--- /dev/null
+++ b/.github/actions/build_pegasus/action.yaml
@@ -0,0 +1,52 @@
+# 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.
+
+name: Build Pegasus
+runs:
+  using: composite
+  steps:
+    - name: Setup cache
+      uses: actions/cache@v3
+      with:
+        path: |
+          /github/home/.ccache
+        key: ${{ env.ARTIFACT_NAME }}_ccache
+    - name: Free Disk Space (Ubuntu)
+      run: |
+        .github/workflows/free_disk_space.sh
+      shell: bash
+    - name: Compilation
+      run: |
+        ccache -p
+        ccache -z
+        ./run.sh build -j $(nproc) --skip_thirdparty ${BUILD_OPTIONS}
+        ccache -s
+      shell: bash
+    - name: Pack Server
+      run: |
+        ./run.sh pack_server -j
+        rm -rf pegasus-server-*
+      shell: bash
+    - name: Pack Tools
+      run: |
+        ./run.sh pack_tools -j
+        rm -rf pegasus-tools-*
+      shell: bash
+    - name: Clear Build Files
+      run: |
+        find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
+      shell: bash
diff --git a/.github/workflows/lint_and_test_pegic_always_pass.yml 
b/.github/actions/download_artifact/action.yaml
similarity index 55%
copy from .github/workflows/lint_and_test_pegic_always_pass.yml
copy to .github/actions/download_artifact/action.yaml
index f4ab49298..35ddb8ae0 100644
--- a/.github/workflows/lint_and_test_pegic_always_pass.yml
+++ b/.github/actions/download_artifact/action.yaml
@@ -14,36 +14,23 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
----
-# workflow name
-name: Golang Lint and Unit Test - pegic
 
-# on events
-on:
-  # run on each pull request
-  pull_request:
-    types: [ synchronize, opened, reopened ]
-    branches:
-      - master
-      - 'v[0-9]+.*' # release branch
-      - ci-test # testing branch for github action
-      - '*dev'
-    paths-ignore:
-      - pegic/**
-
-  # for manually triggering workflow
-  workflow_dispatch:
-
-# workflow tasks
-jobs:
-  lint:
-    name: Lint
-    runs-on: ubuntu-latest
-    steps:
-      - run: 'echo "No build required" '
-
-  build:
-    name: Test
-    runs-on: ubuntu-latest
-    steps:
-      - run: 'echo "No build required" '
+name: Download artifact
+runs:
+  using: composite
+  steps:
+    - name: Unpack prebuilt third-parties
+      run: |
+        unzip /root/thirdparties-bin.zip -d ./thirdparty
+        rm -f /root/thirdparties-bin.zip
+      shell: bash
+    - name: Download tarball
+      uses: actions/download-artifact@v3
+      with:
+        name: ${{ env.ARTIFACT_NAME }}_artifact_${{ github.sha }}
+        path: .
+    - name: Unpack tarball
+      run: |
+        tar -zxvf ${ARTIFACT_NAME}_builder.tar
+        rm -f ${ARTIFACT_NAME}_builder.tar
+      shell: bash
diff --git a/.github/actions/rebuild_thirdparty_if_needed/action.yaml 
b/.github/actions/rebuild_thirdparty_if_needed/action.yaml
new file mode 100644
index 000000000..ff48fff29
--- /dev/null
+++ b/.github/actions/rebuild_thirdparty_if_needed/action.yaml
@@ -0,0 +1,56 @@
+# 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.
+
+name: Rebuild thirdparty if needed
+runs:
+  using: composite
+  steps:
+    - uses: dorny/paths-filter@v2
+      id: changes
+      with:
+        filters: |
+          thirdparty:
+            - '.github/workflows/thirdparty-regular-push.yml'
+            - 'docker/thirdparties-src/**'
+            - 'docker/thirdparties-bin/**'
+            - 'thirdparty/**'
+    - name: Unpack prebuilt third-parties
+      if: steps.changes.outputs.thirdparty == 'false'
+      run: |
+        rm -f /root/thirdparties-src.zip
+        unzip /root/thirdparties-bin.zip -d ./thirdparty
+        rm -f /root/thirdparties-bin.zip
+        find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
+        rm -rf ./thirdparty/hadoop-bin/share/doc
+        rm -rf ./thirdparty/zookeeper-bin/docs
+      shell: bash
+    - name: Rebuild third-parties
+      if: steps.changes.outputs.thirdparty == 'true'
+      working-directory: thirdparty
+      # Build third-parties and leave some necessary libraries and source.
+      run: |
+        rm -f /root/thirdparties-src.zip
+        mkdir build
+        cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=1 
-DUSE_JEMALLOC=${USE_JEMALLOC} -B build/
+        cmake --build build/ -j $(nproc)
+        rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
+        find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
+        ../scripts/download_hadoop.sh hadoop-bin
+        ../scripts/download_zk.sh zookeeper-bin
+        rm -rf hadoop-bin/share/doc
+        rm -rf zookeeper-bin/docs
+      shell: bash
diff --git a/.github/workflows/lint_and_test_pegic_always_pass.yml 
b/.github/actions/run_server_tests/action.yaml
similarity index 55%
copy from .github/workflows/lint_and_test_pegic_always_pass.yml
copy to .github/actions/run_server_tests/action.yaml
index f4ab49298..816315d2b 100644
--- a/.github/workflows/lint_and_test_pegic_always_pass.yml
+++ b/.github/actions/run_server_tests/action.yaml
@@ -14,36 +14,14 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
----
-# workflow name
-name: Golang Lint and Unit Test - pegic
 
-# on events
-on:
-  # run on each pull request
-  pull_request:
-    types: [ synchronize, opened, reopened ]
-    branches:
-      - master
-      - 'v[0-9]+.*' # release branch
-      - ci-test # testing branch for github action
-      - '*dev'
-    paths-ignore:
-      - pegic/**
-
-  # for manually triggering workflow
-  workflow_dispatch:
-
-# workflow tasks
-jobs:
-  lint:
-    name: Lint
-    runs-on: ubuntu-latest
-    steps:
-      - run: 'echo "No build required" '
-
-  build:
-    name: Test
-    runs-on: ubuntu-latest
-    steps:
-      - run: 'echo "No build required" '
+name: Run server tests
+runs:
+  using: composite
+  steps:
+    - name: Unit Testing
+      run: |
+        export 
LD_LIBRARY_PATH=$(pwd)/thirdparty/output/lib:${JAVA_HOME}/jre/lib/amd64/server
+        ulimit -s unlimited
+        ./run.sh test --onebox_opts "$ONEBOX_OPTS" --test_opts "$TEST_OPTS" -m 
${{ matrix.test_module }}
+      shell: bash
diff --git a/.github/actions/upload_artifact/action.yaml 
b/.github/actions/upload_artifact/action.yaml
new file mode 100644
index 000000000..0fb6975d7
--- /dev/null
+++ b/.github/actions/upload_artifact/action.yaml
@@ -0,0 +1,38 @@
+# 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.
+
+name: Upload artifact
+runs:
+  using: composite
+  steps:
+    - name: Tar files
+      run: |
+        mv thirdparty/hadoop-bin ./
+        mv thirdparty/zookeeper-bin ./
+        rm -rf thirdparty
+        # The following operations are tricky, these directories and files 
don't exist if not build with '--test'.
+        # When build binaries for client tests, it's not needed to add 
'--test'.
+        mkdir -p build/latest/bin
+        mkdir -p build/latest/src/server/test
+        touch build/latest/src/server/test/config.ini
+        tar -zcvhf ${ARTIFACT_NAME}_builder.tar build/latest/output 
build/latest/bin build/latest/src/server/test/config.ini hadoop-bin 
zookeeper-bin
+      shell: bash
+    - name: Upload tarball
+      uses: actions/upload-artifact@v3
+      with:
+        name: ${{ env.ARTIFACT_NAME }}_artifact_${{ github.sha }}
+        path: ${{ env.ARTIFACT_NAME }}_builder.tar
diff --git a/.github/workflows/lint_and_test_admin-cli.yml 
b/.github/workflows/lint_and_test_admin-cli.yml
index ee57ac9d8..788ba8ba3 100644
--- a/.github/workflows/lint_and_test_admin-cli.yml
+++ b/.github/workflows/lint_and_test_admin-cli.yml
@@ -29,6 +29,7 @@ on:
       - ci-test # testing branch for github action
       - '*dev'
     paths:
+      - .github/workflows/lint_and_test_admin-cli.yml
       - admin-cli/**
 
   # for manually triggering workflow
diff --git a/.github/workflows/lint_and_test_admin-cli_always_pass.yml 
b/.github/workflows/lint_and_test_admin-cli_always_pass.yml
index 5189678d0..9c3b18f37 100644
--- a/.github/workflows/lint_and_test_admin-cli_always_pass.yml
+++ b/.github/workflows/lint_and_test_admin-cli_always_pass.yml
@@ -29,6 +29,7 @@ on:
       - ci-test # testing branch for github action
       - '*dev'
     paths-ignore:
+      - .github/workflows/lint_and_test_admin-cli_always_pass.yml
       - admin-cli/**
 
   # for manually triggering workflow
diff --git a/.github/workflows/lint_and_test_collector.yml 
b/.github/workflows/lint_and_test_collector.yml
index 3b0a378ae..e257dbc93 100644
--- a/.github/workflows/lint_and_test_collector.yml
+++ b/.github/workflows/lint_and_test_collector.yml
@@ -29,8 +29,8 @@ on:
       - ci-test # testing branch for github action
       - '*dev'
     paths:
-      - '.github/workflows/lint_and_test_collector.yml'
-      - 'collector/**'
+      - .github/workflows/lint_and_test_collector.yml
+      - collector/**
 
   # for manually triggering workflow
   workflow_dispatch:
diff --git a/.github/workflows/lint_and_test_cpp.yaml 
b/.github/workflows/lint_and_test_cpp.yaml
index 572d11b1a..f90a18074 100644
--- a/.github/workflows/lint_and_test_cpp.yaml
+++ b/.github/workflows/lint_and_test_cpp.yaml
@@ -14,12 +14,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
----
-# Developer Notes:
-#
-# This config is for github actions. Before merging your changes of this file,
-# it's recommended to create a PR against the ci-test branch to test if it 
works
-# as expected.
 
 name: Cpp CI
 
@@ -33,17 +27,18 @@ on:
       - ci-test # testing branch for github action
       - '*dev'
     paths:
-      - '.github/workflows/lint_and_test_cpp.yaml'
-      - '.github/workflows/thirdparty-regular-push.yml'
-      - 'docker/thirdparties-src/**'
-      - 'docker/thirdparties-bin/**'
-      - 'CMakeLists.txt'
-      - 'run.sh'
-      - 'scripts/pack_server.sh'
-      - 'scripts/pack_tools.sh'
-      - 'cmake_modules/**'
-      - 'src/**'
-      - 'thirdparty/**'
+      - .github/actions
+      - .github/workflows/lint_and_test_cpp.yaml
+      - .github/workflows/thirdparty-regular-push.yml
+      - docker/thirdparties-bin/**
+      - docker/thirdparties-src/**
+      - CMakeLists.txt
+      - cmake_modules/**
+      - run.sh
+      - scripts/pack_server.sh
+      - scripts/pack_tools.sh
+      - src/**
+      - thirdparty/**
 
   # for manually triggering workflow
   workflow_dispatch:
@@ -68,6 +63,8 @@ jobs:
     name: IWYU
     needs: cpp_clang_format_linter
     runs-on: ubuntu-latest
+    env:
+      USE_JEMALLOC: OFF
     container:
       image: apache/pegasus:thirdparties-bin-ubuntu2204-${{ github.base_ref }}
     steps:
@@ -75,29 +72,7 @@ jobs:
       - name: Free Disk Space (Ubuntu)
         run: |
           .github/workflows/free_disk_space.sh
-      - uses: dorny/paths-filter@v2
-        id: changes
-        with:
-          filters: |
-            thirdparty:
-              - '.github/workflows/thirdparty-regular-push.yml'
-              - 'docker/thirdparties-src/**'
-              - 'docker/thirdparties-bin/**'
-              - 'thirdparty/**'
-      - name: Unpack prebuilt third-parties
-        if: steps.changes.outputs.thirdparty == 'false'
-        run: unzip /root/thirdparties-bin.zip -d ./thirdparty
-      - name: Rebuild third-parties
-        if: steps.changes.outputs.thirdparty == 'true'
-        working-directory: thirdparty
-        # Build thirdparties and leave some necessary libraries and source
-        run: |
-          mkdir build
-          cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=1 -B build/
-          cmake --build build/ -j $(nproc)
-          rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
-          ../scripts/download_hadoop.sh hadoop-bin
-          ../scripts/download_zk.sh zookeeper-bin
+      - uses: "./.github/actions/rebuild_thirdparty_if_needed"
       - name: Build IWYU binary
         run: |
           mkdir iwyu && cd iwyu && git clone 
https://github.com/include-what-you-use/include-what-you-use.git
@@ -115,80 +90,17 @@ jobs:
     name: Build Release
     needs: cpp_clang_format_linter
     runs-on: ubuntu-latest
+    env:
+      USE_JEMALLOC: OFF
+      ARTIFACT_NAME: release
+      BUILD_OPTIONS: -t release --test
     container:
       image: apache/pegasus:thirdparties-bin-test-ubuntu2204-${{ 
github.base_ref }}
     steps:
       - uses: actions/checkout@v3
-      - name: Setup cache
-        uses: actions/cache@v3
-        with:
-          path: |
-            /github/home/.ccache
-          key: release_ccache
-      - name: Free Disk Space (Ubuntu)
-        run: |
-          .github/workflows/free_disk_space.sh
-      - uses: dorny/paths-filter@v2
-        id: changes
-        with:
-          filters: |
-            thirdparty:
-              - '.github/workflows/thirdparty-regular-push.yml'
-              - 'docker/thirdparties-src/**'
-              - 'docker/thirdparties-bin/**'
-              - 'thirdparty/**'
-      - name: Unpack prebuilt third-parties
-        if: steps.changes.outputs.thirdparty == 'false'
-        run: |
-          rm -f /root/thirdparties-src.zip
-          unzip /root/thirdparties-bin.zip -d ./thirdparty
-          rm -f /root/thirdparties-bin.zip
-          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-          rm -rf ./thirdparty/hadoop-bin/share/doc
-          rm -rf ./thirdparty/zookeeper-bin/docs
-      - name: Rebuild third-parties
-        if: steps.changes.outputs.thirdparty == 'true'
-        working-directory: thirdparty
-        # Build thirdparties and leave some necessary libraries and source
-        run: |
-          rm -f /root/thirdparties-src.zip
-          mkdir build
-          cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=1 -B build/
-          cmake --build build/ -j $(nproc)
-          rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
-          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-          ../scripts/download_hadoop.sh hadoop-bin
-          ../scripts/download_zk.sh zookeeper-bin
-          rm -rf hadoop-bin/share/doc
-          rm -rf zookeeper-bin/docs
-      - name: Compilation
-        run: |
-          ccache -p
-          ccache -z
-          ./run.sh build --test --skip_thirdparty -j $(nproc) -t release
-          ccache -s
-      - name: Clear Build Files
-        run: |
-          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
-      - name: Pack Server
-        run: |
-          ./run.sh pack_server
-          rm -rf pegasus-server-*
-      - name: Pack Tools
-        run: |
-          ./run.sh pack_tools
-          rm -rf pegasus-tools-*
-      - name: Tar files
-        run: |
-          mv thirdparty/hadoop-bin ./
-          mv thirdparty/zookeeper-bin ./
-          rm -rf thirdparty
-          tar -zcvhf release__builder.tar build/latest/output build/latest/bin 
build/latest/src/server/test/config.ini hadoop-bin zookeeper-bin
-      - name: Upload Artifact
-        uses: actions/upload-artifact@v3
-        with:
-          name: release_artifact_${{ github.sha }}
-          path: release__builder.tar
+      - uses: "./.github/actions/rebuild_thirdparty_if_needed"
+      - uses: "./.github/actions/build_pegasus"
+      - uses: "./.github/actions/upload_artifact"
 
   test_Release:
     name: Test Release
@@ -238,100 +150,31 @@ jobs:
           - throttle_test
     needs: build_Release
     runs-on: ubuntu-latest
+    env:
+      ARTIFACT_NAME: release
     container:
       image: apache/pegasus:thirdparties-bin-test-ubuntu2204-${{ 
github.base_ref }}
       options: --cap-add=SYS_PTRACE
     steps:
       - uses: actions/checkout@v3
-      - name: Unpack prebuilt third-parties
-        run: |
-          unzip /root/thirdparties-bin.zip -d ./thirdparty
-          rm -f /root/thirdparties-bin.zip
-      - name: Download Artifact
-        uses: actions/download-artifact@v3
-        with:
-          name: release_artifact_${{ github.sha }}
-          path: .
-      - name: Tar files
-        run: |
-          tar -zxvf release__builder.tar
-          rm -f release__builder.tar
-      - name: Unit Testing
-        run: |
-          export 
LD_LIBRARY_PATH=`pwd`/thirdparty/output/lib:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server
-          ulimit -s unlimited
-          ./run.sh test --onebox_opts "$ONEBOX_OPTS" --test_opts "$TEST_OPTS" 
-m ${{ matrix.test_module }}
+      - uses: "./.github/actions/download_artifact"
+      - uses: "./.github/actions/run_server_tests"
 
   build_ASAN:
     name: Build ASAN
     needs: cpp_clang_format_linter
     runs-on: ubuntu-latest
+    env:
+      USE_JEMALLOC: OFF
+      ARTIFACT_NAME: release_address
+      BUILD_OPTIONS: --sanitizer address --disable_gperf --test
     container:
       image: apache/pegasus:thirdparties-bin-test-ubuntu2204-${{ 
github.base_ref }}
     steps:
       - uses: actions/checkout@v3
-      - name: Setup cache
-        uses: actions/cache@v3
-        with:
-          path: |
-            /github/home/.ccache
-          key: asan_ccache
-      - name: Free Disk Space (Ubuntu)
-        run: |
-          .github/workflows/free_disk_space.sh
-      - uses: dorny/paths-filter@v2
-        id: changes
-        with:
-          filters: |
-            thirdparty:
-              - '.github/workflows/thirdparty-regular-push.yml'
-              - 'docker/thirdparties-src/**'
-              - 'docker/thirdparties-bin/**'
-              - 'thirdparty/**'
-      - name: Unpack prebuilt third-parties
-        if: steps.changes.outputs.thirdparty == 'false'
-        run: |
-          rm -f /root/thirdparties-src.zip
-          unzip /root/thirdparties-bin.zip -d ./thirdparty
-          rm -f /root/thirdparties-bin.zip
-          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-          rm -rf ./thirdparty/hadoop-bin/share/doc
-          rm -rf ./thirdparty/zookeeper-bin/docs
-      - name: Rebuild third-parties
-        if: steps.changes.outputs.thirdparty == 'true'
-        working-directory: thirdparty
-        # Build thirdparties and leave some necessary libraries and source
-        run: |
-          rm -f /root/thirdparties-src.zip
-          mkdir build
-          cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=1 -B build/
-          cmake --build build/ -j $(nproc)
-          rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
-          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-          ../scripts/download_hadoop.sh hadoop-bin
-          ../scripts/download_zk.sh zookeeper-bin
-          rm -rf hadoop-bin/share/doc
-          rm -rf zookeeper-bin/docs
-      - name: Compilation
-        run: |
-          ccache -p
-          ccache -z
-          ./run.sh build --test --sanitizer address --skip_thirdparty 
--disable_gperf -j $(nproc)
-          ccache -s
-      - name: Clear Build Files
-        run: |
-          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
-      - name: Tar files
-        run: |
-          mv thirdparty/hadoop-bin ./
-          mv thirdparty/zookeeper-bin ./
-          rm -rf thirdparty
-          tar -zcvhf release_address_builder.tar build/latest/output 
build/latest/bin build/latest/src/server/test/config.ini hadoop-bin 
zookeeper-bin
-      - name: Upload Artifact
-        uses: actions/upload-artifact@v3
-        with:
-          name: release_address_artifact_${{ github.sha }}
-          path: release_address_builder.tar
+      - uses: "./.github/actions/rebuild_thirdparty_if_needed"
+      - uses: "./.github/actions/build_pegasus"
+      - uses: "./.github/actions/upload_artifact"
 
   test_ASAN:
     name: Test ASAN
@@ -383,29 +226,15 @@ jobs:
 #          - throttle_test
     needs: build_ASAN
     runs-on: ubuntu-latest
+    env:
+      ARTIFACT_NAME: release_address
     container:
       image: apache/pegasus:thirdparties-bin-test-ubuntu2204-${{ 
github.base_ref }}
       options: --cap-add=SYS_PTRACE
     steps:
       - uses: actions/checkout@v3
-      - name: Unpack prebuilt third-parties
-        run: |
-          unzip /root/thirdparties-bin.zip -d ./thirdparty
-          rm -f /root/thirdparties-bin.zip
-      - name: Download Artifact
-        uses: actions/download-artifact@v3
-        with:
-          name: release_address_artifact_${{ github.sha }}
-          path: .
-      - name: Tar files
-        run: |
-          tar -zxvf release_address_builder.tar
-          rm -f release_address_builder.tar
-      - name: Unit Testing
-        run: |
-          export 
LD_LIBRARY_PATH=`pwd`/thirdparty/output/lib:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server
-          ulimit -s unlimited
-          ./run.sh test --onebox_opts "$ONEBOX_OPTS" --test_opts "$TEST_OPTS" 
-m ${{ matrix.test_module }}
+      - uses: "./.github/actions/download_artifact"
+      - uses: "./.github/actions/run_server_tests"
 
 # TODO(yingchun): Build and test UBSAN version would cost a very long time, we 
will run these tests
 #                 when we are going to release a stable version. So we disable 
them in regular CI
@@ -414,72 +243,17 @@ jobs:
 #    name: Build UBSAN
 #    needs: cpp_clang_format_linter
 #    runs-on: ubuntu-latest
+#    env:
+#      USE_JEMALLOC: OFF
+#      ARTIFACT_NAME: release_undefined
+#      BUILD_OPTIONS: --sanitizer undefined --disable_gperf --test
 #    container:
 #      image: apache/pegasus:thirdparties-bin-test-ubuntu2204-${{ 
github.base_ref }}
 #    steps:
 #      - uses: actions/checkout@v3
-#      - name: Setup cache
-#        uses: actions/cache@v3
-#        with:
-#          path: |
-#            /github/home/.ccache
-#          key: ubsan_ccache
-#      - name: Free Disk Space (Ubuntu)
-#        run: |
-#          .github/workflows/free_disk_space.sh
-#      - uses: dorny/paths-filter@v2
-#        id: changes
-#        with:
-#          filters: |
-#            thirdparty:
-#              - '.github/workflows/thirdparty-regular-push.yml'
-#              - 'docker/thirdparties-src/**'
-#              - 'docker/thirdparties-bin/**'
-#              - 'thirdparty/**'
-#      - name: Unpack prebuilt third-parties
-#        if: steps.changes.outputs.thirdparty == 'false'
-#        run: |
-#          rm -f /root/thirdparties-src.zip
-#          unzip /root/thirdparties-bin.zip -d ./thirdparty
-#          rm -f /root/thirdparties-bin.zip
-#          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-#          rm -rf ./thirdparty/hadoop-bin/share/doc
-#          rm -rf ./thirdparty/zookeeper-bin/docs
-#      - name: Rebuild third-parties
-#        if: steps.changes.outputs.thirdparty == 'true'
-#        working-directory: thirdparty
-#        # Build thirdparties and leave some necessary libraries and source
-#        run: |
-#          rm -f /root/thirdparties-src.zip
-#          mkdir build
-#          cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=1 -B build/
-#          cmake --build build/ -j $(nproc)
-#          rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
-#          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-#          ../scripts/download_hadoop.sh hadoop-bin
-#          ../scripts/download_zk.sh zookeeper-bin
-#          rm -rf hadoop-bin/share/doc
-#          rm -rf zookeeper-bin/docs
-#      - name: Compilation
-#        run: |
-#          ccache -p
-#          ccache -z
-#          ./run.sh build --test --sanitizer undefined --skip_thirdparty 
--disable_gperf -j $(nproc)
-#          ccache -s
-#      - name: Clear Build Files
-#        run: |
-#          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
-#      - name: Tar files
-#        run: |
-#          mv thirdparty/hadoop-bin ./
-#          mv thirdparty/zookeeper-bin ./
-#          rm -rf thirdparty
-#          tar -zcvhf release_undefined_builder.tar build/latest/output 
build/latest/bin build/latest/src/server/test/config.ini hadoop-bin 
zookeeper-bin
-#      - name: Upload Artifact
-#        uses: actions/upload-artifact@v3
-#        with:
-#          name: release_undefined_artifact_${{ github.sha }}
-#          path: release_undefined_builder.tar
+#      - uses: "./.github/actions/rebuild_thirdparty_if_needed"
+#      - uses: "./.github/actions/build_pegasus"
+#      - uses: "./.github/actions/upload_artifact"
 #
 #  test_UBSAN:
 #    name: Test UBSAN
@@ -527,112 +301,32 @@ jobs:
 #          - throttle_test
 #    needs: build_UBSAN
 #    runs-on: ubuntu-latest
+#    env:
+#      ARTIFACT_NAME: release_undefined
 #    container:
 #      image: apache/pegasus:thirdparties-bin-test-ubuntu2204-${{ 
github.base_ref }}
 #      options: --cap-add=SYS_PTRACE
 #    steps:
 #      - uses: actions/checkout@v3
-#      - name: Free Disk Space (Ubuntu)
-#        run: |
-#          .github/workflows/free_disk_space.sh
-#      - name: Unpack prebuilt third-parties
-#        run: |
-#          unzip /root/thirdparties-bin.zip -d ./thirdparty
-#          rm -f /root/thirdparties-bin.zip
-#      - name: Download Artifact
-#        uses: actions/download-artifact@v3
-#        with:
-#          name: release_undefined_artifact_${{ github.sha }}
-#          path: .
-#      - name: Tar files
-#        run: |
-#          tar -zxvf release_undefined_builder.tar
-#          rm -f release_undefined_builder.tar
-#      - name: Unit Testing
-#        run: |
-#          export 
LD_LIBRARY_PATH=`pwd`/thirdparty/output/lib:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server
-#          ulimit -s unlimited
-#          ./run.sh test --onebox_opts "$ONEBOX_OPTS" --test_opts "$TEST_OPTS" 
-m ${{ matrix.test_module }}
+#      - uses: "./.github/actions/download_artifact"
+#      - uses: "./.github/actions/run_server_tests"
 
   build_with_jemalloc:
     name: Build with jemalloc
     needs: cpp_clang_format_linter
     runs-on: ubuntu-latest
+    env:
+      USE_JEMALLOC: ON
+      ARTIFACT_NAME: release_jemalloc
+      BUILD_OPTIONS: -t release --use_jemalloc --test
     container:
       image: apache/pegasus:thirdparties-bin-test-jemallc-ubuntu2204-${{ 
github.base_ref }}
     steps:
       - uses: actions/checkout@v3
-      - name: Setup cache
-        uses: actions/cache@v3
-        with:
-          path: |
-            /github/home/.ccache
-          key: jemalloc_ccache
-      - name: Free Disk Space (Ubuntu)
-        run: |
-          .github/workflows/free_disk_space.sh
-      - uses: dorny/paths-filter@v2
-        id: changes
-        with:
-          filters: |
-            thirdparty:
-              - '.github/workflows/thirdparty-regular-push.yml'
-              - 'docker/thirdparties-src/**'
-              - 'docker/thirdparties-bin/**'
-              - 'thirdparty/**'
-      - name: Unpack prebuilt third-parties
-        if: steps.changes.outputs.thirdparty == 'false'
-        run: |
-          rm -f /root/thirdparties-src.zip
-          unzip /root/thirdparties-bin.zip -d ./thirdparty
-          rm -f /root/thirdparties-bin.zip
-          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-          rm -rf ./thirdparty/hadoop-bin/share/doc
-          rm -rf ./thirdparty/zookeeper-bin/docs
-      - name: Rebuild third-parties
-        if: steps.changes.outputs.thirdparty == 'true'
-        working-directory: thirdparty
-        # Build thirdparties and leave some necessary libraries and source
-        run: |
-          rm -f /root/thirdparties-src.zip
-          mkdir build
-          cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=1 
-DUSE_JEMALLOC=ON -B build/
-          cmake --build build/ -j $(nproc)
-          rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
-          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-          ../scripts/download_hadoop.sh hadoop-bin
-          ../scripts/download_zk.sh zookeeper-bin
-          rm -rf hadoop-bin/share/doc
-          rm -rf zookeeper-bin/docs
-      - name: Compilation
-        # TODO(yingchun): Append "-m dsn_utils_tests" to the command if not 
needed to pack server or tools, for example, the dependencies are static linked.
-        run: |
-          ccache -p
-          ccache -z
-          ./run.sh build --test --skip_thirdparty -j $(nproc) -t release 
--use_jemalloc
-          ccache -s
-      - name: Clear Build Files
-        run: |
-          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
-      - name: Pack Server
-        run: |
-          ./run.sh pack_server -j
-          rm -rf pegasus-server-*
-      - name: Pack Tools
-        run: |
-          ./run.sh pack_tools -j
-          rm -rf pegasus-tools-*
-      - name: Tar files
-        run: |
-          mv thirdparty/hadoop-bin ./
-          mv thirdparty/zookeeper-bin ./
-          rm -rf thirdparty
-          tar -zcvhf release_jemalloc_builder.tar build/latest/output 
build/latest/bin build/latest/src/server/test/config.ini hadoop-bin 
zookeeper-bin
-      - name: Upload Artifact
-        uses: actions/upload-artifact@v3
-        with:
-          name: release_jemalloc_artifact_${{ github.sha }}
-          path: release_jemalloc_builder.tar
+      - uses: "./.github/actions/rebuild_thirdparty_if_needed"
+      # TODO(yingchun): Append "-m dsn_utils_tests" to the command if not 
needed to pack server or tools, for example, the dependencies are static linked.
+      - uses: "./.github/actions/build_pegasus"
+      - uses: "./.github/actions/upload_artifact"
 
   test_with_jemalloc:
     name: Test with jemallc
@@ -643,29 +337,15 @@ jobs:
           - dsn_utils_tests
     needs: build_with_jemalloc
     runs-on: ubuntu-latest
+    env:
+      ARTIFACT_NAME: release_jemalloc
     container:
       image: apache/pegasus:thirdparties-bin-test-jemallc-ubuntu2204-${{ 
github.base_ref }}
       options: --cap-add=SYS_PTRACE
     steps:
       - uses: actions/checkout@v3
-      - name: Unpack prebuilt third-parties
-        run: |
-          unzip /root/thirdparties-bin.zip -d ./thirdparty
-          rm -f /root/thirdparties-bin.zip
-      - name: Download Artifact
-        uses: actions/download-artifact@v3
-        with:
-          name: release_jemalloc_artifact_${{ github.sha }}
-          path: .
-      - name: Tar files
-        run: |
-          tar -zxvf release_jemalloc_builder.tar
-          rm -f release_jemalloc_builder.tar
-      - name: Unit Testing
-        run: |
-          export 
LD_LIBRARY_PATH=`pwd`/thirdparty/output/lib:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server
-          ulimit -s unlimited
-          ./run.sh test --onebox_opts "$ONEBOX_OPTS" --test_opts "$TEST_OPTS" 
-m ${{ matrix.test_module }}
+      - uses: "./.github/actions/download_artifact"
+      - uses: "./.github/actions/run_server_tests"
 
   build_pegasus_on_macos:
     name: macOS
diff --git a/.github/workflows/lint_and_test_go-client.yml 
b/.github/workflows/lint_and_test_go-client.yml
index 2b660a022..011ae97c3 100644
--- a/.github/workflows/lint_and_test_go-client.yml
+++ b/.github/workflows/lint_and_test_go-client.yml
@@ -29,6 +29,7 @@ on:
       - ci-test # testing branch for github action
       - '*dev'
     paths:
+      - .github/workflows/lint_and_test_go-client.yml
       - go-client/**
 
   # for manually triggering workflow
diff --git a/.github/workflows/test_java-client.yml 
b/.github/workflows/lint_and_test_java-client.yml
similarity index 54%
rename from .github/workflows/test_java-client.yml
rename to .github/workflows/lint_and_test_java-client.yml
index a3930b963..dfe747bd8 100644
--- a/.github/workflows/test_java-client.yml
+++ b/.github/workflows/lint_and_test_java-client.yml
@@ -15,7 +15,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
 
 name: Test - java client
 on:
@@ -26,6 +25,7 @@ on:
         - ci-test # testing branch for github action
         - '*dev'      # developing branch
     paths:
+      - .github/workflows/lint_and_test_java-client.yml
       - java-client/**
 
   workflow_dispatch:
@@ -36,7 +36,7 @@ defaults:
 
 jobs:
   spotless:
-    name: spotless
+    name: Spotless
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
@@ -46,10 +46,29 @@ jobs:
       - name: spotless
         working-directory: ./java-client
         run: mvn spotless:check
-  test:
-    name: test
+
+  build_server:
+    name: Build server
     needs: spotless
     runs-on: ubuntu-latest
+    env:
+      USE_JEMALLOC: OFF
+      ARTIFACT_NAME: release_for_java_client
+      BUILD_OPTIONS: -t release
+    container:
+      image: apache/pegasus:thirdparties-bin-test-ubuntu2204-${{ 
github.base_ref }}
+    steps:
+      - uses: actions/checkout@v3
+      - uses: "./.github/actions/rebuild_thirdparty_if_needed"
+      - uses: "./.github/actions/build_pegasus"
+      - uses: "./.github/actions/upload_artifact"
+
+  test_java_client:
+    name: Test Java client
+    needs: build_server
+    runs-on: ubuntu-latest
+    env:
+      ARTIFACT_NAME: release_for_java_client
     container:
       image: apache/pegasus:thirdparties-bin-test-ubuntu2204-${{ 
github.base_ref }}
     strategy:
@@ -64,52 +83,10 @@ jobs:
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
           restore-keys: |
             ${{ runner.os }}-maven-
-      - name: Free Disk Space (Ubuntu)
-        run: |
-          .github/workflows/free_disk_space.sh
-      - uses: dorny/paths-filter@v2
-        id: changes
-        with:
-          filters: |
-            thirdparty:
-              - '.github/workflows/thirdparty-regular-push.yml'
-              - 'docker/thirdparties-src/**'
-              - 'docker/thirdparties-bin/**'
-              - 'thirdparty/**'
-      - name: Unpack prebuilt third-parties
-        if: steps.changes.outputs.thirdparty == 'false'
-        run: |
-          rm -f /root/thirdparties-src.zip
-          unzip /root/thirdparties-bin.zip -d ./thirdparty
-          rm -f /root/thirdparties-bin.zip
-          find ./thirdparty -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-          rm -rf ./thirdparty/hadoop-bin/share/doc
-          rm -rf ./thirdparty/zookeeper-bin/docs
-      # TODO(yingchun): Build a docker image with prebuilt server binaries, we 
can use them directly without building server binaries if no server changes.
-      - name: Rebuild third-parties
-        if: steps.changes.outputs.thirdparty == 'true'
-        working-directory: thirdparty
-        # Build thirdparties and leave some necessary libraries and source
-        run: |
-          rm -f /root/thirdparties-src.zip
-          mkdir build
-          cmake -DCMAKE_BUILD_TYPE=Release -DROCKSDB_PORTABLE=1 -B build/
-          cmake --build build/ -j $(nproc)
-          rm -rf build/Build build/Download/[a-y]* build/Source/[a-g]* 
build/Source/[i-q]* build/Source/[s-z]*
-          find ./ -name '*CMakeFiles*' -type d -exec rm -rf "{}" +
-          ../scripts/download_hadoop.sh hadoop-bin
-          ../scripts/download_zk.sh zookeeper-bin
-          rm -rf hadoop-bin/share/doc
-          rm -rf zookeeper-bin/docs
-      - name: Build Pegasus server
-        run: |
-          ./run.sh build --skip_thirdparty -j $(nproc) -t release
-      - name: Clear build temporary files
-        run: |
-          find ./build/latest/src/ -name '*CMakeFiles*' -type d -exec rm -rf 
"{}" +
       - uses: actions/setup-java@v1
         with:
           java-version: ${{ matrix.java }}
+      - uses: "./.github/actions/download_artifact"
       - name: Start Pegasus cluster
         run: |
           apt-get update
diff --git a/.github/workflows/lint_and_test_pegic.yml 
b/.github/workflows/lint_and_test_pegic.yml
index 09b85fa92..3788b4412 100644
--- a/.github/workflows/lint_and_test_pegic.yml
+++ b/.github/workflows/lint_and_test_pegic.yml
@@ -29,6 +29,7 @@ on:
       - ci-test # testing branch for github action
       - '*dev'
     paths:
+      - .github/workflows/lint_and_test_pegic.yml
       - pegic/**
 
   # for manually triggering workflow
diff --git a/.github/workflows/lint_and_test_pegic_always_pass.yml 
b/.github/workflows/lint_and_test_pegic_always_pass.yml
index f4ab49298..2a9fb58d9 100644
--- a/.github/workflows/lint_and_test_pegic_always_pass.yml
+++ b/.github/workflows/lint_and_test_pegic_always_pass.yml
@@ -29,6 +29,7 @@ on:
       - ci-test # testing branch for github action
       - '*dev'
     paths-ignore:
+      - .github/workflows/lint_and_test_pegic_always_pass.yml
       - pegic/**
 
   # for manually triggering workflow
diff --git a/.github/workflows/test_nodejs-client.yml 
b/.github/workflows/test_nodejs-client.yml
index a3d7005c1..b24065ec9 100644
--- a/.github/workflows/test_nodejs-client.yml
+++ b/.github/workflows/test_nodejs-client.yml
@@ -26,6 +26,7 @@ on:
         - ci-test # testing branch for github action
         - '*dev'      # developing branch
     paths:
+      - .github/workflows/test_nodejs-client.yml
       - nodejs-client/**
 
   workflow_dispatch:
diff --git a/.github/workflows/test_python-client.yml 
b/.github/workflows/test_python-client.yml
index 623c0cfc8..bdef9d221 100644
--- a/.github/workflows/test_python-client.yml
+++ b/.github/workflows/test_python-client.yml
@@ -26,6 +26,7 @@ on:
         - ci-test # testing branch for github action
         - '*dev'      # developing branch
     paths:
+      - .github/workflows/test_python-client.yml
       - python-client/**
 
   workflow_dispatch:
diff --git a/.github/workflows/test_scala-client.yml 
b/.github/workflows/test_scala-client.yml
index 1f9eb044a..047e55042 100644
--- a/.github/workflows/test_scala-client.yml
+++ b/.github/workflows/test_scala-client.yml
@@ -15,7 +15,6 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
 
 name: Test - scala client
 on:
@@ -24,7 +23,8 @@ on:
         - master
         - 'v[0-9]+.*' # release branch
     paths:
-        - scala-client/**
+      - .github/workflows/test_scala-client.yml
+      - scala-client/**
 
   workflow_dispatch:
 
diff --git a/run.sh b/run.sh
index c73d3e529..dfae368f4 100755
--- a/run.sh
+++ b/run.sh
@@ -455,6 +455,7 @@ function run_test()
         mkdir -p $REPORT_DIR
     fi
 
+    # Run all tests if none specified.
     if [ "$test_modules" == "" ]; then
         test_modules=$(IFS=,; echo "${all_tests[*]}")
     fi
@@ -462,7 +463,7 @@ function run_test()
 
     for module in `echo $test_modules | sed 's/,/ /g'`; do
         echo "====================== run $module =========================="
-        # restart onebox when test pegasus
+        # The tests which need start onebox.
         local need_onebox_tests=(
           backup_restore_test
           base_api_test
@@ -475,11 +476,14 @@ function run_test()
           restore_test
           throttle_test
         )
+        # Restart onebox if needed.
         if [[ "${need_onebox_tests[@]}" =~ "${module}" ]]; then
+            # Clean up onebox at first.
             run_clear_onebox
-            m_count=3
+            master_count=3
+            # Update options if needed, this should be done before starting 
onebox to make new options take effect.
             if [ "${module}" == "recovery_test" ]; then
-                m_count=1
+                master_count=1
                 
opts="meta_state_service_type=meta_state_service_simple,distributed_lock_service_type=distributed_lock_service_simple"
             fi
             if [ "${module}" == "backup_restore_test" ]; then
@@ -488,24 +492,30 @@ function run_test()
             if [ "${module}" == "restore_test" ]; then
                 
opts="cold_backup_disabled=false,cold_backup_checkpoint_reserve_minutes=0,cold_backup_root=onebox"
             fi
+            # Append onebox_opts if needed.
             [ -z ${onebox_opts} ] || opts="${opts},${onebox_opts}"
-            if ! run_start_onebox -m ${m_count} -w -c --opts ${opts}; then
+            # Start onebox.
+            if ! run_start_onebox -m ${master_count} -w -c --opts ${opts}; then
                 echo "ERROR: unable to continue on testing because starting 
onebox failed"
                 exit 1
             fi
             # TODO(yingchun): remove it?
             sed -i "s/@LOCAL_HOSTNAME@/${LOCAL_HOSTNAME}/g"  
${BUILD_LATEST_DIR}/src/server/test/config.ini
         else
+            # Restart ZK in what ever case.
             run_stop_zk
             run_start_zk
         fi
+
+        # Run server test.
         pushd ${BUILD_LATEST_DIR}/bin/${module}
         REPORT_DIR=${REPORT_DIR} TEST_BIN=${module} TEST_OPTS=${test_opts} 
./run.sh
         if [ $? != 0 ]; then
             echo "run test \"$module\" in `pwd` failed"
             exit 1
         fi
-        # clear onebox if needed
+
+        # Clear onebox if needed.
         if [[ "${need_onebox_tests[@]}"  =~ "${test_modules}" ]]; then
             if [ "$clear_flags" == "1" ]; then
                 run_clear_onebox
@@ -519,6 +529,7 @@ function run_test()
     used_time=$((finish_time-start_time))
     echo "Test elapsed time: $((used_time/60))m $((used_time%60))s"
 
+    # TODO(yingchun): make sure if gcov can be ran normally.
     if [ "$enable_gcov" == "yes" ]; then
         echo "Generating gcov report..."
         cd $ROOT


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to