From 60182ba9bae227f75e572d4f6ecbac4ec3b8b7c3 Mon Sep 17 00:00:00 2001
From: Pablo Escobar <pescobar001@gmail.com>
Date: Mon, 20 Mar 2017 09:25:06 +0100
Subject: [PATCH] added script to build a nightly build from git repo

---
 scripts/ost-nightly-build.sh | 155 +++++++++++++++++++++++++++++++++++
 1 file changed, 155 insertions(+)
 create mode 100644 scripts/ost-nightly-build.sh

diff --git a/scripts/ost-nightly-build.sh b/scripts/ost-nightly-build.sh
new file mode 100644
index 000000000..f6e79c2ae
--- /dev/null
+++ b/scripts/ost-nightly-build.sh
@@ -0,0 +1,155 @@
+#!/bin/bash
+
+## Script to compile a nightly build of OpenStructure from the git repo
+##
+## This script requires that you can clone the OST repo and it uses the sciCORE 
+## software stack for dependencies so it will only work in the sciCORE login nodes
+##
+## Author: Pablo Escobar <pablo.escobarlopez@unibas.ch>
+
+
+# print help if no arguments supplied or -h or --help
+if [[ $# -eq 0 ]] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
+	echo "Usage: $0 branch_to_clone"
+	exit 1
+fi	
+
+function main {
+
+CURRENT_DATE=$(date +"%Y%m%dT%H%M%SZ")
+GIT_BRANCH=$1
+
+# create a temporary directory to download the sources and do the build
+TEMP_DIR="/scratch/${USER}/ost-builds/$CURRENT_DATE"
+echo -e "\ncreating temporary dir to clone and build in $TEMP_DIR\n"
+mkdir -p $TEMP_DIR
+
+# clone the development branch of OST to $TEMP_DIR
+git_cmd="git clone -b $GIT_BRANCH ssh://git@git.scicore.unibas.ch:2222/schwede/openstructure.git $TEMP_DIR/openstructure"
+echo "cloning the OST code: $GIT_BRANCH branch"
+echo -e "running $git_cmd"
+$git_cmd
+
+# fetch the latest git commit ID. We will use this in the module name together with the branch name
+cd $TEMP_DIR/openstructure
+LATEST_COMMIT=`git rev-parse HEAD | cut -c1-8`
+
+# create a tarball with the sources. We will pass this to easybuild
+TARBALL_NAME="OpenStructure-nightly-${CURRENT_DATE}_${GIT_BRANCH}_commit${LATEST_COMMIT}.tar.bz2"
+echo -e "\nCreating a tarball with the source code to feed EasyBuild"
+echo -e "running tar -cjf $TARBALL_NAME openstructure"
+cd $TEMP_DIR
+tar -cjf $TARBALL_NAME openstructure
+
+# create the installation directory if it doesn't exists
+# by default $INSTALL_DIR is in the cluster shared scratch so the module
+# can be used from any compute node
+INSTALL_DIR="/scicore/scratch/$USER/ost-nightly-builds"
+echo -e "\nCreating install dir $INSTALL_DIR if it doesn't exists"
+if [ ! -d "$INSTALL_DIR" ]; then
+	mkdir -p $INSTALL_DIR
+fi
+
+# create a easyconfig to build OST
+echo -e "\nCreating an easyconfig in $TEMP_DIR/ost-easyconfig.eb based on the provided template"
+generate_easyconfig_template  # this function is defined at the bottom of the script to improve readability
+
+echo -e "\nSetting up the modules environment by executing 'source /etc/profile.d/lmod.sh'"
+source /etc/profile.d/lmod.sh
+
+echo -e "\nLoading the Easybuild module executing 'module load EasyBuild'"
+module load EasyBuild
+
+echo -e "\nRunning EasyBuild"
+eb_command="eb --optarch=GENERIC --sourcepath=$TEMP_DIR --buildpath=$TEMP_DIR/easybuild_build_dir --installpath=$INSTALL_DIR $TEMP_DIR/ost-easyconfig.eb"
+echo $eb_command
+$eb_command
+
+if [[ $? != 0 ]]; then
+	echo -e "\nBuild failed. Not deleting temp dir $TEMP_DIR"
+else
+        echo -e "\nBuild completed succesfully. Deleting temp dir $TEMP_DIR"
+	rm -fr $TEMP_DIR
+	echo -e "\nrun 'module use $INSTALL_DIR/modules/all/' to add the new modules to your \$MODULEPATH"
+	echo -e "If you don't see the new module try deleting your Lmod's cache doing 'rm ~/.lmod.d/.cache/*'\n"
+
+fi
+
+} # end of main function
+
+function generate_easyconfig_template {
+
+cat > $TEMP_DIR/ost-easyconfig.eb << EOF
+# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild
+# Author: Pablo Escobar Lopez
+# sciCORE - University of Basel
+# SIB Swiss Institute of Bioinformatics
+
+easyblock = "CMakeMake"
+
+name = 'OpenStructure-nightly'
+version = '${CURRENT_DATE}'
+versionsuffix = '_${GIT_BRANCH}_commit${LATEST_COMMIT}'
+
+homepage = 'http://www.openstructure.org'
+description = "Open-Source Computational Structural Biology Framework"
+
+toolchain = {'name': 'goolf', 'version': '1.4.10'}
+
+sources = ['$TARBALL_NAME']
+
+builddependencies = [('CMake', '2.8.12')]
+
+pythonversion = "2.7.5"
+pythonshortversion = ".".join(pythonversion.split(".")[:-1])
+
+dependencies = [
+    ('Python', pythonversion),
+    ('Boost', '1.53.0', '-Python-%s' % (pythonversion)),
+    ('numpy', '1.9.1', '-Python-%s' % (pythonversion)),
+    ('Qt', '4.8.4'),
+    ('Eigen', '3.2.1'),
+#   ('FFTW', '3.3.3'),  # this dependency is already included with toolchain goolf-1.4.10
+    ('zlib', '1.2.8'),
+    ('bzip2', '1.0.6'),
+    ('libpng', '1.6.17'), 
+    ('LibTIFF', '4.0.3'), 
+    ('libjpeg-turbo', '1.4.0'), 
+    ('OpenMM', '6.1-Linux64', '', True), 
+    ('FFTW', '3.3.3', '-dynamic', ('gompi', '1.4.10')), 
+]
+
+configopts = " -DOPTIMIZE=1 -DCOMPILE_TMTOOLS=1 -DENABLE_GFX=OFF -DENABLE_GUI=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS_RELEASE='-O3 -DNDEBUG -Wno-unused-local-typedefs' -DUSE_NUMPY=1 -DUSE_RPATH=1"
+
+configopts += " -DCOMPOUND_LIB=/scicore/home/schwede/GROUP/OpenStructure/ChemLib/1.4/compounds.chemlib"
+
+configopts += " -DPYTHON_ROOT=\$EBROOTPYTHON -DEIGEN3_INCLUDE_DIR=\$EBROOTEIGEN -DFFTW_LIBRARY=\$EBROOTFFTW/lib/libfftw3f.a -DFFTW_INCLUDE_DIR=\$EBROOTFFTW/include -DBOOST_ROOT=\$EBROOTBOOST -DQT_QMAKE_EXECUTABLE=\$EBROOTQT/bin/qmake -DBoost_USE_MULTITHREADED=OFF"
+
+configopts += " -DENABLE_MM=1 -DOPEN_MM_LIBRARY=\$EBROOTOPENMM/lib/libOpenMM.so -DOPEN_MM_PLUGIN_DIR=\$EBROOTOPENMM/lib/plugins -DOPEN_MM_INCLUDE_DIR=\$EBROOTOPENMM/include"
+
+runtest = 'check'
+
+sanity_check_paths = { 
+    'files': ["bin/ost", "bin/chemdict_tool"],
+    'dirs': ["include/ost"],
+}
+
+# add \$INSTALLDIR/lib64/python2.7/site-packages to PYTHONPATH
+modextrapaths = {
+    'PYTHONPATH': 'lib64/python%s/site-packages' % (pythonshortversion)
+}
+
+# OST_ROOT env var points to install directory
+modextravars = {
+    'OST_ROOT': '%(installdir)s'
+}
+
+postinstallcmds = ["rm -fr %(installdir)s/share/openstructure/compounds.chemlib",
+                   "cd %(installdir)s/share/openstructure/ && ln -s /scicore/home/schwede/GROUP/OpenStructure/ChemLib/1.6/compounds.chemlib compounds.chemlib",]
+
+moduleclass = 'bio'
+EOF
+
+}
+
+main "$@"
-- 
GitLab