From c287e55a8548ab961c5fb06a5e88fc90490963dd Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Tue, 12 Jun 2018 13:45:09 +1000 Subject: [PATCH] fix(ZNTA-2532) fix liquibase configuration (#853) * Test: ensure build fails if liquibase does * Configure liquibase and appserver to use basedir/target/documents * Download mysql/slf4j if required --- server/etc/scripts/configure-app-server.js | 4 +- server/etc/scripts/runJbossCli.groovy | 1 + server/etc/scripts/types.d.ts | 1 + server/functional-test/pom.xml | 5 ++ .../src/main/webapp/WEB-INF/liquibase | 47 ++++++++++++++++--- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/server/etc/scripts/configure-app-server.js b/server/etc/scripts/configure-app-server.js index e1cde834907..fabce819dc2 100755 --- a/server/etc/scripts/configure-app-server.js +++ b/server/etc/scripts/configure-app-server.js @@ -197,7 +197,9 @@ function parseArgs(args) { case '--integration-test': stderr('Enabling test-only configuration') opts.consoleLogLevel = 'INFO' - opts.fileDir = './target/documents' + // user.dir is Maven's basedir (eg server/functional-test) + // see also LIQUIBASE_JVM_OPTS in functional-test/pom.xml + opts.fileDir = java.lang.System.getProperty('user.dir') + '/target/documents' opts.zanataHomeDir = '${jboss.server.data.dir}/zanata' pushAll(opts.configCallbacks, configCallbacksForIntegrationTest()) break diff --git a/server/etc/scripts/runJbossCli.groovy b/server/etc/scripts/runJbossCli.groovy index 831e914c337..149d9ebedc4 100644 --- a/server/etc/scripts/runJbossCli.groovy +++ b/server/etc/scripts/runJbossCli.groovy @@ -77,6 +77,7 @@ println "Executing $scriptName" // 'as String[]' coerces any GStrings and Files to Strings def processBuilder = new ProcessBuilder(args as String[]) +processBuilder.directory(project.basedir) processBuilder.environment().put('JBOSS_HOME', appServerHome) def resultCode = processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT).redirectError(ProcessBuilder.Redirect.INHERIT).start().waitFor() if (resultCode) { diff --git a/server/etc/scripts/types.d.ts b/server/etc/scripts/types.d.ts index 52a1ddd4e22..3ae48a1ef2f 100644 --- a/server/etc/scripts/types.d.ts +++ b/server/etc/scripts/types.d.ts @@ -7,6 +7,7 @@ declare namespace java { namespace System { const err: PrintStream const out: PrintStream + const getProperty: (name: string) => string } } } diff --git a/server/functional-test/pom.xml b/server/functional-test/pom.xml index 2867b50b91d..2a6e602744b 100644 --- a/server/functional-test/pom.xml +++ b/server/functional-test/pom.xml @@ -735,9 +735,14 @@ /bin/sh + -e ${server.dir}/zanata-test-war/target/zanata-test-war-${project.version}/WEB-INF/liquibase update + + + -Dzanata.file.directory=${basedir}/target/documents + ${liquibase.exec.skip} ${basedir}/target/test-classes diff --git a/server/zanata-war/src/main/webapp/WEB-INF/liquibase b/server/zanata-war/src/main/webapp/WEB-INF/liquibase index 03376c30086..6fedff6f899 100755 --- a/server/zanata-war/src/main/webapp/WEB-INF/liquibase +++ b/server/zanata-war/src/main/webapp/WEB-INF/liquibase @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh -e ### USAGE ### liquibase [liquibase options] ### @@ -13,18 +13,51 @@ ### This is a convenience script to run liquibase with suitable ### Zanata settings ### see http://liquibase.org/manual/command_line - -# If you need mysql/slf4j jars: yum install mysql-connector-java slf4j +### +### It requires an exploded zanata war. +### +### This script will download mysql-connector-java and slf4j if required, but +### on Fedora/RHEL you can avoid this: yum install mysql-connector-java slf4j SCRIPT_PATH=`dirname ${BASH_SOURCE[0]}` war=$SCRIPT_PATH/.. +mysql_jar=/usr/share/java/mysql-connector-java.jar +if [[ ! -r ${mysql_jar} ]]; then + mysql_jar=$(mktemp --tmpdir) + trap "rm -f ${mysql_jar}" EXIT + g=mysql + a=mysql-connector-java + v=5.1.46 + curl "https://repo1.maven.org/maven2/$g/$a/$v/$a-$v.jar" -o ${mysql_jar} +fi + +slf4j_api_jar=/usr/share/java/slf4j/api.jar +if [[ ! -r ${slf4j_api_jar} ]]; then + slf4j_api_jar=$(mktemp --tmpdir) + trap "rm -f ${slf4j_api_jar}" EXIT + g=org/slf4j + a=slf4j-api + v=1.7.25 + curl "https://repo1.maven.org/maven2/$g/$a/$v/$a-$v.jar" -o ${slf4j_api_jar} +fi + +slf4j_simple_jar=/usr/share/java/slf4j/simple.jar +if [[ ! -r ${slf4j_simple_jar} ]]; then + slf4j_simple_jar=$(mktemp --tmpdir) + trap "rm -f ${slf4j_simple_jar}" EXIT + g=org/slf4j + a=slf4j-simple + v=1.7.25 + curl "https://repo1.maven.org/maven2/$g/$a/$v/$a-$v.jar" -o ${slf4j_simple_jar} +fi + classpath=\ $(echo \ $war/WEB-INF/classes/ \ - /usr/share/java/mysql-connector-java.jar \ - /usr/share/java/slf4j/simple.jar \ - /usr/share/java/slf4j/api.jar \ + ${mysql_jar} \ + ${slf4j_simple_jar} \ + ${slf4j_api_jar} \ $war/WEB-INF/lib/*.jar \ | sed 's/ /:/g') @@ -37,7 +70,7 @@ else defs=--defaultsFile=$HOME/.config/liquibase.properties fi -java $LIQUIBASE_JVM_OPTS \ +exec java $LIQUIBASE_JVM_OPTS \ -jar $war/WEB-INF/lib/liquibase-core*.jar \ --classpath $classpath \ --changeLogFile db/db.changelog.xml \