![Stefano Mazzocchi](/assets/img/avatar_default.png)
git-svn-id: http://google-refine.googlecode.com/svn/trunk@400 7d457c2a-affb-35e4-300a-418c747d4874
551 lines
14 KiB
Bash
Executable File
551 lines
14 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
##########################################################
|
|
# Gridworks Control System #
|
|
##########################################################
|
|
|
|
# -------------- utility functions ----------------------
|
|
|
|
fail () {
|
|
cat <<EOF
|
|
ERROR: $1
|
|
Type '$0 -h' for usage information.
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
error() {
|
|
echo "$1"
|
|
exit 1
|
|
}
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
Usage: $0 [options] <action>
|
|
where [options] include:
|
|
|
|
-h print this message and exit
|
|
|
|
-p <port> the port that gridworks will listen to
|
|
default: 3333
|
|
|
|
-i <interface> the host interface gridworks should bind to
|
|
default: 127.0.0.1
|
|
|
|
-w <path> path to the webapp
|
|
default: src/main/webapp
|
|
|
|
-d <path> path to the data directory
|
|
default: OS dependent
|
|
|
|
-m <memory> max memory heap size to use
|
|
default: 1024M
|
|
|
|
--debug enable JVM debugging (on port 8000)
|
|
|
|
--jmx enable JMX monitoring (for jconsole and jvisualvm)
|
|
|
|
and <action> is one of
|
|
|
|
build ..................... Build Gridworks
|
|
run ....................... Run Gridworks
|
|
|
|
test ...................... Test Gridworks
|
|
findbugs .................. Run Findbugs against Gridworks
|
|
|
|
mac_dist <version> ........ Make MacOSX binary distribution
|
|
windows_dist <version> .... Make Windows binary distribution
|
|
linux_dist <version> ...... Make Linux binary distribution
|
|
|
|
dist <version> ............ Make all distributions
|
|
|
|
clean ..................... Clean compiled classes
|
|
distclean ................. Remove all generated files
|
|
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
add_option() {
|
|
OPTS="$OPTS $1"
|
|
}
|
|
|
|
load_configs() {
|
|
cat $1 | egrep "^[A-Z]" | sed 's/^\(.*\)$/export \1/' > .$1
|
|
. ./.$1
|
|
rm ./.$1
|
|
}
|
|
|
|
check_macosx() {
|
|
if [ "$SYSTEM" != 'Darwin' ] ; then
|
|
error "This action can only run on MacOSX"
|
|
fi
|
|
}
|
|
|
|
get_version() {
|
|
VERSION=$1
|
|
|
|
if [ "$VERSION" == "" ] ; then
|
|
fail "Must specify a version number"
|
|
fi
|
|
|
|
NUM_VERSION=`echo $VERSION | sed 's/[a-zA-Z]//g'`
|
|
}
|
|
|
|
get_revision() {
|
|
if [ -d ".svn" ]; then
|
|
INFO=`svn info`
|
|
elif [ -d ".git" ]; then
|
|
INFO=`git svn info`
|
|
else
|
|
error "cannot obtain revision, exiting!"
|
|
fi
|
|
|
|
REVISION=`echo $INFO | sed 's/.*Revision: /r/' | sed 's/ .*//'`
|
|
}
|
|
|
|
get_url_file() {
|
|
return `echo $1 | sed 's|.*/||'`
|
|
}
|
|
|
|
download() {
|
|
URL=$1
|
|
DEST=$2
|
|
CURL="`which curl`"
|
|
WGET="`which wget`"
|
|
|
|
if [ "$CURL" == "" ] && [ "$WGET" == "" ]; then
|
|
error "We need either 'curl' or 'wget' present in PATH to download external dependencies."
|
|
fi
|
|
|
|
if [ "$CURL" != "" ] ; then
|
|
curl -L -o $DEST $URL || exit 1
|
|
elif [ "$WGET" != "" ] ; then
|
|
wget -O $DEST $URL || exit 1
|
|
fi
|
|
}
|
|
|
|
tool_download() {
|
|
URL=$1
|
|
FILE=$2
|
|
DIR=$3
|
|
|
|
cd $GRIDWORKS_TOOLS_DIR
|
|
if [ ! -f "$FILE" ] ; then
|
|
download $URL $FILE
|
|
fi
|
|
if [ ! -d "$DIR" ] ; then
|
|
tar xzf $FILE || exit 1
|
|
fi
|
|
cd ..
|
|
}
|
|
|
|
# ----------------------------------------------------------------------------------------------
|
|
|
|
build_prepare() {
|
|
if [ ! -d $GRIDWORKS_BUILD_DIR ] ; then
|
|
mkdir $GRIDWORKS_BUILD_DIR || exit 1
|
|
fi
|
|
}
|
|
|
|
dist_prepare() {
|
|
if [ ! -d $GRIDWORKS_DIST_DIR ] ; then
|
|
mkdir $GRIDWORKS_DIST_DIR || exit 1
|
|
fi
|
|
}
|
|
|
|
tools_prepare() {
|
|
if [ ! -d $GRIDWORKS_TOOLS_DIR ] ; then
|
|
mkdir $GRIDWORKS_TOOLS_DIR || exit 1
|
|
fi
|
|
}
|
|
|
|
ant_prepare() {
|
|
ANT_URL="http://www.apache.org/dist/ant/binaries/apache-ant-1.8.0-bin.tar.gz"
|
|
ANT_FILE=`echo $ANT_URL | sed 's|.*/||'`
|
|
ANT_DIR="apache-ant-1.8.0"
|
|
|
|
ANT=`which ant`
|
|
if [ $ANT == "" ] ; then
|
|
if [ $ANT_HOME == "" ] ; then
|
|
cd $GRIDWORKS_TOOLS_DIR
|
|
if [ ! -f $ANT_FILE ] ; then
|
|
download $ANT_URL $ANT_FILE
|
|
fi
|
|
if [ ! -d $ANT_DIR ] ; then
|
|
tar xzf $ANT_FILE -C . || exit 1
|
|
fi
|
|
export ANT_HOME="`pwd`/$ANT_DIR"
|
|
cd ..
|
|
fi
|
|
ANT="$ANT_HOME/bin/ant"
|
|
fi
|
|
}
|
|
|
|
launch4j_prepare() {
|
|
tools_prepare
|
|
|
|
LAUNCH4J_URL="http://downloads.sourceforge.net/project/launch4j/launch4j-3/3.0.1/launch4j-3.0.1-macosx.tgz"
|
|
LAUNCH4J_FILE=`echo $LAUNCH4J_URL | sed 's|.*/||'`
|
|
LAUNCH4J_DIR="launch4j"
|
|
|
|
tool_download $LAUNCH4J_URL $LAUNCH4J_FILE $LAUNCH4J_DIR
|
|
}
|
|
|
|
jarbundler_prepare() {
|
|
tools_prepare
|
|
|
|
JARBUNDLER_URL="http://www.informagen.com/JarBundler/dist/jarbundler.tar.gz"
|
|
JARBUNDLER_FILE=`echo $JARBUNDLER_URL | sed 's|.*/||'`
|
|
JARBUNDLER_DIR="jarbundler-2.1.0"
|
|
|
|
tool_download $JARBUNDLER_URL $JARBUNDLER_FILE $JARBUNDLER_DIR
|
|
}
|
|
|
|
windmill_prepare() {
|
|
tools_prepare
|
|
|
|
WINDMILL_URL="http://github.com/windmill/windmill/tarball/1.3beta2"
|
|
WINDMILL_FILE="windmill-1.3beta2.tar.gz"
|
|
WINDMILL_DIR="windmill-1.3beta2"
|
|
|
|
tool_download $WINDMILL_URL $WINDMILL_FILE $WINDMILL_DIR
|
|
}
|
|
|
|
findbugs_prepare() {
|
|
tools_prepare
|
|
|
|
FINDBUGS_URL="http://downloads.sourceforge.net/project/findbugs/findbugs/1.3.9/findbugs-1.3.9.tar.gz"
|
|
FINDBUGS_FILE=`echo $FINDBUGS_URL | sed 's|.*/||'`
|
|
FINDBUGS_DIR="findbugs-1.3.9"
|
|
|
|
tool_download $FINDBUGS_URL $FINDBUGS_FILE $FINDBUGS_DIR
|
|
}
|
|
|
|
# ----------------------------------------------------------------------------------------------
|
|
|
|
ant() {
|
|
ant_prepare
|
|
|
|
#export ANT_OPTS="-Xmx1024M"
|
|
|
|
$ANT -f build.xml $ANT_PARAMS -Dbuild.dir="$GRIDWORKS_BUILD_DIR" -Ddist.dir="$GRIDWORKS_DIST_DIR" -Dversion="$VERSION" -Dnum_version="$NUM_VERSION" -Drevision="$REVISION" $1 || exit 1
|
|
}
|
|
|
|
# ----------------------------------------------------------------------------------------------
|
|
|
|
dist() {
|
|
mac_dist $1
|
|
windows_dist $1
|
|
linux_dist $1
|
|
|
|
echo "All distributions were built and are located at $GRIDWORKS_DIST_DIR"
|
|
echo
|
|
echo "Upload them to the distibution site, then prepend the GridworksReleases array at"
|
|
echo
|
|
echo " http://acre.freebase.com/#app=/user/dfhuynh/labs-site&file=gridworks.js"
|
|
echo
|
|
echo "with"
|
|
echo
|
|
echo " {"
|
|
echo " description: \"Gridworks ${VERSION}\","
|
|
echo " version: \"${VERSION}\","
|
|
echo " revision: \"${REVISION}\""
|
|
echo " },"
|
|
echo
|
|
}
|
|
|
|
windows_dist() {
|
|
check_macosx
|
|
dist_prepare
|
|
launch4j_prepare
|
|
get_version $1
|
|
get_revision
|
|
|
|
ANT_PARAMS="-Dlaunch4j.dir=${GRIDWORKS_TOOLS_DIR}/${LAUNCH4J_DIR}"
|
|
ant windows
|
|
}
|
|
|
|
linux_dist() {
|
|
dist_prepare
|
|
get_version $1
|
|
get_revision
|
|
|
|
ant linux
|
|
}
|
|
|
|
mac_dist() {
|
|
check_macosx
|
|
dist_prepare
|
|
jarbundler_prepare
|
|
get_version $1
|
|
get_revision
|
|
|
|
ANT_PARAMS="-Djarbundler.dir=${GRIDWORKS_TOOLS_DIR}/${JARBUNDLER_DIR}"
|
|
ant mac || exit 1
|
|
|
|
mkdir -p "$GRIDWORKS_BUILD_DIR/mac/.background"
|
|
cp src/graphics/dmg_background/dmg_background.png "$GRIDWORKS_BUILD_DIR/mac/.background/dmg_background.png"
|
|
|
|
SIZE=30
|
|
|
|
if [ -f "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" ] ; then
|
|
rm "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg"
|
|
fi
|
|
|
|
TITLE="Gridworks $VERSION"
|
|
echo "Building MacOSX DMG for $TITLE"
|
|
hdiutil create -srcfolder "$GRIDWORKS_BUILD_DIR/mac" -volname "$TITLE" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${SIZE}m "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" || error "can't create empty DMG"
|
|
DEVICE=`hdiutil attach -readwrite -noverify -noautoopen "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" | egrep '^/dev/' | sed 1q | awk '{print $1}'`
|
|
hdiutil attach "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg"
|
|
|
|
echo '
|
|
tell application "Finder"
|
|
tell disk "'$TITLE'"
|
|
open
|
|
set current view of container window to icon view
|
|
set toolbar visible of container window to false
|
|
set statusbar visible of container window to false
|
|
set the bounds of container window to {200, 100, 760, 460}
|
|
set theViewOptions to the icon view options of container window
|
|
set arrangement of theViewOptions to not arranged
|
|
set icon size of theViewOptions to 100
|
|
set background picture of theViewOptions to file ".background:'dmg_background.png'"
|
|
make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
|
|
set position of item "'Gridworks'" of container window to {170, 175}
|
|
set position of item "Applications" of container window to {380, 175}
|
|
close
|
|
open
|
|
update without registering applications
|
|
delay 2
|
|
eject
|
|
end tell
|
|
end tell
|
|
' | osascript || error "error running applescript"
|
|
|
|
sync
|
|
sync
|
|
hdiutil detach $DEVICE
|
|
hdiutil convert "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg" -format UDZO -imagekey zlib-level=9 -o "$GRIDWORKS_DIST_DIR/gridworks-$VERSION-$REVISION.dmg" || error "Error compressing DMG"
|
|
hdiutil internet-enable -yes "$GRIDWORKS_DIST_DIR/gridworks-$VERSION-$REVISION.dmg" || error "Error internet-enabling DMG"
|
|
rm -f "$GRIDWORKS_BUILD_DIR/temp_gridworks.dmg"
|
|
}
|
|
|
|
test() {
|
|
ui_test $1
|
|
server_test $1
|
|
}
|
|
|
|
ui_test() {
|
|
windmill_prepare
|
|
}
|
|
|
|
server_test() {
|
|
if [ ! -d $GRIDWORKS_TEST_DIR/classes ] ; then
|
|
ant build_tests
|
|
echo ""
|
|
fi
|
|
|
|
CLASSPATH="$GRIDWORKS_BUILD_DIR/classes:$GRIDWORKS_TEST_DIR/classes:$GRIDWORKS_TEST_DIR/lib/*:$GRIDWORKS_LIB_DIR/*"
|
|
|
|
if [ "$1" == "" ] ; then
|
|
cd $GRIDWORKS_TEST_DIR/classes
|
|
TESTS=`find . -name '*.class' | sed s@/@.@g | sed s@.class@@ | sed s@..@@`
|
|
cd ../..
|
|
else
|
|
TESTS=$1
|
|
fi
|
|
|
|
RUN_CMD="$JAVA -cp $CLASSPATH $OPTS org.junit.runner.JUnitCore $TESTS"
|
|
|
|
echo "$RUN_CMD"
|
|
echo ""
|
|
|
|
exec $RUN_CMD
|
|
}
|
|
|
|
run() {
|
|
if [ ! -d $GRIDWORKS_BUILD_DIR/classes ] ; then
|
|
is_jar=`ls $GRIDWORKS_LIB_DIR | grep gridworks`
|
|
if [ "$is_jar" == "" ] ; then
|
|
ant build
|
|
echo ""
|
|
fi
|
|
fi
|
|
|
|
if [ -d $GRIDWORKS_BUILD_DIR/classes ] ; then
|
|
add_option "-Dgridworks.autoreloading=true"
|
|
fi
|
|
|
|
if [ "$SYSTEM" == 'Darwin' ] ; then
|
|
add_option "-Xdock:name=Gridworks -Xdock:icon=src/graphics/icon/gridworks.icns"
|
|
fi
|
|
|
|
if [ "$GRIDWORKS_DATA_DIR" != "" ] ; then
|
|
add_option "-Dgridworks.data_dir=$GRIDWORKS_DATA_DIR"
|
|
fi
|
|
|
|
CLASSPATH="$GRIDWORKS_BUILD_DIR/classes:$GRIDWORKS_LIB_DIR/*"
|
|
|
|
RUN_CMD="$JAVA -cp $CLASSPATH $OPTS com.metaweb.gridworks.Gridworks"
|
|
|
|
echo "Starting Gridworks at 'http://${GRIDWORKS_HOST}:${GRIDWORKS_PORT}/'"
|
|
echo ""
|
|
#echo "$RUN_CMD"
|
|
#echo ""
|
|
|
|
exec $RUN_CMD
|
|
}
|
|
|
|
execute() {
|
|
if [ ! -d $GRIDWORKS_BUILD_DIR/classes ] ; then
|
|
ant build
|
|
echo ""
|
|
fi
|
|
|
|
CLASSPATH="$GRIDWORKS_BUILD_DIR/classes:$GRIDWORKS_LIB_DIR/*"
|
|
|
|
RUN_CMD="$JAVA -cp $CLASSPATH $OPTS $*"
|
|
|
|
echo "$RUN_CMD"
|
|
echo ""
|
|
|
|
exec $RUN_CMD $*
|
|
}
|
|
|
|
findbugs() {
|
|
findbugs_prepare
|
|
|
|
ANT_PARAMS="-Dfindbugs.dir=${GRIDWORKS_TOOLS_DIR}/${FINDBUGS_DIR}"
|
|
ant findbugs
|
|
}
|
|
|
|
# -------------------------- script -----------------------------
|
|
|
|
# ----- Normalize the current directory -------------------------
|
|
|
|
cd `dirname $0`
|
|
|
|
# ----- Default values ------------------------------------------
|
|
|
|
OPTS=""
|
|
|
|
SYSTEM=`uname`
|
|
|
|
if [ "$SYSTEM" == "Darwin" ] && [ "$JAVA_HOME" == "" ] ; then
|
|
export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home"
|
|
fi
|
|
|
|
# ----- Load configurations -------------------------------------
|
|
|
|
load_configs gridworks.ini
|
|
|
|
# ----- Make sure there is an appropriate java environment is available -------------
|
|
|
|
if [ ! -z "$JAVA_HOME" ] ; then
|
|
JAVA="$JAVA_HOME/bin/java"
|
|
else
|
|
JAVA=`which java`
|
|
if [ -z "$JAVA" ] ; then
|
|
if [ "$SYSTEM" == 'Darwin' ] ; then
|
|
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
|
|
else
|
|
error "The 'java' command should be in your path or the 'JAVA_HOME' environment variable should be set"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
JAVA_VERSION=`java -version 2>&1 | grep version | cut -d ' ' -f 3 | egrep ^\"1.6`
|
|
if [ -z "$JAVA_VERSION" ] ; then
|
|
error "Gridworks requires java version 6 or later."
|
|
fi
|
|
|
|
# ----- Parse the command line args ------------------------------------------
|
|
|
|
while [ $# -ne 0 ] ; do
|
|
case "$1" in
|
|
-h) usage;;
|
|
-p) shift; GRIDWORKS_PORT="$1"; shift; continue;;
|
|
-i) shift; GRIDWORKS_HOST="$1"; shift; continue;;
|
|
-w) shift; GRIDWORKS_WEBAPP="$1"; shift; continue;;
|
|
-d) shift; GRIDWORKS_DATA_DIR="$1"; shift; continue;;
|
|
-m) shift; GRIDWORKS_MEMORY="$1"; shift; continue;;
|
|
--debug) shift; add_option '-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n'; continue;;
|
|
--jmx) shift; add_option '-Dcom.sun.management.jmxremote'; continue;;
|
|
-*) fail "Invalid option: $1";;
|
|
*) break;;
|
|
esac
|
|
done
|
|
|
|
ACTION=$1; shift
|
|
|
|
if [ "$ACTION" == "" ]; then
|
|
ACTION="run"
|
|
fi
|
|
|
|
# ----- Verify and Set Required Environment Variables -------------------------
|
|
|
|
if [ "$JAVA_OPTIONS" == "" ] ; then
|
|
JAVA_OPTIONS=""
|
|
fi
|
|
add_option "$JAVA_OPTIONS"
|
|
|
|
if [ "$GRIDWORKS_MEMORY" == "" ] ; then
|
|
GRIDWORKS_MEMORY="1024M"
|
|
fi
|
|
add_option "-Xms256M -Xmx$GRIDWORKS_MEMORY"
|
|
|
|
if [ "$GRIDWORKS_PORT" == "" ] ; then
|
|
GRIDWORKS_PORT="3333"
|
|
fi
|
|
add_option "-Dgridworks.port=$GRIDWORKS_PORT"
|
|
|
|
if [ "$GRIDWORKS_HOST" == "" ] ; then
|
|
GRIDWORKS_HOST="127.0.0.1"
|
|
fi
|
|
add_option "-Dgridworks.host=$GRIDWORKS_HOST"
|
|
|
|
if [ "$GRIDWORKS_WEBAPP" == "" ] ; then
|
|
GRIDWORKS_WEBAPP="src/main/webapp"
|
|
fi
|
|
add_option "-Dgridworks.webapp=$GRIDWORKS_WEBAPP"
|
|
|
|
if [ "$GRIDWORKS_TEST_DIR" == "" ] ; then
|
|
GRIDWORKS_TEST_DIR="tests"
|
|
fi
|
|
|
|
if [ "$GRIDWORKS_BUILD_DIR" == "" ] ; then
|
|
GRIDWORKS_BUILD_DIR="build"
|
|
fi
|
|
|
|
if [ "$GRIDWORKS_LIB_DIR" == "" ] ; then
|
|
GRIDWORKS_LIB_DIR="lib"
|
|
fi
|
|
|
|
if [ "$GRIDWORKS_TOOLS_DIR" == "" ] ; then
|
|
GRIDWORKS_TOOLS_DIR="tools"
|
|
fi
|
|
|
|
if [ "$GRIDWORKS_DIST_DIR" == "" ] ; then
|
|
GRIDWORKS_DIST_DIR="dist"
|
|
fi
|
|
|
|
# ----- Respond to the action given --------------------------------------------
|
|
|
|
case "$ACTION" in
|
|
build) build_prepare; ant build;;
|
|
clean) ant clean;;
|
|
distclean) ant distclean;;
|
|
test) test $1;;
|
|
ui_test) ui_test $1;;
|
|
server_test) server_test $1;;
|
|
findbugs) findbugs;;
|
|
run) run;;
|
|
execute) execute $*;;
|
|
mac_dist) mac_dist $1;;
|
|
windows_dist) windows_dist $1;;
|
|
linux_dist) linux_dist $1;;
|
|
dist) dist $1;;
|
|
*) usage; ;;
|
|
esac
|