libreccm/ccm.sh

477 lines
13 KiB
Bash
Executable File

#!/bin/bash
# Provides shortcuts for working with LibreCCM
wildflyversion="10.1.0.Final"
wildflypidfile="./WILDFLY_PID"
# Build the project site.
#
# @param $1 (optional): Maven profile to use.
#
buildsite() {
if [ -d "$1" ]; then
mvn clean package site site:stage -Dmaven.test.failure.ignore=true -P$1
else
mvn clean package site site:stage -Dmaven.test.failure.ignore=true
fi
}
# Build all modules
#
# @param $1 (optional): Maven profile to use.
#
build() {
if [ -d "$1" ]; then
mvn clean package -P$1
else
mvn clean package
fi
}
# Build a module
#
# @param $1 (mandantory): The artifact ID of the module to build.
# @param $2 (optional) : The profile to use.
#
buildmodule() {
if [ -n "$1" ]; then
if [ -n "$2" ]; then
mvn clean package -P$2 -pl $1 -am
else
mvn clean package -pl $1 -am
fi
else
echo "Usage: ccm.sh build-module MODULE [PROFILE]"
exit 1
fi
}
# Helper method for starting runtime for integration tests
# @param $1 (mandantory): Runtime to start
#
starttestruntime() {
if [ "$1"="wildfly" ]; then
echo "Starting Wildfly $wildversion for running tests..."
wildflyhome=""
if [ -n "$JBOSS_HOME" ]; then
echo "Setting wildflyhome to JBOSS_HOME"
wildflyhome=$JBOSS_HOME
elif [ -d "./runtime/wildfly-$wildflyversion" ]; then
echo "Setting wildflyhome..."
wildflyhome="./runtime/wildfly-$wildflyversion"
else
echo "There is not Wildfly in ./runtime/ and JBOSS_HOME is not set."
echo "Please call install-runtime or set JBOSS_HOME"
exit 1
fi
pushd $wildflyhome
sh "LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PID_FILE=$wildflypidfile ./bin/standalone.sh"
popd
echo "Waiting 120s for Wildfly to start up..."
sleep 120
if [ -n "$profile" ]; then
mvn clean test -P$profile
else
mvn clean test
fi
echo "Stopping Wildfly..."
pushd $wildflyhome
kill $(<"$wildflypidfile")
popd
elif [ "$1"="tomee" ]; then
echo "Not implemented yet."
exit 1
else
echo "Unsupported runtime $1. Supported runtimes are wildfly and tomee."
exit 1
fi
}
# Helper method for stopping the test runtime
#
# @param $1 (mandantory): Runtime to stop
#
stoptestruntime() {
if [ "$1" = "wildfly" ]; then
echo "Stopping Wildfly..."
wildflyhome=""
if [ -n "$JBOSS_HOME" ]; then
echo "Setting wildflyhome to JBOSS_HOME"
wildflyhome=$JBOSS_HOME
elif [ -d "./runtime/wildfly-$wildflyversion" ]; then
echo "Setting wildflyhome..."
wildflyhome="./runtime/wildfly-$wildflyversion"
else
echo "There is not Wildfly in ./runtime/ and JBOSS_HOME is not set."
echo "Please call install-runtime or set JBOSS_HOME"
exit 1
fi
pushd $wildflyhome
kill $(<"$wildflypidfile")
popd
elif [ "$1" = "tomee" ]; then
echo "Not implemented yet."
exit 1
else
echo "Unsupported runtime $1. Supported runtime are wildfly and tomee."
exit 1
fi
}
# Run all tests
testall() {
startruntime=false
runtime="wildfly"
profile=""
if [ "$1" = "-s" ]; then
startruntime=true
if [ "$2" = "-r" ]; then
runtime=$3
profile=$4
else
profile=$2
fi
fi
if [ $startruntime ]; then
starttestruntime $runtime
fi
if [ -n "$profile" ]; then
echo "Running tests for all modules with profile $profile..."
mvn clean test -P$profile
else
echo "Running tests for all modules..."
mvn clean test
fi
if [ $startruntime ]; then
stoptestruntime $runtime
fi
}
# Run tests for a module
testmodule() {
startruntime=false
runtime="wildfly"
module=""
profile=""
if [ "$1" = "-r" ]; then
startruntime=true
if [ "$2" = "-r" ]; then
runtime=$3
module=$4
profile=$5
else
module=$2
profile=$3
fi
fi
if [ -z "$module" ]; then
echo "Error: No module to test. Exiting."
exit 1
fi
if [ $startruntime ]; then
starttestruntime $runtime
fi
if [ -n "$profile" ]; then
echo "Running tests for module $module with profile $profile..."
mvn clean test -P$profile -pl $module -am
else
echo "Running tests for module $module..."
mvn clean test -pl $module $am
fi
if [ $startruntime ]; then
stoptestruntime $runtime
fi
}
# Run a single testsuite or test
runtest() {
startruntime=false
runtime="wildfly"
module=""
testtorun=""
profile=""
if [ "$1" = "-r" ]; then
startruntime=true
if [ "$2" = "-r" ]; then
runtime=$3
module=$4
profile=$5
else
module=$2
profile=$3
fi
fi
if [ -z module ]; then
echo "No module provided. Please provide the module which contains the test to run. Exiting."
exit 1
fi
if [ -z testtorun ]; then
echo "No test to run provided. Exiting."
exit 1
fi
if [ $startruntime ]; then
starttestruntime $runtime
fi
if [ -n "$profile" ]; then
echo "Running tests for module $module with profile $profile..."
mvn clean test -Dtest=$testtorun -DfailIfNoTests=false -P$profile -pl $module -am
else
echo "Runnign tests for module $module..."
mvn clean test -D$testtorun -pl $module $am
fi
if [ $startruntime ]; then
stoptestruntime $runtime
fi
}
installruntime() {
runtime=""
if [ -z $1 ]; then
runtime="wildfly"
else
runtime=$1
fi
echo "Installing runtime $runtime..."
if [ $runtime = wildfly ]; then
if [ -d ./runtime/wildfly-$wildflyversion ]; then
echo "Wildfly $wildflyversion is already installed as runtime. Exiting"
exit 1
fi
if [ ! -d ./runtime ]; then
mkdir ./runtime
fi
pushd runtime
if [ -f wildfly-$wildflyversion.tar.gz ]; then
echo "Wildfly $wildflyversion has already been downloaded, using existing archive."
else
wget http://download.jboss.org/wildfly/$wildflyversion/wildfly-$wildflyversion.tar.gz
fi
if [ ! -f wildfly-$wildflyversion.tar.gz ]; then
echo "Failed to download Wildfly."
exit 1
fi
tar vxzf wildfly-$wildflyversion.tar.gz
echo ""
echo "Wildfly extracted successfully. Please provide a username and password for a Wildfly management user (admin):"
echo ""
username=""
while [ -z $username ]; do
echo -n "Username.......: "
read username
if [ -z $username ]; then
echo "Username can't be empty!"
fi
done
password=""
passwordrepeat=""
while [ -z $password -o $password != $passwordrepeat ]; do
echo -n "Password.......: "
read -s password
if [ -z $password ]; then
echo ""
echo "Password can't be empty!"
continue
fi
echo ""
echo -n "Repeat password: "
read -s passwordrepeat
if [ $password != $passwordrepeat ]; then
echo ""
echo "Passwords do not match."
continue
fi
done
echo ""
echo "Creating Wildfly management user $username..."
pushd wildfly-$wildflyversion
sh ./bin/add-user.sh $username $password
popd
popd
echo ""
echo "Wildfly $wildflyversion successfully installed in ./runtime."
echo "Before running LibreCCM you have to configure a datasource."
echo "To do that run"
echo ""
echo "ccm.sh run --with-runtime wildfly "
echo ""
echo "Then open a browser and go to "
echo ""
echo "localhost:9990"
echo ""
echo "and configure a datasource. Refer to the Wildfly documentation for more details."
elif [ $runtime = tomee ]; then
echo "Not implememented yet."
else
echo "Unsupported runtime. Supported runtimes are wildfly (default) and tomee."
fi
}
run() {
runtime=""
bundle=""
if [ "$1" = "-r" ]; then
runtime="$2"
bundle="$3"
elif [ "$1" = "--with-runtime" ]; then
runtime="$2"
bundle="$3"
else
runtime="wildfly"
bundle="$2"
fi
if [ -z $bundle ]; then
echo "Running Wilfly $wildversion without a bundle (only starting Wilflybut not deploying LibreCCM)..."
else
echo "Running bundle $bundle with Wildfly $wildflyversion..."
fi
if [ $runtime = "wildfly" ]; then
wildflyhome=""
if [ -n "$JBOSS_HOME" ]; then
echo "Setting wildflyhome to JBOSS_HOME"
wildflyhome=$JBOSS_HOME
elif [ -d "./runtime/wildfly-$wildflyversion" ]; then
echo "Setting wildflyhome..."
wildflyhome="./runtime/wildfly-$wildflyversion"
else
echo "There is not Wildfly in ./runtime/ and JBOSS_HOME is not set."
echo "Please call install-runtime or set JBOSS_HOME"
exit 1
fi
echo "Starting Wildfly in $wildflyhome..."
if [ -z $bundle ]; then
pushd $wildflyhome
sh "./bin/standalone.sh"
popd
else
mvn -Djboss-as.home=${wildflyhome} package wildfly:run -DskipTests -pl $bundle -am -Pgeneric
fi
elif [ $runtime = "tomee" ]; then
echo "Not implemented yet"
exit 0
else
echo "Unknown runtime $runtime. Supported runtimes are: wildfly tomee"
exit 1
fi
}
stopruntime() {
runtime=""
if [ -n "$1" ]; then
runtime=$1
else
runtime="wildfly"
fi
if [ runtime = "wildfly"]; then
wildflyhome=""
if [ -n $JBOSS_HOME ]; then
wildflyhome="$JBOSS_HOME"
elif [ -d "./runtime/wildfly-$wildflyversion" ]; then
wildflyhome="./runtime/wildfly-$wildflyversion"
else
echo "There is no Wildfly in ./runtime/ and JBOSS_HOME is not set."
echo "Exiting."
exit 1
fi
bin/standalone.sh
elif [ $runtime = "tomee"]; then
echo "Not implemented yet."
exit 0
else
echo "Unknown runtime."
exit 1
fi
}
showhelp() {
echo "ccm.sh is a helper script for building and running LibreCCM in a
development environment. It provides shortcuts for several Maven goals. The
available subcommands are:
build-site [PROFILE] : Builds the Maven project
site.
build [PROFILE] : Build all LibreCCM
modules.
build-module MODULE [PROFILE] : Build a specific LibreCCM
module.
test-all [-s [-r RUNTIME]] [PROFILE] : Run tests for all modules.
test-module [-s [-r RUNTIME]] MODULE [PROFILE] : Run tests for a specific
LibreCCM module.
run-test [-s [-r RUNTIME]] MODULE TEST [PROFILE]: Run a specific testsuite
or a single test.
install-runtime [RUNTIME] : Download and install a
runtime (application
server) into ./runtime
run [-r RUNTIME] [BUNDLE] : Run a runtime
(application server)
help : Show this help message.
A detailed description of the subcommands is provided in ccm-readme.txt"
exit 0;
}
case $1 in
build-site) buildsite $2 ;;
build) build $2 ;;
build-module) buildmodule $2 ;;
test-all) testall $2 $3 $4 ;;
test-module) testmodule $2 $3 $4 $5 ;;
run-test) runtest $2 $3 $4 $5 $6 ;;
install-runtime) installruntime $2 ;;
run) run $2 $3 $4 ;;
stop-runtime) stopruntime $2 ;;
help) showhelp ;;
*) showhelp ;;
esac