Browse Source

[Makefile] Check `make clean` on Jenkins

Simon Gaiser 4 years ago
parent
commit
8dd19d28fb

+ 27 - 6
Jenkinsfiles/Linux

@@ -6,6 +6,7 @@ pipeline {
                 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
@@ -14,12 +15,8 @@ pipeline {
                             cd ..
                             make -j 8 WERROR=1
                             make -j 8 WERROR=1 test
-                            cd Pal/ipc/linux
-                            make KERNELDIR=/lib/modules/4.4.0-161-generic/build
-                           '''
-                        sh '''
-                            cd Pal/src
-                            make -j 8 PAL_HOST=Skeleton WERROR=1
+                            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
                            '''
                     }
                 }
@@ -74,6 +71,30 @@ pipeline {
                             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 {

+ 23 - 0
Jenkinsfiles/Linux-Debug

@@ -6,6 +6,7 @@ pipeline {
                 stage('Build') {
                     steps {
                         sh '''
+                            ./Scripts/clean-check-prepare
                             make -j 8 DEBUG=1 WERROR=1
                             make -j 8 DEBUG=1 WERROR=1 test
                            '''
@@ -66,6 +67,28 @@ pipeline {
                             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 LibOS/glibc-*.tar.gz
+                           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-debug.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 {

+ 27 - 0
Jenkinsfiles/Linux-SGX

@@ -8,6 +8,9 @@ pipeline {
         stages {
                 stage('Build') {
                     steps {
+                        sh '''
+                           ./Scripts/clean-check-prepare
+                        '''
                         sh '''
                             cd Pal/src/host/Linux-SGX/signer/ && openssl genrsa -3 -out enclave-key.pem 3072
                         '''
@@ -102,6 +105,30 @@ pipeline {
                             sleep 30
                             LOOP=1 CONCURRENCY_LIST="1 32" ./benchmark-http.sh 127.0.0.1:8001
                             '''
+                        sh '''
+                           cd "$(./Scripts/clean-check-test-copy)"
+
+                           rm Pal/src/host/Linux-SGX/signer/enclave-key.pem
+                           make -C Pal/src/host/Linux-SGX/sgx-driver clean
+                           make SGX=1 clean
+                           rm LibOS/glibc-*.tar.gz
+                           make -C LibOS/shim/test/regression SGX=1 clean
+                           make -C LibOS/shim/test/apps/python SGX=1 clean
+                           make -C LibOS/shim/test/apps/bash SGX=1 clean
+                           make -C LibOS/shim/test/apps/gcc SGX=1 clean
+                           make -C LibOS/shim/test/apps/lmbench SGX=1 clean
+                           make -C LibOS/shim/test/apps/lighttpd SGX=1 distclean
+                           make -C LibOS/shim/test/apps/apache SGX=1 distclean
+
+                           # LTP contains dead symlinks, which confuses the
+                           # clean-check script. Just delete them.
+                           for d in . /tmp/graphene-sgx.clean-check.clean; do
+                               rm $d/LibOS/shim/test/apps/ltp/src/utils/ffsb-6.0-rc2/config.sub
+                               rm $d/LibOS/shim/test/apps/ltp/src/utils/ffsb-6.0-rc2/config.guess
+                           done
+
+                           ./Scripts/clean-check
+                        '''
                     }
                     post {
                         always {

+ 51 - 0
Scripts/clean-check

@@ -0,0 +1,51 @@
+#!/bin/bash
+
+set -eu -o pipefail
+
+top_dir="$(readlink -m "${BASH_SOURCE[0]}/../..")"
+
+# Also allow operation on a copy named ${orig_top_dir}.clean-check.${something}
+# I.e., .../graphene.clean-check.test/Scripts/clean-check will check:
+# .../graphene.clean-check.test against .../graphene.clean-check.clean
+clean_dir="${top_dir%.clean-check.*}.clean-check.clean"
+
+if [ -n "${JENKINS_HOME:-}" ]; then
+    clean_dir="/tmp/$(basename "$clean_dir")"
+fi
+
+show_diff=false
+if [ "${1:-}" == "--show-diff" ]; then
+    show_diff=true
+fi
+
+if ! [ -d "$clean_dir" ]; then
+    echo "ERROR: Copy of clean source directory not found!"
+    echo
+    echo "You need to call clean-check-prepare on the clean source directory before using"
+    echo "clean-check."
+    exit 1
+fi
+
+trap 'rm -rf "$diff"' EXIT
+diff="$(mktemp)"
+
+if [ "$show_diff" == true ]; then
+    diff_opts="-u"
+else
+    diff_opts="-q"
+fi
+
+ok=true
+diff "$diff_opts" -r "$clean_dir" "$top_dir" > "$diff" || ok=false
+
+if [ "$ok" == true ]; then
+    echo "Source tree is unchanged. :]"
+    exit 0
+fi
+
+echo "================================================================================"
+echo "                ERROR: Source tree is not unchanged after clean:"
+echo "--------------------------------------------------------------------------------"
+cat "$diff"
+echo "================================================================================"
+exit 1

+ 13 - 0
Scripts/clean-check-prepare

@@ -0,0 +1,13 @@
+#!/bin/bash
+
+set -eu -o pipefail
+
+top_dir="$(readlink -m "${BASH_SOURCE[0]}/../..")"
+clean_dir="$top_dir.clean-check.clean"
+
+if [ -n "${JENKINS_HOME:-}" ]; then
+    clean_dir="/tmp/$(basename "$clean_dir")"
+fi
+
+rm -rf "$clean_dir"
+cp -a "$top_dir" "$clean_dir"

+ 17 - 0
Scripts/clean-check-test-copy

@@ -0,0 +1,17 @@
+#!/bin/bash
+
+set -eu -o pipefail
+
+# Creates a test copy where you can check `make clean` without messing with
+# your main dir.
+
+top_dir="$(readlink -m "${BASH_SOURCE[0]}/../..")"
+test_dir="$top_dir.clean-check.test"
+
+if [ -n "${JENKINS_HOME:-}" ]; then
+    test_dir="/tmp/$(basename "$test_dir")"
+fi
+
+rm -rf "$test_dir"
+cp -a "$top_dir" "$test_dir"
+echo "$test_dir"