From ea41bb9019a652bb62b933c3d683eeadca052d08 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Mon, 19 Aug 2024 21:52:34 +0800
Subject: [PATCH 01/15] fix slurm

---
 .github/workflows/python.yaml | 242 +++++++++++++++++-----------------
 CI/slurm/slurm.sh             |   2 +-
 2 files changed, 122 insertions(+), 122 deletions(-)

diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml
index 77d3266f8..a6903fadf 100644
--- a/.github/workflows/python.yaml
+++ b/.github/workflows/python.yaml
@@ -62,7 +62,7 @@ jobs:
         run: cd python/xorbits/web/ui && ./node_modules/.bin/prettier --check .
 
   build_test_job:
-    if: github.repository == 'xorbitsai/xorbits'
+    # if: github.repository == 'xorbitsai/xorbits'
     runs-on: ${{ matrix.os }}
     needs: lint
     env:
@@ -278,126 +278,126 @@ jobs:
         make html_zh_cn
       working-directory: ./doc
 
-    - name: Test with pytest
-      if: ${{ matrix.module != 'doc-build' }}
-      env:
-        MODULE: ${{ matrix.module }}
-      run: |
-        if [[ "$MODULE" == "xorbits" ]]; then
-          pytest --ignore xorbits/_mars/ --ignore xorbits/xgboost --ignore xorbits/lightgbm \
-            --ignore xorbits/datasets --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits
-        elif [[ "$MODULE" == "mars-core" ]]; then
-          pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
-            --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
-            --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
-        elif [[ "$MODULE" == "kubernetes" ]]; then
-          pytest --ignore xorbits/_mars/ --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
-        elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
-          pytest --ignore xorbits/_mars/ --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
-        elif [[ "$MODULE" == "slurm" ]]; then
-          docker exec c1 /bin/bash -c "pip install xorbits"
-          docker exec c2 /bin/bash -c "pip install xorbits"
-          docker exec slurmctld /bin/bash -c \
-          "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
-        elif [[ "$MODULE" == "hadoop" ]]; then
-          export WITH_HADOOP="1"
-          export HADOOP_HOME="/usr/local/hadoop"
-          export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
-          export HADOOP_INSTALL=$HADOOP_HOME
-          export HADOOP_MAPRED_HOME=$HADOOP_HOME
-          export HADOOP_COMMON_HOME=$HADOOP_HOME
-          export HADOOP_HDFS_HOME=$HADOOP_HOME
-          export YARN_HOME=$HADOOP_HOME
-          export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
-          export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
-        elif [[ "$MODULE" == "vineyard" ]]; then
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
-            xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
-            xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
-        elif [[ "$MODULE" == "external-storage" ]]; then
-          export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
-          export JUICEFS_HOME="/usr/local/bin/juicefs"
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-        elif [[ "$MODULE" == "_mars/learn" ]]; then
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-            xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
-        elif [[ "$MODULE" == "learn" ]]; then
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-            xorbits/xgboost xorbits/lightgbm
-        elif [ "$MODULE" == "ray-deploy" ]; then
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-            --log-level=DEBUG --timeout=200 xorbits/_mars --ignore=xorbits/_mars/deploy/oscar/ -m ray
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-            --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray.py -m ray
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-            --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_load_modules.py -m ray
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-            --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_cluster_standalone.py -m ray
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-            --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_client.py -m ray
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-            --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_fault_injection.py -m ray
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-            --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_scheduling.py -m ray
-        elif [ "$MODULE" == "ray-dag" ]; then
-          export MARS_CI_BACKEND=ray
-          export RAY_idle_worker_killing_time_threshold_ms=60000
-          pytest --cov-config=setup.cfg --cov-report=xml --durations=0 --timeout=500 xorbits/_mars/dataframe \
-            -v -s -m "not skip_ray_dag" --ignore=xorbits/_mars/dataframe/contrib/raydataset
-          pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-            --timeout=500 xorbits/_mars/dataframe/contrib/raydataset -v -s -m "not skip_ray_dag"
-          pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-            --timeout=500 xorbits/_mars/tensor -v -s -m "not skip_ray_dag"
-          pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-            --timeout=500 xorbits/_mars/learn --ignore xorbits/_mars/learn/contrib \
-            --ignore xorbits/_mars/learn/utils/tests/test_collect_ports.py -m "not skip_ray_dag"
-          pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-            --timeout=200 xorbits -v -s -m ray_dag
-          pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-            --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag.py
-          pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-            --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag_failover.py
-          pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-            --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag_oscar.py -m ray
-        elif [ "$MODULE" == "gpu" ]; then
-          pytest -m cuda --gpu --ignore xorbits/datasets --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits
-        elif [ "$MODULE" == "jax" ]; then
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
-        elif [ "$MODULE" == "datasets" ]; then
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets
-        elif [ "$MODULE" == "compatibility" ]; then
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
-        else
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
-        fi
-      working-directory: ./python
+    # - name: Test with pytest
+    #   if: ${{ matrix.module != 'doc-build' }}
+    #   env:
+    #     MODULE: ${{ matrix.module }}
+    #   run: |
+    #     if [[ "$MODULE" == "xorbits" ]]; then
+    #       pytest --ignore xorbits/_mars/ --ignore xorbits/xgboost --ignore xorbits/lightgbm \
+    #         --ignore xorbits/datasets --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits
+    #     elif [[ "$MODULE" == "mars-core" ]]; then
+    #       pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
+    #         --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
+    #         --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
+    #     elif [[ "$MODULE" == "kubernetes" ]]; then
+    #       pytest --ignore xorbits/_mars/ --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
+    #     elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
+    #       pytest --ignore xorbits/_mars/ --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
+    #     elif [[ "$MODULE" == "slurm" ]]; then
+    #       docker exec c1 /bin/bash -c "pip install xorbits"
+    #       docker exec c2 /bin/bash -c "pip install xorbits"
+    #       docker exec slurmctld /bin/bash -c \
+    #       "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
+    #     elif [[ "$MODULE" == "hadoop" ]]; then
+    #       export WITH_HADOOP="1"
+    #       export HADOOP_HOME="/usr/local/hadoop"
+    #       export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
+    #       export HADOOP_INSTALL=$HADOOP_HOME
+    #       export HADOOP_MAPRED_HOME=$HADOOP_HOME
+    #       export HADOOP_COMMON_HOME=$HADOOP_HOME
+    #       export HADOOP_HDFS_HOME=$HADOOP_HOME
+    #       export YARN_HOME=$HADOOP_HOME
+    #       export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
+    #       export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
+    #     elif [[ "$MODULE" == "vineyard" ]]; then
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
+    #         xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
+    #         xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
+    #     elif [[ "$MODULE" == "external-storage" ]]; then
+    #       export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
+    #       export JUICEFS_HOME="/usr/local/bin/juicefs"
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+    #     elif [[ "$MODULE" == "_mars/learn" ]]; then
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+    #         xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
+    #     elif [[ "$MODULE" == "learn" ]]; then
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+    #         xorbits/xgboost xorbits/lightgbm
+    #     elif [ "$MODULE" == "ray-deploy" ]; then
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
+    #         --log-level=DEBUG --timeout=200 xorbits/_mars --ignore=xorbits/_mars/deploy/oscar/ -m ray
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
+    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray.py -m ray
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
+    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_load_modules.py -m ray
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
+    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_cluster_standalone.py -m ray
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
+    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_client.py -m ray
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
+    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_fault_injection.py -m ray
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
+    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_scheduling.py -m ray
+    #     elif [ "$MODULE" == "ray-dag" ]; then
+    #       export MARS_CI_BACKEND=ray
+    #       export RAY_idle_worker_killing_time_threshold_ms=60000
+    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 --timeout=500 xorbits/_mars/dataframe \
+    #         -v -s -m "not skip_ray_dag" --ignore=xorbits/_mars/dataframe/contrib/raydataset
+    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
+    #         --timeout=500 xorbits/_mars/dataframe/contrib/raydataset -v -s -m "not skip_ray_dag"
+    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
+    #         --timeout=500 xorbits/_mars/tensor -v -s -m "not skip_ray_dag"
+    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
+    #         --timeout=500 xorbits/_mars/learn --ignore xorbits/_mars/learn/contrib \
+    #         --ignore xorbits/_mars/learn/utils/tests/test_collect_ports.py -m "not skip_ray_dag"
+    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
+    #         --timeout=200 xorbits -v -s -m ray_dag
+    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
+    #         --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag.py
+    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
+    #         --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag_failover.py
+    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
+    #         --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag_oscar.py -m ray
+    #     elif [ "$MODULE" == "gpu" ]; then
+    #       pytest -m cuda --gpu --ignore xorbits/datasets --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits
+    #     elif [ "$MODULE" == "jax" ]; then
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
+    #     elif [ "$MODULE" == "datasets" ]; then
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets
+    #     elif [ "$MODULE" == "compatibility" ]; then
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
+    #     else
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
+    #     fi
+    #   working-directory: ./python
 
 
     - name: Cleanup on slurm
diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index 7386f6fa8..b40f61563 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -15,7 +15,7 @@
 
 function jobqueue_before_install {
     docker version
-    docker-compose version
+    docker compose version
 
     # start slurm cluster
     cd ./CI/slurm

From bfb623f8fb197952e1c7fd9620f5b01fe5f3d659 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Mon, 19 Aug 2024 22:06:59 +0800
Subject: [PATCH 02/15] replace docker-compose with docker compose

---
 CI/slurm/slurm.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index b40f61563..fea773b2b 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -19,7 +19,7 @@ function jobqueue_before_install {
 
     # start slurm cluster
     cd ./CI/slurm
-    docker-compose pull
+    docker compose pull
     ./start-slurm.sh
     cd -
 

From 0a2195f72ee6ea9f3574ec60f44e48672a8cd372 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Mon, 19 Aug 2024 22:24:53 +0800
Subject: [PATCH 03/15] replace again

---
 CI/slurm/register_cluster.sh | 2 +-
 CI/slurm/start-slurm.sh      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/CI/slurm/register_cluster.sh b/CI/slurm/register_cluster.sh
index ef3d4d0fb..e497eaa5d 100755
--- a/CI/slurm/register_cluster.sh
+++ b/CI/slurm/register_cluster.sh
@@ -2,4 +2,4 @@
 set -e
 
 docker exec slurmctld bash -c "/usr/bin/sacctmgr --immediate add cluster name=linux" && \
-docker-compose restart slurmdbd slurmctld
+docker compose restart slurmdbd slurmctld
diff --git a/CI/slurm/start-slurm.sh b/CI/slurm/start-slurm.sh
index f1936b58a..fcfc35b21 100755
--- a/CI/slurm/start-slurm.sh
+++ b/CI/slurm/start-slurm.sh
@@ -12,7 +12,7 @@
 # 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.
-docker-compose up -d --no-build
+docker compose up -d --no-build
 
 while [ `./register_cluster.sh 2>&1 | grep "sacctmgr: error" | wc -l` -ne 0 ]
   do

From 8900e104ff5c5400551a15dc6b1a18144c4dfa26 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Mon, 19 Aug 2024 23:07:04 +0800
Subject: [PATCH 04/15] install psutil in docker image

---
 CI/slurm/slurm.sh | 1 +
 1 file changed, 1 insertion(+)

diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index fea773b2b..16a29252f 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -35,6 +35,7 @@ function show_network_interfaces {
     for c in slurmctld c1 c2; do
         echo '------------------------------------------------------------'
         echo docker container: $c
+        docker exec $c pip install psutil
         docker exec $c python -c 'import psutil; print(psutil.net_if_addrs().keys())'
         echo '------------------------------------------------------------'
     done

From 57ef739cb8e02daac44dea3d1223f70b5d66031c Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 00:02:52 +0800
Subject: [PATCH 05/15] custom Docker image for slurm

---
 CI/slurm/Dockerfile         | 3 ++-
 CI/slurm/docker-compose.yml | 8 ++++----
 CI/slurm/slurm.sh           | 3 ++-
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/CI/slurm/Dockerfile b/CI/slurm/Dockerfile
index 1a57e7ccf..f939e5f5a 100644
--- a/CI/slurm/Dockerfile
+++ b/CI/slurm/Dockerfile
@@ -1,2 +1,3 @@
 FROM daskdev/dask-jobqueue:slurm
-RUN pip install xorbits
+
+ENTRYPOINT ["conda", "run", "-n", "dask-jobqueue", "/bin/bash", "-c"]
diff --git a/CI/slurm/docker-compose.yml b/CI/slurm/docker-compose.yml
index 088f0e9e9..c8098b634 100644
--- a/CI/slurm/docker-compose.yml
+++ b/CI/slurm/docker-compose.yml
@@ -16,7 +16,7 @@ services:
       common-network:
 
   slurmdbd:
-    image: daskdev/dask-jobqueue:slurm
+    image: slurmbase
     build: .
     command: ["slurmdbd"]
     container_name: slurmdbd
@@ -33,7 +33,7 @@ services:
       common-network:
 
   slurmctld:
-    image: daskdev/dask-jobqueue:slurm
+    image: slurmbase
     build: .
     command: ["slurmctld"]
     container_name: slurmctld
@@ -58,7 +58,7 @@ services:
       - NET_ADMIN
 
   c1:
-    image: daskdev/dask-jobqueue:slurm
+    image: slurmbase
     build: .
     command: ["slurmd"]
     hostname: c1
@@ -81,7 +81,7 @@ services:
       - NET_ADMIN
 
   c2:
-    image: daskdev/dask-jobqueue:slurm
+    image: slurmbase
     build: .
     command: ["slurmd"]
     hostname: c2
diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index 16a29252f..982a76f58 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -19,11 +19,12 @@ function jobqueue_before_install {
 
     # start slurm cluster
     cd ./CI/slurm
+    docker build -t slurmbase .
     docker compose pull
     ./start-slurm.sh
     cd -
 
-    #Set shared space permissions
+    # set shared space permissions
     docker exec slurmctld /bin/bash -c "chmod -R 777 /shared_space"
 
     docker ps -a

From af870cefb7f6dfe8f00193f7aed4086ba42c10a3 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 00:21:53 +0800
Subject: [PATCH 06/15] fix error in build locally

---
 CI/slurm/Dockerfile         | 2 +-
 CI/slurm/docker-compose.yml | 4 ----
 2 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/CI/slurm/Dockerfile b/CI/slurm/Dockerfile
index f939e5f5a..a5fbd29b9 100644
--- a/CI/slurm/Dockerfile
+++ b/CI/slurm/Dockerfile
@@ -1,3 +1,3 @@
 FROM daskdev/dask-jobqueue:slurm
 
-ENTRYPOINT ["conda", "run", "-n", "dask-jobqueue", "/bin/bash", "-c"]
+ENTRYPOINT ["conda", "run", "-n", "dask-jobqueue"]
diff --git a/CI/slurm/docker-compose.yml b/CI/slurm/docker-compose.yml
index c8098b634..7c050f990 100644
--- a/CI/slurm/docker-compose.yml
+++ b/CI/slurm/docker-compose.yml
@@ -17,7 +17,6 @@ services:
 
   slurmdbd:
     image: slurmbase
-    build: .
     command: ["slurmdbd"]
     container_name: slurmdbd
     hostname: slurmdbd
@@ -34,7 +33,6 @@ services:
 
   slurmctld:
     image: slurmbase
-    build: .
     command: ["slurmctld"]
     container_name: slurmctld
     hostname: slurmctld
@@ -59,7 +57,6 @@ services:
 
   c1:
     image: slurmbase
-    build: .
     command: ["slurmd"]
     hostname: c1
     container_name: c1
@@ -82,7 +79,6 @@ services:
 
   c2:
     image: slurmbase
-    build: .
     command: ["slurmd"]
     hostname: c2
     container_name: c2

From 81c22934f518cbb6d74bf43e4b6829a8ca0d1abe Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 00:33:46 +0800
Subject: [PATCH 07/15] use build . instead of pulling image

---
 CI/slurm/docker-compose.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/CI/slurm/docker-compose.yml b/CI/slurm/docker-compose.yml
index 7c050f990..296473946 100644
--- a/CI/slurm/docker-compose.yml
+++ b/CI/slurm/docker-compose.yml
@@ -16,7 +16,7 @@ services:
       common-network:
 
   slurmdbd:
-    image: slurmbase
+    build: .
     command: ["slurmdbd"]
     container_name: slurmdbd
     hostname: slurmdbd
@@ -32,7 +32,7 @@ services:
       common-network:
 
   slurmctld:
-    image: slurmbase
+    build: .
     command: ["slurmctld"]
     container_name: slurmctld
     hostname: slurmctld
@@ -56,7 +56,7 @@ services:
       - NET_ADMIN
 
   c1:
-    image: slurmbase
+    build: .
     command: ["slurmd"]
     hostname: c1
     container_name: c1
@@ -78,7 +78,7 @@ services:
       - NET_ADMIN
 
   c2:
-    image: slurmbase
+    build: .
     command: ["slurmd"]
     hostname: c2
     container_name: c2

From 6653e998a5241491c699f59db1ea6fd325da08eb Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 17:33:28 +0800
Subject: [PATCH 08/15] activate conda

---
 CI/slurm/Dockerfile         | 3 +--
 CI/slurm/docker-compose.yml | 4 ++++
 CI/slurm/slurm.sh           | 8 ++++----
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/CI/slurm/Dockerfile b/CI/slurm/Dockerfile
index a5fbd29b9..3d29de1ed 100644
--- a/CI/slurm/Dockerfile
+++ b/CI/slurm/Dockerfile
@@ -1,3 +1,2 @@
 FROM daskdev/dask-jobqueue:slurm
-
-ENTRYPOINT ["conda", "run", "-n", "dask-jobqueue"]
+# RUN pip install xorbits
diff --git a/CI/slurm/docker-compose.yml b/CI/slurm/docker-compose.yml
index 296473946..088f0e9e9 100644
--- a/CI/slurm/docker-compose.yml
+++ b/CI/slurm/docker-compose.yml
@@ -16,6 +16,7 @@ services:
       common-network:
 
   slurmdbd:
+    image: daskdev/dask-jobqueue:slurm
     build: .
     command: ["slurmdbd"]
     container_name: slurmdbd
@@ -32,6 +33,7 @@ services:
       common-network:
 
   slurmctld:
+    image: daskdev/dask-jobqueue:slurm
     build: .
     command: ["slurmctld"]
     container_name: slurmctld
@@ -56,6 +58,7 @@ services:
       - NET_ADMIN
 
   c1:
+    image: daskdev/dask-jobqueue:slurm
     build: .
     command: ["slurmd"]
     hostname: c1
@@ -78,6 +81,7 @@ services:
       - NET_ADMIN
 
   c2:
+    image: daskdev/dask-jobqueue:slurm
     build: .
     command: ["slurmd"]
     hostname: c2
diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index 982a76f58..53bc42786 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -43,14 +43,14 @@ function show_network_interfaces {
 }
 
 function jobqueue_install {
-    docker exec slurmctld /bin/bash -c "cd xorbits/python/; pip install -e ."
+    docker exec slurmctld /bin/bash -c "source /opt/anaconda/bin/activate dask-jobqueue; cd xorbits/python/; pip install -e ."
 }
 
 function jobqueue_script {
-    docker exec c1 /bin/bash -c "pip install xorbits"
-    docker exec c2 /bin/bash -c "pip install xorbits"
+    docker exec c1 /bin/bash -c "source /opt/anaconda/bin/activate dask-jobqueue; pip install xorbits"
+    docker exec c2 /bin/bash -c "source /opt/anaconda/bin/activate dask-jobqueue; pip install xorbits"
     docker exec slurmctld /bin/bash -c \
-          "pytest --ignore xorbits/_mars/ --timeout=1500 \
+          "source /opt/anaconda/bin/activate dask-jobqueue; pytest --ignore xorbits/_mars/ --timeout=1500 \
             -W ignore::PendingDeprecationWarning \
             --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/slurm"
 }

From ccccf9e0031bed6c814a05dae58866c0451109f5 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 17:48:31 +0800
Subject: [PATCH 09/15] reset python.yaml

---
 .github/workflows/python.yaml | 277 +++++++++++++++++-----------------
 1 file changed, 140 insertions(+), 137 deletions(-)

diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml
index a6903fadf..94669fbfb 100644
--- a/.github/workflows/python.yaml
+++ b/.github/workflows/python.yaml
@@ -62,31 +62,31 @@ jobs:
         run: cd python/xorbits/web/ui && ./node_modules/.bin/prettier --check .
 
   build_test_job:
-    # if: github.repository == 'xorbitsai/xorbits'
+    if: github.repository == 'xorbitsai/xorbits'
     runs-on: ${{ matrix.os }}
     needs: lint
     env:
       CONDA_ENV: xorbits-test
+      SELF_HOST_PYTHON: /root/miniconda3/bin/python
+      SELF_HOST_CONDA: /root/miniconda3/bin/conda
     defaults:
       run:
         shell: bash -l {0}
     strategy:
       fail-fast: false
       matrix:
-        os: ["ubuntu-latest", "macos-latest", "windows-latest"]
+        os: ["ubuntu-latest", "macos-13", "windows-latest"]
         python-version: ["3.9", "3.10", "3.11"]
-        module: ["xorbits", "kubernetes"]
+        module: ["xorbits", "xorbits/numpy", "xorbits/pandas", "kubernetes"]
         exclude:
-          - { os: macos-latest, python-version: 3.10}
-          - { os: macos-latest, python-version: 3.9}
+          - { os: macos-13, python-version: 3.10}
+          - { os: macos-13, python-version: 3.9}
           - { os: windows-latest, python-version: 3.10}
           - { os: windows-latest, python-version: 3.9}
           - { os: windows-latest, module: kubernetes}
-          - { os: macos-latest, module: kubernetes}
+          - { os: macos-13, module: kubernetes}
         include:
           - { os: ubuntu-latest, module: _mars/dataframe, python-version: 3.9 }
-          - { os: ubuntu-latest, module: _mars/tensor, python-version: 3.9 }
-          - { os: ubuntu-latest, module: _mars/learn, python-version: 3.9 }
           - { os: ubuntu-latest, module: learn, python-version: 3.9 }
           - { os: ubuntu-latest, module: mars-core, python-version: 3.9 }
           - { os: ubuntu-20.04, module: hadoop, python-version: 3.9 }
@@ -94,7 +94,7 @@ jobs:
           - { os: ubuntu-latest, module: external-storage, python-version: 3.9 }
           - { os: ubuntu-latest, module: compatibility, python-version: 3.9 }
           - { os: ubuntu-latest, module: doc-build, python-version: 3.9 }
-          - { os: self-hosted, module: gpu, python-version: 3.9}
+          - { os: [self-hosted, gpu], module: gpu, python-version: 3.11}
           - { os: ubuntu-latest, module: jax, python-version: 3.9 }
           - { os: juicefs-ci, module: kubernetes-juicefs, python-version: 3.9 }
           - { os: ubuntu-latest, module: slurm, python-version: 3.9 }
@@ -126,11 +126,11 @@ jobs:
         minikube-version: 1.31.2
 
     - name: Install ucx dependencies
-      if: ${{ (matrix.module != 'gpu') && (matrix.os == 'ubuntu-latest') && (matrix.python-version != '3.11') }}
+      if: ${{ (matrix.module != 'gpu') && (matrix.os == 'ubuntu-latest')}}
       run: |
         conda install -c conda-forge -c rapidsai ucx-proc=*=cpu ucx ucx-py
     - name: Install libomp (macOS)
-      if: matrix.os == 'macos-latest'
+      if: ${{ matrix.os == 'macos-latest' || matrix.os == 'macos-13' }}
       run: brew install libomp
     - name: Install dependencies
       env:
@@ -139,9 +139,9 @@ jobs:
       if: ${{ matrix.module != 'gpu' }}
       run: |
         pip install -e "git+https://github.com/xorbitsai/xoscar.git@main#subdirectory=python&egg=xoscar"
-        pip install "numpy<2.0.0" scipy cython pyftpdlib coverage flaky "numexpr<2.8.5"
+        pip install "numpy<2.0.0" scipy cython pyftpdlib coverage flaky numexpr
 
-        if [[ "$MODULE" == "xorbits" ]]; then
+        if [[ "$MODULE" == "xorbits/pandas" ]]; then
           pip install openpyxl
         fi
         if [[ "$MODULE" == "mars-core" ]]; then
@@ -227,9 +227,6 @@ jobs:
         if [[ "$MODULE" == "learn" ]]; then
           pip install xgboost lightgbm
         fi
-        if [[ "$MODULE" == "ray-dag" ]] || [[ "$MODULE" == "ray-deploy" ]]; then
-          pip install "xgboost_ray<0.1.14" "protobuf<4" "sqlalchemy<2"
-        fi
         if [[ "$MODULE" == "compatibility" ]]; then
           # test if compatible with older versions
           pip install "pandas==1.5.3" "scipy<=1.10.1" "numpy<=1.24.1" "matplotlib<=3.7.0" "pyarrow<12.0.0" "sqlalchemy<2"
@@ -267,6 +264,10 @@ jobs:
     - name: Install on GPU
       if: ${{ matrix.module == 'gpu' }}
       run: |
+        pip install --extra-index-url=https://pypi.nvidia.com cudf-cu12==24.8.*
+        pip install ucx-py-cu12 cython "numpy>=1.14.0,<2.0.0" cloudpickle scikit-learn \
+          pyyaml psutil tornado sqlalchemy defusedxml tqdm uvloop coverage \
+          pytest pytest-cov pytest-timeout pytest-forked pytest-asyncio pytest-mock
         pip install -U xoscar
         python setup.py build_ext -i
       working-directory: ./python
@@ -278,126 +279,128 @@ jobs:
         make html_zh_cn
       working-directory: ./doc
 
-    # - name: Test with pytest
-    #   if: ${{ matrix.module != 'doc-build' }}
-    #   env:
-    #     MODULE: ${{ matrix.module }}
-    #   run: |
-    #     if [[ "$MODULE" == "xorbits" ]]; then
-    #       pytest --ignore xorbits/_mars/ --ignore xorbits/xgboost --ignore xorbits/lightgbm \
-    #         --ignore xorbits/datasets --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits
-    #     elif [[ "$MODULE" == "mars-core" ]]; then
-    #       pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
-    #         --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
-    #         --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
-    #     elif [[ "$MODULE" == "kubernetes" ]]; then
-    #       pytest --ignore xorbits/_mars/ --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
-    #     elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
-    #       pytest --ignore xorbits/_mars/ --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
-    #     elif [[ "$MODULE" == "slurm" ]]; then
-    #       docker exec c1 /bin/bash -c "pip install xorbits"
-    #       docker exec c2 /bin/bash -c "pip install xorbits"
-    #       docker exec slurmctld /bin/bash -c \
-    #       "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
-    #     elif [[ "$MODULE" == "hadoop" ]]; then
-    #       export WITH_HADOOP="1"
-    #       export HADOOP_HOME="/usr/local/hadoop"
-    #       export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
-    #       export HADOOP_INSTALL=$HADOOP_HOME
-    #       export HADOOP_MAPRED_HOME=$HADOOP_HOME
-    #       export HADOOP_COMMON_HOME=$HADOOP_HOME
-    #       export HADOOP_HDFS_HOME=$HADOOP_HOME
-    #       export YARN_HOME=$HADOOP_HOME
-    #       export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
-    #       export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
-    #     elif [[ "$MODULE" == "vineyard" ]]; then
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
-    #         xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
-    #         xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
-    #     elif [[ "$MODULE" == "external-storage" ]]; then
-    #       export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
-    #       export JUICEFS_HOME="/usr/local/bin/juicefs"
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-    #     elif [[ "$MODULE" == "_mars/learn" ]]; then
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-    #         xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
-    #     elif [[ "$MODULE" == "learn" ]]; then
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-    #         xorbits/xgboost xorbits/lightgbm
-    #     elif [ "$MODULE" == "ray-deploy" ]; then
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-    #         --log-level=DEBUG --timeout=200 xorbits/_mars --ignore=xorbits/_mars/deploy/oscar/ -m ray
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray.py -m ray
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_load_modules.py -m ray
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_cluster_standalone.py -m ray
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_client.py -m ray
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_fault_injection.py -m ray
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits --durations=0 \
-    #         --log-level=DEBUG --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_scheduling.py -m ray
-    #     elif [ "$MODULE" == "ray-dag" ]; then
-    #       export MARS_CI_BACKEND=ray
-    #       export RAY_idle_worker_killing_time_threshold_ms=60000
-    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 --timeout=500 xorbits/_mars/dataframe \
-    #         -v -s -m "not skip_ray_dag" --ignore=xorbits/_mars/dataframe/contrib/raydataset
-    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-    #         --timeout=500 xorbits/_mars/dataframe/contrib/raydataset -v -s -m "not skip_ray_dag"
-    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-    #         --timeout=500 xorbits/_mars/tensor -v -s -m "not skip_ray_dag"
-    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-    #         --timeout=500 xorbits/_mars/learn --ignore xorbits/_mars/learn/contrib \
-    #         --ignore xorbits/_mars/learn/utils/tests/test_collect_ports.py -m "not skip_ray_dag"
-    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-    #         --timeout=200 xorbits -v -s -m ray_dag
-    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-    #         --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag.py
-    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-    #         --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag_failover.py
-    #       pytest --cov-config=setup.cfg --cov-report=xml --durations=0 \
-    #         --timeout=200 xorbits/_mars/deploy/oscar/tests/test_ray_dag_oscar.py -m ray
-    #     elif [ "$MODULE" == "gpu" ]; then
-    #       pytest -m cuda --gpu --ignore xorbits/datasets --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits
-    #     elif [ "$MODULE" == "jax" ]; then
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
-    #     elif [ "$MODULE" == "datasets" ]; then
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets
-    #     elif [ "$MODULE" == "compatibility" ]; then
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
-    #     else
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
-    #     fi
-    #   working-directory: ./python
+    - name: Test with pytest
+      if: ${{ matrix.module != 'doc-build' && matrix.module != 'gpu' }}
+      env:
+        MODULE: ${{ matrix.module }}
+      run: |
+        if [[ "$MODULE" == "xorbits" ]]; then
+          pytest --ignore xorbits/_mars/ --ignore xorbits/pandas --ignore xorbits/numpy \
+            --ignore xorbits/xgboost --ignore xorbits/lightgbm --ignore xorbits/sklearn \
+            --ignore xorbits/datasets \
+            --ignore xorbits/core/tests/test_execution_exit.py \
+            --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            -k "not test_execution_with_process_exit_message" \
+            xorbits
+          # workaround: this case will hang, run it separately.
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            -k "test_execution_with_process_exit_message" \
+            xorbits/core/tests/test_execution.py
+        elif [[ "$MODULE" == "xorbits/pandas" ]]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml \
+            --cov=xorbits xorbits/pandas
+        elif [[ "$MODULE" == "xorbits/numpy" ]]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            -k "not test_numpy_fallback" \
+            xorbits/numpy
+          # workaround: this case will hang, run it separately.
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml \
+            --cov=xorbits \
+            -k "test_numpy_fallback" \
+            xorbits/numpy/numpy_adapters/tests/test_numpy_adapters.py
+        elif [[ "$MODULE" == "mars-core" ]]; then
+          pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
+            --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
+            --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
+        elif [[ "$MODULE" == "kubernetes" ]]; then
+          pytest --ignore xorbits/_mars/ --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
+        elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
+          pytest --ignore xorbits/_mars/ --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
+        elif [[ "$MODULE" == "slurm" ]]; then
+          docker exec c1 /bin/bash -c "pip install xorbits"
+          docker exec c2 /bin/bash -c "pip install xorbits"
+          docker exec slurmctld /bin/bash -c \
+          "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
+        elif [[ "$MODULE" == "hadoop" ]]; then
+          export WITH_HADOOP="1"
+          export HADOOP_HOME="/usr/local/hadoop"
+          export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
+          export HADOOP_INSTALL=$HADOOP_HOME
+          export HADOOP_MAPRED_HOME=$HADOOP_HOME
+          export HADOOP_COMMON_HOME=$HADOOP_HOME
+          export HADOOP_HDFS_HOME=$HADOOP_HOME
+          export YARN_HOME=$HADOOP_HOME
+          export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
+          export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
+        elif [[ "$MODULE" == "vineyard" ]]; then
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
+            xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
+            xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
+        elif [[ "$MODULE" == "external-storage" ]]; then
+          export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
+          export JUICEFS_HOME="/usr/local/bin/juicefs"
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+        elif [[ "$MODULE" == "_mars/learn" ]]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
+        elif [[ "$MODULE" == "learn" ]]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            xorbits/xgboost xorbits/lightgbm
+        elif [ "$MODULE" == "jax" ]; then
+          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
+          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
+        elif [ "$MODULE" == "datasets" ]; then
+          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/backends
+          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/tests
+        elif [ "$MODULE" == "compatibility" ]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
+        else
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
+        fi
+      working-directory: ./python
+    
+    - name: Test with pytest GPU
+      if: ${{ matrix.module == 'gpu' }}
+      run: |
+        pytest -m cuda --gpu --ignore xorbits/datasets \
+          --ignore xorbits/sklearn --ignore xorbits/_mars/learn \
+          --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+          xorbits
+      working-directory: ./python
 
 
     - name: Cleanup on slurm
@@ -407,7 +410,7 @@ jobs:
         jobqueue_after_script
 
     - name: Report coverage data
-      uses: codecov/codecov-action@v3
+      uses: codecov/codecov-action@v4
       with:
         working-directory: ./python
         flags: unittests

From 2444640b321986b72f384c4c9707fda4a33d7288 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 18:32:32 +0800
Subject: [PATCH 10/15] modify dockerfile

---
 .github/workflows/python.yaml | 2 +-
 CI/slurm/Dockerfile           | 7 ++++++-
 CI/slurm/slurm.sh             | 8 ++++----
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml
index 94669fbfb..91a549b50 100644
--- a/.github/workflows/python.yaml
+++ b/.github/workflows/python.yaml
@@ -62,7 +62,7 @@ jobs:
         run: cd python/xorbits/web/ui && ./node_modules/.bin/prettier --check .
 
   build_test_job:
-    if: github.repository == 'xorbitsai/xorbits'
+    # if: github.repository == 'xorbitsai/xorbits'
     runs-on: ${{ matrix.os }}
     needs: lint
     env:
diff --git a/CI/slurm/Dockerfile b/CI/slurm/Dockerfile
index 3d29de1ed..42ed93232 100644
--- a/CI/slurm/Dockerfile
+++ b/CI/slurm/Dockerfile
@@ -1,2 +1,7 @@
 FROM daskdev/dask-jobqueue:slurm
-# RUN pip install xorbits
+
+SHELL ["/bin/bash", "-c"]
+
+# activate conda env
+RUN echo "source /opt/anaconda/bin/activate dask-jobqueue" >> ~/.bashrc
+ENV PATH /opt/anaconda/envs/dask-jobqueue/bin:$PATH
diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index 53bc42786..982a76f58 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -43,14 +43,14 @@ function show_network_interfaces {
 }
 
 function jobqueue_install {
-    docker exec slurmctld /bin/bash -c "source /opt/anaconda/bin/activate dask-jobqueue; cd xorbits/python/; pip install -e ."
+    docker exec slurmctld /bin/bash -c "cd xorbits/python/; pip install -e ."
 }
 
 function jobqueue_script {
-    docker exec c1 /bin/bash -c "source /opt/anaconda/bin/activate dask-jobqueue; pip install xorbits"
-    docker exec c2 /bin/bash -c "source /opt/anaconda/bin/activate dask-jobqueue; pip install xorbits"
+    docker exec c1 /bin/bash -c "pip install xorbits"
+    docker exec c2 /bin/bash -c "pip install xorbits"
     docker exec slurmctld /bin/bash -c \
-          "source /opt/anaconda/bin/activate dask-jobqueue; pytest --ignore xorbits/_mars/ --timeout=1500 \
+          "pytest --ignore xorbits/_mars/ --timeout=1500 \
             -W ignore::PendingDeprecationWarning \
             --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/slurm"
 }

From e3a31f30a79687a5e94d5a91be4e136b85985975 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 18:37:42 +0800
Subject: [PATCH 11/15] modify python.yaml

---
 .github/workflows/python.yaml | 170 +++++++++++++++++-----------------
 1 file changed, 85 insertions(+), 85 deletions(-)

diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml
index 91a549b50..973834bad 100644
--- a/.github/workflows/python.yaml
+++ b/.github/workflows/python.yaml
@@ -300,96 +300,96 @@ jobs:
             --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
             -k "test_execution_with_process_exit_message" \
             xorbits/core/tests/test_execution.py
-        elif [[ "$MODULE" == "xorbits/pandas" ]]; then
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml \
-            --cov=xorbits xorbits/pandas
-        elif [[ "$MODULE" == "xorbits/numpy" ]]; then
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-            -k "not test_numpy_fallback" \
-            xorbits/numpy
-          # workaround: this case will hang, run it separately.
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml \
-            --cov=xorbits \
-            -k "test_numpy_fallback" \
-            xorbits/numpy/numpy_adapters/tests/test_numpy_adapters.py
-        elif [[ "$MODULE" == "mars-core" ]]; then
-          pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
-            --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
-            --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
-        elif [[ "$MODULE" == "kubernetes" ]]; then
-          pytest --ignore xorbits/_mars/ --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
-        elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
-          pytest --ignore xorbits/_mars/ --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
+        # elif [[ "$MODULE" == "xorbits/pandas" ]]; then
+        #   pytest --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml \
+        #     --cov=xorbits xorbits/pandas
+        # elif [[ "$MODULE" == "xorbits/numpy" ]]; then
+        #   pytest --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+        #     -k "not test_numpy_fallback" \
+        #     xorbits/numpy
+        #   # workaround: this case will hang, run it separately.
+        #   pytest --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml \
+        #     --cov=xorbits \
+        #     -k "test_numpy_fallback" \
+        #     xorbits/numpy/numpy_adapters/tests/test_numpy_adapters.py
+        # elif [[ "$MODULE" == "mars-core" ]]; then
+        #   pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
+        #     --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
+        #     --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
+        # elif [[ "$MODULE" == "kubernetes" ]]; then
+        #   pytest --ignore xorbits/_mars/ --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
+        # elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
+        #   pytest --ignore xorbits/_mars/ --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
         elif [[ "$MODULE" == "slurm" ]]; then
           docker exec c1 /bin/bash -c "pip install xorbits"
           docker exec c2 /bin/bash -c "pip install xorbits"
           docker exec slurmctld /bin/bash -c \
           "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
-        elif [[ "$MODULE" == "hadoop" ]]; then
-          export WITH_HADOOP="1"
-          export HADOOP_HOME="/usr/local/hadoop"
-          export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
-          export HADOOP_INSTALL=$HADOOP_HOME
-          export HADOOP_MAPRED_HOME=$HADOOP_HOME
-          export HADOOP_COMMON_HOME=$HADOOP_HOME
-          export HADOOP_HDFS_HOME=$HADOOP_HOME
-          export YARN_HOME=$HADOOP_HOME
-          export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
-          export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
-        elif [[ "$MODULE" == "vineyard" ]]; then
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
-            xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
-            xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
-        elif [[ "$MODULE" == "external-storage" ]]; then
-          export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
-          export JUICEFS_HOME="/usr/local/bin/juicefs"
-          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-        elif [[ "$MODULE" == "_mars/learn" ]]; then
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-            xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
-        elif [[ "$MODULE" == "learn" ]]; then
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-            xorbits/xgboost xorbits/lightgbm
-        elif [ "$MODULE" == "jax" ]; then
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
-        elif [ "$MODULE" == "datasets" ]; then
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/backends
-          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/tests
-        elif [ "$MODULE" == "compatibility" ]; then
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
-        else
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
+        # elif [[ "$MODULE" == "hadoop" ]]; then
+        #   export WITH_HADOOP="1"
+        #   export HADOOP_HOME="/usr/local/hadoop"
+        #   export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
+        #   export HADOOP_INSTALL=$HADOOP_HOME
+        #   export HADOOP_MAPRED_HOME=$HADOOP_HOME
+        #   export HADOOP_COMMON_HOME=$HADOOP_HOME
+        #   export HADOOP_HDFS_HOME=$HADOOP_HOME
+        #   export YARN_HOME=$HADOOP_HOME
+        #   export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
+        #   export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
+        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
+        # elif [[ "$MODULE" == "vineyard" ]]; then
+        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
+        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
+        #     xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
+        #     xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
+        # elif [[ "$MODULE" == "external-storage" ]]; then
+        #   export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
+        #   export JUICEFS_HOME="/usr/local/bin/juicefs"
+        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+        # elif [[ "$MODULE" == "_mars/learn" ]]; then
+        #   pytest --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+        #     xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
+        # elif [[ "$MODULE" == "learn" ]]; then
+        #   pytest --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+        #     xorbits/xgboost xorbits/lightgbm
+        # elif [ "$MODULE" == "jax" ]; then
+        #   pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
+        #   pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
+        # elif [ "$MODULE" == "datasets" ]; then
+        #   pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/backends
+        #   pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/tests
+        # elif [ "$MODULE" == "compatibility" ]; then
+        #   pytest --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
+        #   pytest --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
+        # else
+        #   pytest --timeout=1500 \
+        #     -W ignore::PendingDeprecationWarning \
+        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
         fi
       working-directory: ./python
     

From 9eb0696be154b614715f8b2fd85b768aa6bd52b0 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 19:03:45 +0800
Subject: [PATCH 12/15] remove image

---
 .github/workflows/python.yaml | 226 +++++++++++++++++-----------------
 CI/slurm/docker-compose.yml   |   8 +-
 CI/slurm/slurm.sh             |   1 -
 3 files changed, 117 insertions(+), 118 deletions(-)

diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml
index 973834bad..e1d406470 100644
--- a/.github/workflows/python.yaml
+++ b/.github/workflows/python.yaml
@@ -279,119 +279,119 @@ jobs:
         make html_zh_cn
       working-directory: ./doc
 
-    - name: Test with pytest
-      if: ${{ matrix.module != 'doc-build' && matrix.module != 'gpu' }}
-      env:
-        MODULE: ${{ matrix.module }}
-      run: |
-        if [[ "$MODULE" == "xorbits" ]]; then
-          pytest --ignore xorbits/_mars/ --ignore xorbits/pandas --ignore xorbits/numpy \
-            --ignore xorbits/xgboost --ignore xorbits/lightgbm --ignore xorbits/sklearn \
-            --ignore xorbits/datasets \
-            --ignore xorbits/core/tests/test_execution_exit.py \
-            --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-            -k "not test_execution_with_process_exit_message" \
-            xorbits
-          # workaround: this case will hang, run it separately.
-          pytest --timeout=1500 \
-            -W ignore::PendingDeprecationWarning \
-            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-            -k "test_execution_with_process_exit_message" \
-            xorbits/core/tests/test_execution.py
-        # elif [[ "$MODULE" == "xorbits/pandas" ]]; then
-        #   pytest --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml \
-        #     --cov=xorbits xorbits/pandas
-        # elif [[ "$MODULE" == "xorbits/numpy" ]]; then
-        #   pytest --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-        #     -k "not test_numpy_fallback" \
-        #     xorbits/numpy
-        #   # workaround: this case will hang, run it separately.
-        #   pytest --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml \
-        #     --cov=xorbits \
-        #     -k "test_numpy_fallback" \
-        #     xorbits/numpy/numpy_adapters/tests/test_numpy_adapters.py
-        # elif [[ "$MODULE" == "mars-core" ]]; then
-        #   pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
-        #     --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
-        #     --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
-        # elif [[ "$MODULE" == "kubernetes" ]]; then
-        #   pytest --ignore xorbits/_mars/ --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
-        # elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
-        #   pytest --ignore xorbits/_mars/ --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
-        elif [[ "$MODULE" == "slurm" ]]; then
-          docker exec c1 /bin/bash -c "pip install xorbits"
-          docker exec c2 /bin/bash -c "pip install xorbits"
-          docker exec slurmctld /bin/bash -c \
-          "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
-        # elif [[ "$MODULE" == "hadoop" ]]; then
-        #   export WITH_HADOOP="1"
-        #   export HADOOP_HOME="/usr/local/hadoop"
-        #   export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
-        #   export HADOOP_INSTALL=$HADOOP_HOME
-        #   export HADOOP_MAPRED_HOME=$HADOOP_HOME
-        #   export HADOOP_COMMON_HOME=$HADOOP_HOME
-        #   export HADOOP_HDFS_HOME=$HADOOP_HOME
-        #   export YARN_HOME=$HADOOP_HOME
-        #   export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
-        #   export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
-        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
-        # elif [[ "$MODULE" == "vineyard" ]]; then
-        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
-        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
-        #     xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
-        #     xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
-        # elif [[ "$MODULE" == "external-storage" ]]; then
-        #   export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
-        #   export JUICEFS_HOME="/usr/local/bin/juicefs"
-        #   pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-        # elif [[ "$MODULE" == "_mars/learn" ]]; then
-        #   pytest --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-        #     xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
-        # elif [[ "$MODULE" == "learn" ]]; then
-        #   pytest --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-        #     xorbits/xgboost xorbits/lightgbm
-        # elif [ "$MODULE" == "jax" ]; then
-        #   pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
-        #   pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
-        # elif [ "$MODULE" == "datasets" ]; then
-        #   pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/backends
-        #   pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/tests
-        # elif [ "$MODULE" == "compatibility" ]; then
-        #   pytest --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
-        #   pytest --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
-        # else
-        #   pytest --timeout=1500 \
-        #     -W ignore::PendingDeprecationWarning \
-        #     --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
-        fi
-      working-directory: ./python
+    # - name: Test with pytest
+    #   if: ${{ matrix.module != 'doc-build' && matrix.module != 'gpu' }}
+    #   env:
+    #     MODULE: ${{ matrix.module }}
+    #   run: |
+    #     if [[ "$MODULE" == "xorbits" ]]; then
+    #       pytest --ignore xorbits/_mars/ --ignore xorbits/pandas --ignore xorbits/numpy \
+    #         --ignore xorbits/xgboost --ignore xorbits/lightgbm --ignore xorbits/sklearn \
+    #         --ignore xorbits/datasets \
+    #         --ignore xorbits/core/tests/test_execution_exit.py \
+    #         --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+    #         -k "not test_execution_with_process_exit_message" \
+    #         xorbits
+    #       # workaround: this case will hang, run it separately.
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+    #         -k "test_execution_with_process_exit_message" \
+    #         xorbits/core/tests/test_execution.py
+    #     elif [[ "$MODULE" == "xorbits/pandas" ]]; then
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml \
+    #         --cov=xorbits xorbits/pandas
+    #     elif [[ "$MODULE" == "xorbits/numpy" ]]; then
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+    #         -k "not test_numpy_fallback" \
+    #         xorbits/numpy
+    #       # workaround: this case will hang, run it separately.
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml \
+    #         --cov=xorbits \
+    #         -k "test_numpy_fallback" \
+    #         xorbits/numpy/numpy_adapters/tests/test_numpy_adapters.py
+    #     elif [[ "$MODULE" == "mars-core" ]]; then
+    #       pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
+    #         --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
+    #         --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
+    #     elif [[ "$MODULE" == "kubernetes" ]]; then
+    #       pytest --ignore xorbits/_mars/ --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
+    #     elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
+    #       pytest --ignore xorbits/_mars/ --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
+    #     elif [[ "$MODULE" == "slurm" ]]; then
+    #       docker exec c1 /bin/bash -c "pip install xorbits"
+    #       docker exec c2 /bin/bash -c "pip install xorbits"
+    #       docker exec slurmctld /bin/bash -c \
+    #       "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
+    #     elif [[ "$MODULE" == "hadoop" ]]; then
+    #       export WITH_HADOOP="1"
+    #       export HADOOP_HOME="/usr/local/hadoop"
+    #       export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
+    #       export HADOOP_INSTALL=$HADOOP_HOME
+    #       export HADOOP_MAPRED_HOME=$HADOOP_HOME
+    #       export HADOOP_COMMON_HOME=$HADOOP_HOME
+    #       export HADOOP_HDFS_HOME=$HADOOP_HOME
+    #       export YARN_HOME=$HADOOP_HOME
+    #       export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
+    #       export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
+    #     elif [[ "$MODULE" == "vineyard" ]]; then
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
+    #         xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
+    #         xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
+    #     elif [[ "$MODULE" == "external-storage" ]]; then
+    #       export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
+    #       export JUICEFS_HOME="/usr/local/bin/juicefs"
+    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+    #     elif [[ "$MODULE" == "_mars/learn" ]]; then
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+    #         xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
+    #     elif [[ "$MODULE" == "learn" ]]; then
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+    #         xorbits/xgboost xorbits/lightgbm
+    #     elif [ "$MODULE" == "jax" ]; then
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
+    #     elif [ "$MODULE" == "datasets" ]; then
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/backends
+    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/tests
+    #     elif [ "$MODULE" == "compatibility" ]; then
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
+    #     else
+    #       pytest --timeout=1500 \
+    #         -W ignore::PendingDeprecationWarning \
+    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
+    #     fi
+    #   working-directory: ./python
     
     - name: Test with pytest GPU
       if: ${{ matrix.module == 'gpu' }}
diff --git a/CI/slurm/docker-compose.yml b/CI/slurm/docker-compose.yml
index 088f0e9e9..71e633de4 100644
--- a/CI/slurm/docker-compose.yml
+++ b/CI/slurm/docker-compose.yml
@@ -16,7 +16,7 @@ services:
       common-network:
 
   slurmdbd:
-    image: daskdev/dask-jobqueue:slurm
+    # image: daskdev/dask-jobqueue:slurm
     build: .
     command: ["slurmdbd"]
     container_name: slurmdbd
@@ -33,7 +33,7 @@ services:
       common-network:
 
   slurmctld:
-    image: daskdev/dask-jobqueue:slurm
+    # image: daskdev/dask-jobqueue:slurm
     build: .
     command: ["slurmctld"]
     container_name: slurmctld
@@ -58,7 +58,7 @@ services:
       - NET_ADMIN
 
   c1:
-    image: daskdev/dask-jobqueue:slurm
+    # image: daskdev/dask-jobqueue:slurm
     build: .
     command: ["slurmd"]
     hostname: c1
@@ -81,7 +81,7 @@ services:
       - NET_ADMIN
 
   c2:
-    image: daskdev/dask-jobqueue:slurm
+    # image: daskdev/dask-jobqueue:slurm
     build: .
     command: ["slurmd"]
     hostname: c2
diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index 982a76f58..be38e7fcb 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -19,7 +19,6 @@ function jobqueue_before_install {
 
     # start slurm cluster
     cd ./CI/slurm
-    docker build -t slurmbase .
     docker compose pull
     ./start-slurm.sh
     cd -

From 562b41c7f0e4daa0416ce29b82127113473efb98 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 19:32:02 +0800
Subject: [PATCH 13/15] build locally

---
 CI/slurm/docker-compose.yml | 12 ++++--------
 CI/slurm/slurm.sh           |  3 ++-
 2 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/CI/slurm/docker-compose.yml b/CI/slurm/docker-compose.yml
index 71e633de4..7c050f990 100644
--- a/CI/slurm/docker-compose.yml
+++ b/CI/slurm/docker-compose.yml
@@ -16,8 +16,7 @@ services:
       common-network:
 
   slurmdbd:
-    # image: daskdev/dask-jobqueue:slurm
-    build: .
+    image: slurmbase
     command: ["slurmdbd"]
     container_name: slurmdbd
     hostname: slurmdbd
@@ -33,8 +32,7 @@ services:
       common-network:
 
   slurmctld:
-    # image: daskdev/dask-jobqueue:slurm
-    build: .
+    image: slurmbase
     command: ["slurmctld"]
     container_name: slurmctld
     hostname: slurmctld
@@ -58,8 +56,7 @@ services:
       - NET_ADMIN
 
   c1:
-    # image: daskdev/dask-jobqueue:slurm
-    build: .
+    image: slurmbase
     command: ["slurmd"]
     hostname: c1
     container_name: c1
@@ -81,8 +78,7 @@ services:
       - NET_ADMIN
 
   c2:
-    # image: daskdev/dask-jobqueue:slurm
-    build: .
+    image: slurmbase
     command: ["slurmd"]
     hostname: c2
     container_name: c2
diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index be38e7fcb..2d2891578 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -19,7 +19,8 @@ function jobqueue_before_install {
 
     # start slurm cluster
     cd ./CI/slurm
-    docker compose pull
+    docker build -t slurmbase .
+    docker compose up
     ./start-slurm.sh
     cd -
 

From 528a40f730878004a6d9b102ae082b0703038a24 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 19:58:10 +0800
Subject: [PATCH 14/15] del docker compose up

---
 CI/slurm/slurm.sh | 1 -
 1 file changed, 1 deletion(-)

diff --git a/CI/slurm/slurm.sh b/CI/slurm/slurm.sh
index 2d2891578..766519b70 100644
--- a/CI/slurm/slurm.sh
+++ b/CI/slurm/slurm.sh
@@ -20,7 +20,6 @@ function jobqueue_before_install {
     # start slurm cluster
     cd ./CI/slurm
     docker build -t slurmbase .
-    docker compose up
     ./start-slurm.sh
     cd -
 

From 36cf8d0d9dbc56a17157d503d687f61e3327f794 Mon Sep 17 00:00:00 2001
From: Dawnfz-lenfeng <912706234@qq.com>
Date: Tue, 20 Aug 2024 20:15:42 +0800
Subject: [PATCH 15/15] reset python.yml

---
 .github/workflows/python.yaml | 228 +++++++++++++++++-----------------
 1 file changed, 114 insertions(+), 114 deletions(-)

diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml
index e1d406470..94669fbfb 100644
--- a/.github/workflows/python.yaml
+++ b/.github/workflows/python.yaml
@@ -62,7 +62,7 @@ jobs:
         run: cd python/xorbits/web/ui && ./node_modules/.bin/prettier --check .
 
   build_test_job:
-    # if: github.repository == 'xorbitsai/xorbits'
+    if: github.repository == 'xorbitsai/xorbits'
     runs-on: ${{ matrix.os }}
     needs: lint
     env:
@@ -279,119 +279,119 @@ jobs:
         make html_zh_cn
       working-directory: ./doc
 
-    # - name: Test with pytest
-    #   if: ${{ matrix.module != 'doc-build' && matrix.module != 'gpu' }}
-    #   env:
-    #     MODULE: ${{ matrix.module }}
-    #   run: |
-    #     if [[ "$MODULE" == "xorbits" ]]; then
-    #       pytest --ignore xorbits/_mars/ --ignore xorbits/pandas --ignore xorbits/numpy \
-    #         --ignore xorbits/xgboost --ignore xorbits/lightgbm --ignore xorbits/sklearn \
-    #         --ignore xorbits/datasets \
-    #         --ignore xorbits/core/tests/test_execution_exit.py \
-    #         --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-    #         -k "not test_execution_with_process_exit_message" \
-    #         xorbits
-    #       # workaround: this case will hang, run it separately.
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-    #         -k "test_execution_with_process_exit_message" \
-    #         xorbits/core/tests/test_execution.py
-    #     elif [[ "$MODULE" == "xorbits/pandas" ]]; then
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml \
-    #         --cov=xorbits xorbits/pandas
-    #     elif [[ "$MODULE" == "xorbits/numpy" ]]; then
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-    #         -k "not test_numpy_fallback" \
-    #         xorbits/numpy
-    #       # workaround: this case will hang, run it separately.
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml \
-    #         --cov=xorbits \
-    #         -k "test_numpy_fallback" \
-    #         xorbits/numpy/numpy_adapters/tests/test_numpy_adapters.py
-    #     elif [[ "$MODULE" == "mars-core" ]]; then
-    #       pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
-    #         --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
-    #         --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
-    #     elif [[ "$MODULE" == "kubernetes" ]]; then
-    #       pytest --ignore xorbits/_mars/ --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
-    #     elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
-    #       pytest --ignore xorbits/_mars/ --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
-    #     elif [[ "$MODULE" == "slurm" ]]; then
-    #       docker exec c1 /bin/bash -c "pip install xorbits"
-    #       docker exec c2 /bin/bash -c "pip install xorbits"
-    #       docker exec slurmctld /bin/bash -c \
-    #       "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
-    #     elif [[ "$MODULE" == "hadoop" ]]; then
-    #       export WITH_HADOOP="1"
-    #       export HADOOP_HOME="/usr/local/hadoop"
-    #       export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
-    #       export HADOOP_INSTALL=$HADOOP_HOME
-    #       export HADOOP_MAPRED_HOME=$HADOOP_HOME
-    #       export HADOOP_COMMON_HOME=$HADOOP_HOME
-    #       export HADOOP_HDFS_HOME=$HADOOP_HOME
-    #       export YARN_HOME=$HADOOP_HOME
-    #       export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
-    #       export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
-    #     elif [[ "$MODULE" == "vineyard" ]]; then
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
-    #         xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
-    #         xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
-    #     elif [[ "$MODULE" == "external-storage" ]]; then
-    #       export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
-    #       export JUICEFS_HOME="/usr/local/bin/juicefs"
-    #       pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
-    #     elif [[ "$MODULE" == "_mars/learn" ]]; then
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-    #         xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
-    #     elif [[ "$MODULE" == "learn" ]]; then
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
-    #         xorbits/xgboost xorbits/lightgbm
-    #     elif [ "$MODULE" == "jax" ]; then
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
-    #     elif [ "$MODULE" == "datasets" ]; then
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/backends
-    #       pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/tests
-    #     elif [ "$MODULE" == "compatibility" ]; then
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
-    #     else
-    #       pytest --timeout=1500 \
-    #         -W ignore::PendingDeprecationWarning \
-    #         --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
-    #     fi
-    #   working-directory: ./python
+    - name: Test with pytest
+      if: ${{ matrix.module != 'doc-build' && matrix.module != 'gpu' }}
+      env:
+        MODULE: ${{ matrix.module }}
+      run: |
+        if [[ "$MODULE" == "xorbits" ]]; then
+          pytest --ignore xorbits/_mars/ --ignore xorbits/pandas --ignore xorbits/numpy \
+            --ignore xorbits/xgboost --ignore xorbits/lightgbm --ignore xorbits/sklearn \
+            --ignore xorbits/datasets \
+            --ignore xorbits/core/tests/test_execution_exit.py \
+            --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            -k "not test_execution_with_process_exit_message" \
+            xorbits
+          # workaround: this case will hang, run it separately.
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            -k "test_execution_with_process_exit_message" \
+            xorbits/core/tests/test_execution.py
+        elif [[ "$MODULE" == "xorbits/pandas" ]]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml \
+            --cov=xorbits xorbits/pandas
+        elif [[ "$MODULE" == "xorbits/numpy" ]]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            -k "not test_numpy_fallback" \
+            xorbits/numpy
+          # workaround: this case will hang, run it separately.
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml \
+            --cov=xorbits \
+            -k "test_numpy_fallback" \
+            xorbits/numpy/numpy_adapters/tests/test_numpy_adapters.py
+        elif [[ "$MODULE" == "mars-core" ]]; then
+          pytest --forked --log-level=DEBUG --ignore xorbits/_mars/dataframe --ignore xorbits/_mars/tensor \
+            --ignore xorbits/_mars/learn --ignore xorbits/_mars/remote \
+            --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars
+        elif [[ "$MODULE" == "kubernetes" ]]; then
+          pytest --ignore xorbits/_mars/ --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes
+        elif [[ "$MODULE" == "kubernetes-juicefs" ]]; then
+          pytest --ignore xorbits/_mars/ --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/deploy/kubernetes/external_storage/juicefs
+        elif [[ "$MODULE" == "slurm" ]]; then
+          docker exec c1 /bin/bash -c "pip install xorbits"
+          docker exec c2 /bin/bash -c "pip install xorbits"
+          docker exec slurmctld /bin/bash -c \
+          "pytest /xorbits/python/xorbits/deploy/slurm/tests/test_slurm.py "
+        elif [[ "$MODULE" == "hadoop" ]]; then
+          export WITH_HADOOP="1"
+          export HADOOP_HOME="/usr/local/hadoop"
+          export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
+          export HADOOP_INSTALL=$HADOOP_HOME
+          export HADOOP_MAPRED_HOME=$HADOOP_HOME
+          export HADOOP_COMMON_HOME=$HADOOP_HOME
+          export HADOOP_HDFS_HOME=$HADOOP_HOME
+          export YARN_HOME=$HADOOP_HOME
+          export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
+          export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning xorbits/_mars -m hadoop
+        elif [[ "$MODULE" == "vineyard" ]]; then
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/deploy/oscar/tests/test_local.py
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits -k "vineyard" \
+            xorbits/_mars/tensor/datastore/tests/test_datastore_execution.py \
+            xorbits/_mars/dataframe/datastore/tests/test_datastore_execution.py
+        elif [[ "$MODULE" == "external-storage" ]]; then
+          export ALLUXIO_HOME="/usr/local/bin/alluxio-2.9.3"
+          export JUICEFS_HOME="/usr/local/bin/juicefs"
+          pytest --timeout=1500 -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/storage/tests/test_libs.py
+        elif [[ "$MODULE" == "_mars/learn" ]]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            xorbits/$MODULE xorbits/_mars/contrib/dask/tests/test_dask.py
+        elif [[ "$MODULE" == "learn" ]]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits \
+            xorbits/xgboost xorbits/lightgbm
+        elif [ "$MODULE" == "jax" ]; then
+          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/fuse/tests/test_runtime_fusion.py
+          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/_mars/tensor/
+        elif [ "$MODULE" == "datasets" ]; then
+          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/backends
+          pytest --cov-config=setup.cfg --cov-report=xml --cov=xorbits xorbits/datasets/tests
+        elif [ "$MODULE" == "compatibility" ]; then
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/dataframe
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/_mars/services/storage
+        else
+          pytest --timeout=1500 \
+            -W ignore::PendingDeprecationWarning \
+            --cov-config=setup.cfg --cov-report=xml --cov=xorbits/deploy --cov=xorbits xorbits/$MODULE
+        fi
+      working-directory: ./python
     
     - name: Test with pytest GPU
       if: ${{ matrix.module == 'gpu' }}