From 5b1649b8c59fa7cc12595ddf0fe5161b17aba897 Mon Sep 17 00:00:00 2001
From: Yaman Umuroglu <maltanar@gmail.com>
Date: Fri, 3 Jul 2020 17:31:06 +0100
Subject: [PATCH] [Jenkins] update Jenkinsfile with separated parallel testing

---
 docker/Jenkinsfile | 49 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 45 insertions(+), 4 deletions(-)

diff --git a/docker/Jenkinsfile b/docker/Jenkinsfile
index 7ce622c50..5b0c5723b 100644
--- a/docker/Jenkinsfile
+++ b/docker/Jenkinsfile
@@ -9,7 +9,12 @@ pipeline {
         string(name: 'PYNQ_PASSWORD', defaultValue: 'xilinx', description: 'PYNQ board password')
         string(name: 'PYNQ_TARGET_DIR', defaultValue: '/home/xilinx/finn', description: 'PYNQ board target deployment directory')
         string(name: 'NUM_DEFAULT_WORKERS', defaultValue: '1', description: 'Number of cores for parallel transformations')
-        string(name: 'DOCKER_CMD', defaultValue: """python setup.py test --addopts "--dist=loadfile -n auto"""", description: 'Command to run')
+        // main test: everything except rtlsim and end2end tests, parallel run with xdist, no parallel transformations to save on memory
+        string(name: 'DOCKER_CMD_MAIN', defaultValue: """python setup.py test --addopts "-k 'not (rtlsim or end2end)' --dist=loadfile -n auto" """, description: 'Main test command')
+        // rtlsim tests: parallel run with pytest-parallel, no parallel transformations to save on memory
+        string(name: 'DOCKER_CMD_RTLSIM', defaultValue: """python setup.py test --addopts "-k rtlsim --workers auto" """, description: 'rtlsim test command')
+        // end2end tests: no parallel testing, use NUM_DEFAULT_WORKERS for parallel transformations
+        string(name: 'DOCKER_CMD_END2END', defaultValue: """python setup.py test --addopts "-k end2end" """, description: 'end2end test command')
     }
     environment {
         DOCKER_TAG='finn_ci:$BUILD_ID'
@@ -32,13 +37,13 @@ pipeline {
                 """
             }
         }
-        stage('Test') {
+        stage('test-main') {
             steps {
                 sh """
                 docker run --name $DOCKER_INST_NAME --init \
                 --hostname $DOCKER_INST_NAME \
                 -v ${params.VIVADO_PATH}:${params.VIVADO_PATH}:ro \
-                -e NUM_DEFAULT_WORKERS=${params.NUM_DEFAULT_WORKERS} \
+                -e NUM_DEFAULT_WORKERS=1 \
                 -e FINN_INST_NAME=$DOCKER_INST_NAME \
                 -e VIVADO_PATH=${params.VIVADO_PATH} \
                 -e PYNQ_BOARD=${params.PYNQ_BOARD} \
@@ -46,7 +51,43 @@ pipeline {
                 -e PYNQ_USERNAME=${params.PYNQ_USERNAME} \
                 -e PYNQ_PASSWORD=${params.PYNQ_PASSWORD} \
                 -e PYNQ_TARGET_DIR=${params.PYNQ_TARGET_DIR} \
-                $DOCKER_TAG ${params.DOCKER_CMD}
+                $DOCKER_TAG ${params.DOCKER_CMD_MAIN}
+                """
+            }
+        }
+        stage('test-rtlsim') {
+            steps {
+                sh """
+                docker run --name $DOCKER_INST_NAME --init \
+                --hostname $DOCKER_INST_NAME \
+                -v ${params.VIVADO_PATH}:${params.VIVADO_PATH}:ro \
+                -e NUM_DEFAULT_WORKERS=1 \
+                -e FINN_INST_NAME=$DOCKER_INST_NAME \
+                -e VIVADO_PATH=${params.VIVADO_PATH} \
+                -e PYNQ_BOARD=${params.PYNQ_BOARD} \
+                -e PYNQ_IP=${params.PYNQ_IP} \
+                -e PYNQ_USERNAME=${params.PYNQ_USERNAME} \
+                -e PYNQ_PASSWORD=${params.PYNQ_PASSWORD} \
+                -e PYNQ_TARGET_DIR=${params.PYNQ_TARGET_DIR} \
+                $DOCKER_TAG ${params.DOCKER_CMD_RTLSIM}
+                """
+            }
+        }
+        stage('test-end2end') {
+            steps {
+                sh """
+                docker run --name $DOCKER_INST_NAME --init \
+                --hostname $DOCKER_INST_NAME \
+                -v ${params.VIVADO_PATH}:${params.VIVADO_PATH}:ro \
+                -e NUM_DEFAULT_WORKERS=1 \
+                -e FINN_INST_NAME=$DOCKER_INST_NAME \
+                -e VIVADO_PATH=${params.VIVADO_PATH} \
+                -e PYNQ_BOARD=${params.PYNQ_BOARD} \
+                -e PYNQ_IP=${params.PYNQ_IP} \
+                -e PYNQ_USERNAME=${params.PYNQ_USERNAME} \
+                -e PYNQ_PASSWORD=${params.PYNQ_PASSWORD} \
+                -e PYNQ_TARGET_DIR=${params.PYNQ_TARGET_DIR} \
+                $DOCKER_TAG ${params.DOCKER_CMD_END2END}
                 """
             }
         }
-- 
GitLab