pipeline {
        agent {
              dockerfile { filename 'Jenkinsfiles/ubuntu-16.04.dockerfile' }
        }
        stages {
                stage('Build') {
                    steps {
                        sh '''
                            ./Scripts/clean-check-prepare
                            cd LibOS
                            make -j 8 glibc-build/Build.success GLIBC_VERSION=2.19
                            rm -r glibc-build
                            make -j 8 glibc-build/Build.success GLIBC_VERSION=2.23
                            rm -r glibc-build
                            cd ..
                            make -j 8 WERROR=1
                            make -j 8 WERROR=1 test
                            make -C Pal/ipc/linux KERNELDIR=/lib/modules/4.4.0-161-generic/build
                            make -C Pal/src -j 8 PAL_HOST=Skeleton WERROR=1
                           '''
                    }
                }
                stage('Test') {
                    steps {
                        sh '''
                            cd Pal/regression
                            make regression
                            '''
                        sh '''
                            cd LibOS/shim/test/regression
                            make regression
                            '''
                        sh '''
                            cd LibOS/shim/test/apps/ltp
                            make
                            make ltp.xml
                            '''
                        timeout(time: 5, unit: 'MINUTES') {
                            sh '''
                                cd LibOS/shim/test/apps/python
                                make regression
                            '''
                        }
                        sh '''
                            cd LibOS/shim/test/apps/bash
                            make regression
                            '''
                        timeout(time: 5, unit: 'MINUTES') {
                            sh '''
                                cd LibOS/shim/test/apps/gcc
                                make regression
                           '''
                        }
                        timeout(time: 15, unit: 'MINUTES') {
                            sh '''
                                cd LibOS/shim/test/apps/lmbench
                                make regression N_RUNS=1 ENOUGH=100
                            '''
                        }
                        sh '''
                            cd LibOS/shim/test/apps/lighttpd
                            make
                            make start-graphene-server &
                            sleep 1
                            LOOP=1 CONCURRENCY_LIST="1 32" ./benchmark-http.sh 127.0.0.1:8003
                            '''
                        sh '''
                            cd LibOS/shim/test/apps/apache
                            make
                            make start-graphene-server &
                            sleep 1
                            LOOP=1 CONCURRENCY_LIST="1 32" ./benchmark-http.sh 127.0.0.1:8001
                            '''
                        sh '''
                           cd "$(./Scripts/clean-check-test-copy)"

                           make clean
                           rm -r LibOS/glibc-2.19 LibOS/glibc-2.23
                           rm LibOS/glibc-*.tar.gz
                           make -C Pal/ipc/linux KERNELDIR=/lib/modules/4.4.0-161-generic/build clean
                           make -C LibOS/shim/test/regression clean

                           make -C LibOS/shim/test/apps/ltp clean
                           # LTP's make clean is broken, see https://github.com/linux-test-project/ltp/issues/559
                           rm -rf /tmp/graphene.clean-check.clean/LibOS/shim/test/apps/ltp/src
                           rm -rf LibOS/shim/test/apps/ltp/src

                           make -C LibOS/shim/test/apps/python clean
                           make -C LibOS/shim/test/apps/bash clean
                           make -C LibOS/shim/test/apps/gcc clean
                           make -C LibOS/shim/test/apps/lmbench clean
                           make -C LibOS/shim/test/apps/lighttpd distclean
                           make -C LibOS/shim/test/apps/apache distclean
                           make -C Pal/src PAL_HOST=Skeleton clean

                           ./Scripts/clean-check
                        '''
                    }
                    post {
                        always {
                            archiveArtifacts 'LibOS/shim/test/apps/ltp/ltp.xml'

                            junit 'Pal/regression/pal-regression.xml'
                            junit 'LibOS/shim/test/regression/libos-regression.xml'
                            junit 'LibOS/shim/test/apps/ltp/ltp.xml'
                        }
                    }
                }
                stage('Deploy') {
                    steps {
                        sh 'echo Deploying code'
                    }
                }
        }
        post {
                success {
                        echo 'Deployment successful'
                }
                failure {
                        echo 'Failure while on the pipeline'
                }
                unstable {
                        echo 'Pipeline marked as "unstable"'
                }
        }
}
