diff --git a/.travis.yml b/.travis.yml index 609283c..064a2b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,61 +16,77 @@ addons: env: global: - #Oracle 11g XE R2 docker variables + # Docker variables: + - DOCKHER_HUB_REPO="${DOCKER_USER}/oracledb" - ORACLE_VERSION=11g-r2-xe - CONNECTION_STR='127.0.0.1:1521/XE' - DOCKER_OPTIONS='--shm-size=1g' - # Docker database Env - - SQLCLI="$HOME/sqlcl/bin/sql" - - OJDBC_HOME="$HOME/sqlcl/lib" - - ORACLE_PWD="oracle" - - UT3_DOCKER_REPO="utplsqlv3/oracledb" - - DOCKHER_HUB_REPO="${DOCKER_BASE_TAG:-$UT3_DOCKER_REPO}" - # project variables + + # SYS account password for DB - could be stored in Travis secrets + - ORACLE_SYS_PASS="oracle" + # Adding utPLSQL-cli to path - to be able to invoke "utplsql" from command line + - PATH=$PATH:${TRAVIS_BUILD_DIR}/utPLSQL-cli/bin + # Adding Oracle SQLCL to path - to be able to invoke "sql" from command line + - PATH=$PATH:${TRAVIS_BUILD_DIR}/sqlcl/bin + + # Project-specific database variables + # used for creating the user in database, deploying source code and tests as well as executing the tests - DB_USER=ut3_demo - - DB_PASS=LHZYPbWvYdu2ctp8 - ##utPLSQL variables + - DB_PASS=ut3_demo + #utPLSQL variables - UTPLSQL_DIR="utPLSQL" - - ORA_SDTZ='Europe/London' #Needed as a client parameter - - TZ='Europe/London' #Needed as a DB Server parameter - ##utPLSQL-cli variables - - UTPLSQL_CLI_VERSION="3.1.0" - CACHE_DIR=$HOME/.cache - - MAVEN_HOME=/usr/local/maven - - MAVEN_CFG=$HOME/.m2 + # Additionally, you need to set following variables as Travis secrets: + # DOCKER_USER + # DOCKER_PASSWORD + # ORACLE_OTN_USER + # ORACLE_OTN_PASSWORD matrix: - - UTPLSQL_3_VERSION='develop' - - UTPLSQL_3_VERSION='v3.0.0' VERSION_PLACEHOLDER='utPLSQL - Version X.X.X.X' - - UTPLSQL_3_VERSION='v3.0.4' VERSION_PLACEHOLDER='X.X.X.X' - - UTPLSQL_3_VERSION='v3.1.1' + - UTPLSQL_VERSION='develop' + - UTPLSQL_VERSION='v3.0.0' VERSION_PLACEHOLDER='utPLSQL - Version X.X.X.X' + - UTPLSQL_VERSION='v3.0.4' VERSION_PLACEHOLDER='X.X.X.X' + - UTPLSQL_VERSION='v3.1.1' cache: pip: true directories: - $CACHE_DIR - node_modules - - $MAVEN_CFG before_install: - # download latest utPLSQL develop code - - git clone --depth=1 --branch=${UTPLSQL_3_VERSION} https://github.com/utPLSQL/utPLSQL.git ${UTPLSQL_DIR} - # download latest utPLSQL-cli release - - curl -Lk -o utPLSQL-cli.zip https://github.com/utPLSQL/utPLSQL-cli/releases/download/v${UTPLSQL_CLI_VERSION}/utPLSQL-cli.zip - # update version placeholder before install - - if [[ -n ${VERSION_PLACEHOLDER} ]] ; then sed -i "s/${VERSION_PLACEHOLDER}/${UTPLSQL_3_VERSION}/g" ${UTPLSQL_DIR}/source/core/ut_utils.pks; fi + # Download Oracle sqlcl + - .travis/install_sqlcl.sh -u ${ORACLE_OTN_USER} -p ${ORACLE_OTN_PASSWORD} -d ${CACHE_DIR} -o ${TRAVIS_BUILD_DIR} + # Check if Oracle sqlcl it is installed correctly + - sql -v - -install: + # download and unzip utPLSQL-cli release + - curl -Lk -o utPLSQL-cli.zip "https://github.com/utPLSQL/utPLSQL-cli/releases/download/v3.1.6/utPLSQL-cli.zip" - unzip utPLSQL-cli.zip && chmod -R u+x utPLSQL-cli - # get ojdbc.jar from Oracle using maven - - bash .travis/maven_cfg.sh - - bash .travis/install_sqlcl.sh - # download and run Oracle docker DB image - - bash .travis/start_db.sh + # copy ojdbc.jar from sqlcl to utPSLQL-cli so it can be visible to utPSLQL-cli + - cp sqlcl/lib/ojdbc8.jar utPLSQL-cli/lib && cp sqlcl/lib/orai18n.jar utPLSQL-cli/lib + + # Download specified version of utPLSQL from utPLSQL github repo + # Allows any utPLSQL branch/tag name to be used + - git clone --depth=1 --branch=${UTPLSQL_VERSION} https://github.com/utPLSQL/utPLSQL.git ${UTPLSQL_DIR} - # Install utPLSQL + # update version placeholder before install + # This is only needed when downloading utPLSQL versions older than 3.1 + - if [[ -n ${VERSION_PLACEHOLDER} ]] ; then sed -i "s/${VERSION_PLACEHOLDER}/${UTPLSQL_VERSION}/g" ${UTPLSQL_DIR}/source/core/ut_utils.pks; fi + + - docker login -u "${DOCKER_USER}" -p "${DOCKER_PASSWORD}" + # download Oracle Database docker image from private repo and start the DB + - time docker pull ${DOCKHER_HUB_REPO}:${ORACLE_VERSION} + # start the docker container (DB) + - docker run -d --name ${ORACLE_VERSION} ${DOCKER_OPTIONS} -p 1521:1521 ${DOCKHER_HUB_REPO}:${ORACLE_VERSION} + # Wait for DB startup + - time docker logs -f ${ORACLE_VERSION} | grep -m 1 "DATABASE IS READY TO USE!" --line-buffered + + # Install utPLSQL into the Database - .travis/install_utplsql.sh - - .travis/setup_account.sh + +install: + # Create the demo project DB user account + - source/setup_db_account.sh # Install project sources and tests - source/install.sh - test/install.sh diff --git a/.travis/download.sh b/.travis/download.sh deleted file mode 100755 index fdbcdef..0000000 --- a/.travis/download.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash -set -e - -if [ "$ORACLE_OTN_USER" == "" ] || [ "$ORACLE_OTN_PASSWORD" == "" ]; then - echo "Error: Oracle OTN username/password not specified." - exit 1 -fi - -PRODUCT="" - -# Call the casperjs script to return the download url. -# Then download the file using curl. -downloadFile() { - downloadUrl=$(exec casperjs download.js $ORACLE_OTN_USER $ORACLE_OTN_PASSWORD $1 $2) - downloadUrl=${downloadUrl%$'\r'} - echo "DownloadURL: $downloadUrl" - curl -o $3 -L "$downloadUrl" -} - -############################# -########### START ########### -############################# - -while getopts "p:" OPTNAME; do - case "${OPTNAME}" in - "p") PRODUCT="${OPTARG}" ;; - esac -done - -if [ "$PRODUCT" == "se12c" ]; then - agreementUrl="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html" - downloadUrl="http://download.oracle.com/otn/linux/oracle12c/121020/linuxamd64_12102_database_se2_1of2.zip" - outputFile=linuxamd64_12102_database_se2_1of2.zip - downloadFile $agreementUrl $downloadUrl $outputFile - agreementUrl="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html" - downloadUrl="http://download.oracle.com/otn/linux/oracle12c/121020/linuxamd64_12102_database_se2_2of2.zip" - outputFile=linuxamd64_12102_database_se2_2of2.zip - downloadFile $agreementUrl $downloadUrl $outputFile - exit 0 -fi - -if [ "$PRODUCT" == "ee12c" ]; then - agreementUrl="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html" - downloadUrl="http://download.oracle.com/otn/linux/oracle12c/121020/linuxamd64_12102_database_1of2.zip" - outputFile=linuxamd64_12102_database_1of2.zip - downloadFile $agreementUrl $downloadUrl $outputFile - agreementUrl="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html" - DOWNLOAD_URL="http://download.oracle.com/otn/linux/oracle12c/121020/linuxamd64_12102_database_2of2.zip" - outputFile=linuxamd64_12102_database_2of2.zip - downloadFile $agreementUrl $downloadUrl $outputFile - exit 0 -fi - -if [ "$PRODUCT" == "xe11g" ]; then - agreementUrl="http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html" - downloadUrl="https://edelivery.oracle.com/akam/otn/linux/oracle11g/xe/oracle-xe-11.2.0-1.0.x86_64.rpm.zip" - outputFile=oracle-xe-11.2.0-1.0.x86_64.rpm.zip - downloadFile $agreementUrl $downloadUrl $outputFile - exit 0 -fi - -if [ "$PRODUCT" == "sqlcl" ]; then - agreementUrl="http://www.oracle.com/technetwork/developer-tools/sqlcl/downloads/index.html" - downloadUrl="https://download.oracle.com/otn/java/sqldeveloper/sqlcl-18.3.0.259.2029.zip" - outputFile=sqlcl-18.3.0.259.2029.zip - downloadFile $agreementUrl $downloadUrl $outputFile - exit 0 -fi - -echo "Error: invalid product: $PRODUCT" -exit 1 diff --git a/.travis/install_sqlcl.sh b/.travis/install_sqlcl.sh index 9743dda..1b9d489 100755 --- a/.travis/install_sqlcl.sh +++ b/.travis/install_sqlcl.sh @@ -1,20 +1,66 @@ #!/bin/bash set -e +###############################3 +# Declarations +###############################3 +SCRIPT_DIR="$( dirname "${BASH_SOURCE[0]}" )" SQLCL_FILE=sqlcl-18.3.0.259.2029.zip -cd .travis +AGREEMENT_URL="http://www.oracle.com/technetwork/developer-tools/sqlcl/downloads/index.html" +DOWNLOAD_URL="https://download.oracle.com/otn/java/sqldeveloper/${SQLCL_FILE}" +ZIP_TARGET_DIR="" +OTN_USER="" +OTN_PASS="" +OUTPUT_DIR="" -# Download if not present on cache dir. -if [ ! -f $CACHE_DIR/$SQLCL_FILE ]; then +# Call the casperjs script to return the download url. Then download the file using curl. +downloadFile() { + user=$1 + pass=$2 + agreementUrl=$3 + downloadUrl=$4 + outputFile=$5 + echo "Signing-in" + downloadUrl=$(exec casperjs ${SCRIPT_DIR}/download.js ${user} ${pass} ${agreementUrl} ${downloadUrl}) + downloadUrl=${downloadUrl%$'\r'} + echo "DownloadURL: $downloadUrl" + curl -o ${outputFile} -L "$downloadUrl" +} + +###############################3 +# Main script +###############################3 + +#Evaluate script input parameters +while getopts "p:u:d:o:" OPTNAME; do + case "${OPTNAME}" in + "d") ZIP_TARGET_DIR="${OPTARG}" ;; + "u") OTN_USER="${OPTARG}" ;; + "p") OTN_PASS="${OPTARG}" ;; + "o") OUTPUT_DIR="${OPTARG}" ;; + esac +done + +#Check parameters +if [[ "${ZIP_TARGET_DIR}" == "" ]]; then + ZIP_TARGET_DIR="." +fi +if [[ "$OTN_USER" == "" ]] || [[ "$OTN_PASS" == "" ]]; then + echo "Error: Oracle OTN username/password not specified." + exit 1 +fi +if [[ "$OUTPUT_DIR" == "" ]]; then + echo "Error: Output directory not specified" + exit 1 +fi + +if [[ ! -f "${ZIP_TARGET_DIR}/${SQLCL_FILE}" ]]; then npm install -g phantomjs-prebuilt casperjs - bash download.sh -p sqlcl - mv $SQLCL_FILE $CACHE_DIR + echo "Downloading sqlcl from Oracle" + downloadFile ${OTN_USER} ${OTN_PASS} ${AGREEMENT_URL} ${DOWNLOAD_URL} "${ZIP_TARGET_DIR}/${SQLCL_FILE}" else echo "Installing sqlcl from cache..." fi; -# Install sqlcl. -unzip -q $CACHE_DIR/$SQLCL_FILE -d $HOME - -# Check if it is installed correctly. -$SQLCLI -v +echo "Unzipping sqlcl into: ${ZIP_TARGET_DIR}" +unzip -q "${ZIP_TARGET_DIR}/${SQLCL_FILE}" -d ${OUTPUT_DIR} diff --git a/.travis/install_utplsql.sh b/.travis/install_utplsql.sh index b73d3f4..13d4ab2 100755 --- a/.travis/install_utplsql.sh +++ b/.travis/install_utplsql.sh @@ -2,11 +2,6 @@ set -ev -cd $UTPLSQL_DIR/source +cd ${UTPLSQL_DIR}/source -${SQLCLI} -S -L sys/${ORACLE_PWD}@//${CONNECTION_STR} AS SYSDBA @install_headless.sql - -#${SQLCLI} -L -S sys/${ORACLE_PWD}@//${CONNECTION_STR} AS SYSDBA < - - 4.0.0 - org.utplsql - utplsql - 3.0.4-SNAPSHOT - jar - - utPLSQL - https://github.com/utPLSQL/utPLSQL - - - UTF-8 - - - - - com.oracle.jdbc - ojdbc8 - 12.2.0.1 - compile - - - com.oracle.jdbc - orai18n - 12.2.0.1 - compile - - - - - - maven.oracle.com - - true - - - false - - https://maven.oracle.com - default - - - - - - maven.oracle.com - https://maven.oracle.com - - - - - - - io.packagecloud.maven.wagon - maven-packagecloud-wagon - 0.0.6 - - - - diff --git a/.travis/settings.xml b/.travis/settings.xml deleted file mode 100644 index 731ef52..0000000 --- a/.travis/settings.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - maven.oracle.com - ${env.ORACLE_OTN_USER} - ${env.ORACLE_OTN_PASSWORD} - - - ANY - ANY - OAM 11g - - - - - - http.protocol.allow-circular-redirects - %b,true - - - - - - - - - diff --git a/.travis/start_db.sh b/.travis/start_db.sh deleted file mode 100755 index e426569..0000000 --- a/.travis/start_db.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -set -e - -# Private Repo Login -if [ ! -f $CACHE_DIR/.docker/config.json ]; then - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD" - mkdir -p $CACHE_DIR/.docker && cp $HOME/.docker/config.json $CACHE_DIR/.docker/ -else - echo "Using docker login from cache..." - mkdir -p $HOME/.docker && cp $CACHE_DIR/.docker/config.json $HOME/.docker/ -fi - -df -h -time docker pull $DOCKHER_HUB_REPO:$ORACLE_VERSION -df -h -docker run -d --name $ORACLE_VERSION $DOCKER_OPTIONS -p 1521:1521 $DOCKHER_HUB_REPO:$ORACLE_VERSION -time docker logs -f $ORACLE_VERSION | grep -m 1 "DATABASE IS READY TO USE!" --line-buffered -df -h diff --git a/source/install.sh b/source/install.sh index 312df4c..f09fd6b 100755 --- a/source/install.sh +++ b/source/install.sh @@ -2,7 +2,7 @@ set -ev -${SQLCLI} -L -S ${DB_USER}/${DB_PASS}@//${CONNECTION_STR} <