#!/bin/bash # This script assumes the HPC command line tool `job` is in your path. # To install HPC go to \\msr-arrays\Tools\HPC-V3-SP3 # Script configuration HEAD=RR1-N13-09-H44 # HEAD node of a HPC cluster WORKDIR="\\\\msr-arrays\\Scratch\\msr-pool\\Redmond\\leonardo" # Path for the working directory in the HPC Cluster. It must contain input test files and auxiliary DLLs needed for executing Lean LEAN_PATH=/cygdrive/c/Users/leonardo/projects/lean BUILD_PATH=$LEAN_PATH/build BUILD_TYPE=Debug REPO=origin BRANCH=master LOG=$LEAN_PATH/build_log RESULT_DIR=$LEAN_PATH/build/results MAKE_JOBS=20 ################################ PREV_COMMIT=$LEAN_PATH/prev_commit # Update Lean binary cd $LEAN_PATH git fetch $REPO git reset --hard $REPO/$BRANCH GIT_COMMIT=`git log --oneline -n 1 | cut -d ' ' -f 1` # Used for BUILDNAME if [[ ! -a $PREV_COMMIT ]] || [[ `cat $PREV_COMMIT` != $GIT_COMMIT ]] then mkdir -p $BUILD_PATH cd $BUILD_PATH rm -rf * cmake $LEAN_PATH/src -DCMAKE_BUILD_TYPE=$BUILD_TYPE make -j $MAKE_JOBS echo `date` : Build $GIT_COMMIT | tee -a $LOG echo $GIT_COMMIT > $PREV_COMMIT else echo "$GIT_COMMIT is already built." | tee -a $LOG fi # Copy lean to workdir in the cluster cd $BUILD_PATH cp shell/lean.exe $WORKDIR # Create new job JobId=`job new /scheduler:$HEAD | awk '{ print $4 }'` echo "Created HPC job $JobId" # Add tasks for executing .lean files at $WORKDIR for f in `ls $WORKDIR`; do if [ ${f:(-5)} == ".lean" ]; then job add $JobId /scheduler:$HEAD /workdir:$WORKDIR /stdout:$f.$JobId.out /stderr:$f.$JobId.err /stdin:$f lean.exe fi done # Submit job job submit /id:$JobId /scheduler:$HEAD # Wait job to finish for (( ; ; )); do if job view $JobId /scheduler:$HEAD | grep "State.*Finished"; then echo "Job $JobId has finished" break else if job view $JobId /scheduler:$HEAD | grep "State.*Failed"; then echo "Job $JobId has failed" echo "======= FAILURE Details from HPC =========" job view $JobId /scheduler:$HEAD echo "==========================================" break else echo "Waiting for job $JobId" sleep 1 fi fi done # Move results to RESULT_DIR mkdir -p $RESULT_DIR for f in `ls $WORKDIR`; do if [ `expr match "$f" ".*$JobId.out.*"` != 0 ]; then echo "Copying $WORKDIR\\$f" cp "$WORKDIR\\$f" $RESULT_DIR rm "$WORKDIR\\$f" fi if [ `expr match "$f" ".*$JobId.err.*"` != 0 ]; then echo "Copying $WORKDIR\\$f" cp "$WORKDIR\\$f" $RESULT_DIR rm "$WORKDIR\\$f" fi done