#!/bin/bash -e KC_DIR=~/kc if [ "$KC_SRC_HOME" != "" ]; then SRC_DIR="$KC_SRC_HOME" else SRC_DIR=$(readlink -f "$0" | sed 's|/misc/scripts/kcw||') fi DL_DIR=~/Downloads ARGS="" while [ "$1" != "" ]; do if [ "$1" == "dev" ]; then INSTALL="dev" elif [ "$1" == "dev-build" ]; then INSTALL="dev" BUILD=1 elif [ "$1" == "rel" ]; then INSTALL=$(curl --silent https://api.github.com/repos/keycloak/keycloak/releases/latest | jq -r .tag_name) elif [[ "$1" =~ "rel=" ]]; then INSTALL=`echo $1 | cut -d '=' -f 2` elif [ "$1" == "nightly" ]; then INSTALL="nightly" elif [ "$1" = "help" ]; then echo "Usage: kcw [command] [kc commands]" echo " dev install from local fork" echo " dev-build build and install from local fork" echo " nightly install nightly release" echo " rel install latest release" echo " rel[=version] install specific version" echo "" echo "Environment variables:" echo " KCW_PROVIDERS comma separated list of providers to install" echo " KCW_CONFIGS comma separated list of config files to install" echo "" echo "Examples:" echo " Start existing install: kcw start-dev" echo " Install nightly and start: kcw nightly start-dev --cluster=none" exit else ARGS="$ARGS $1" fi shift done echo "###########################################################################################" echo "Installing: $INSTALL" echo "Executing: bin/kc.sh$ARGS" echo "###########################################################################################" if [ "$INSTALL" != "" ]; then # Clean current install PID=$(ps -e -wwf | grep java | grep "$KC_DIR" | awk '{ print $2 }') if [ "$PID" != "" ]; then echo "" echo "-------------------------------------------------------------------------------------------" echo "Killing existing install" echo "-------------------------------------------------------------------------------------------" kill -9 $PID echo "Killed: $PID" fi if [ -d $KC_DIR ]; then echo "" echo "-------------------------------------------------------------------------------------------" echo "Deleting existing install" echo "-------------------------------------------------------------------------------------------" rm -rf $KC_DIR echo "Deleted $KC_DIR" fi if [ "$INSTALL" == "dev" ]; then VERSION=$(cat $SRC_DIR/pom.xml | grep '' | head -n 2 | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1) if [ "$BUILD" ]; then echo "" echo "-------------------------------------------------------------------------------------------" echo "Building" echo "-------------------------------------------------------------------------------------------" #mvn -pl quarkus/dist -am -DskipTests -f $SRC_DIR/pom.xml -T 1C --offline clean install cd $SRC_DIR ./mvnw -T 1C -Dmaven.build.cache.enabled=true -DskipTests -DskipTestsuite -DskipExamples -DskipAdapters -DskipDocs install fi echo "" echo "-------------------------------------------------------------------------------------------" echo "Installing" echo "-------------------------------------------------------------------------------------------" cd /tmp/ unzip -q $SRC_DIR/quarkus/dist/target/keycloak-$VERSION.zip mv keycloak-$VERSION $KC_DIR echo "Built and installed $VERSION from $SRC_DIR" else VERSION=$INSTALL if [ "$INSTALL" == "nightly" ]; then VERSION=999.0.0-SNAPSHOT fi echo "" echo "-------------------------------------------------------------------------------------------" echo "Installing" echo "-------------------------------------------------------------------------------------------" cd $DL_DIR if [ -f keycloak-$VERSION.zip ]; then if ( ! md5sum keycloak-$VERSION.zip | grep $(wget -q -O - https://github.com/keycloak/keycloak/releases/download/$INSTALL/keycloak-$VERSION.zip.md5) &>/dev/null ); then echo "Checksum doesn't match deleting keycloak-$VERSION.zip" rm keycloak-$VERSION.zip fi fi if [ ! -f keycloak-$VERSION.zip ]; then cd $DL_DIR echo "Downloading keycloak-$VERSION.zip" wget -q https://github.com/keycloak/keycloak/releases/download/$INSTALL/keycloak-$VERSION.zip fi cd /tmp/ unzip -q $DL_DIR/keycloak-$VERSION.zip mv keycloak-$VERSION $KC_DIR echo "Installed $VERSION" fi fi if [ "$KCW_PROVIDERS" != "" ]; then for PROVIDER in $(echo "$KCW_PROVIDERS" | tr "," "\n"); do cp "$PROVIDER" $KC_DIR/providers/ echo "Installed provider: $PROVIDER" done fi if [ "$KCW_CONFIGS" != "" ]; then for CONFIG in $(echo "$KCW_CONFIGS" | tr "," "\n"); do cp "$CONFIG" $KC_DIR/conf/ echo "Installed config file: $CONFIG" done fi if [ "$ARGS" != "" ]; then echo "" echo "-------------------------------------------------------------------------------------------" echo "Running: bin/kc.sh$ARGS" echo "-------------------------------------------------------------------------------------------" export KC_BOOTSTRAP_ADMIN_USERNAME=admin export KC_BOOTSTRAP_ADMIN_PASSWORD=admin export KC_BOOTSTRAP_ADMIN_CLIENT_ID=admin export KC_BOOTSTRAP_ADMIN_CLIENT_SECRET=admin cd $KC_DIR/bin ./kc.sh $ARGS fi