diff --git a/scripts/shell/job/gp/install-meta.sh b/scripts/shell/job/gp/install-meta.sh new file mode 100755 index 0000000..500920d --- /dev/null +++ b/scripts/shell/job/gp/install-meta.sh @@ -0,0 +1,185 @@ +#!/bin/env bash + +show_help() { + echo "Usage: $(basename $0) [--preset|-p] [--executable|-e] [--dry-run|-d] [--help|h]" + echo "Options:" + echo " --help | -h (Optional) Display help information on how to use this script" + echo " --repo-dir | -r (Required) GP's cloned git repository directory" + echo " --install-dir | -d (Required) Where to install Metawizard. Must be a relative path" + echo " --no-download | -no-dl (Optional) Use this if you already have the .jar file in --install-dir (and the dir is already created)" + echo " --no-meta-setup | -no-m (Optional) Use this if you already have MetaWizard installed" + echo " --no-post-steps | -no-p (Optional) Use this if you already have done the post steps" +} + +REPO_DIR="" +INSTALL_DIR="" +SHOULD_DOWNLOAD=true +SHOULD_INSTALL_META=true +SHOULD_DO_POST_STEPS=true + +while [ "$#" -gt 0 ]; do + case "$1" in + --help | -h) + show_help + exit + ;; + --repo-dir | -r) + REPO_DIR="$2" + shift 2 + ;; + --install-dir | -d) + INSTALL_DIR="$2" + shift 2 + ;; + --no-download | -no-dl) + SHOULD_DOWNLOAD=false + shift + ;; + --no-meta-setup | -no-m) + SHOULD_INSTALL_META=false + shift + ;; + --no-post-steps | -no-p) + SHOULD_DO_POST_STEPS=false + shift + ;; + *) shift ;; + esac +done + +commands_to_check=(wget) + +commands_not_found=() +for command in ${commands_to_check[@]}; do + if ! command -v "$command" &>/dev/null; then + commands_not_found+=("$command") + fi +done + +if [ ${#commands_not_found[@]} -ne 0 ]; then + echo 'The following commands are necessary in order to run the script, but were not found:' + + for command in ${commands_not_found[@]}; do + echo " \"$command\"" + done + + exit 1 +fi + +ROOT_DIR=$(pwd) + +if [ $(basename $ROOT_DIR) != "$INSTALL_DIR" ]; then + mkdir --parents $INSTALL_DIR + cd $INSTALL_DIR + ROOT_DIR=$(pwd) +fi + +validate_dir() { + DIR="$1" + MESSAGE="$2" + + if [ -z "$DIR" ]; then + echo "$MESSAGE" + exit 0 + fi + + if [ ! -d "$DIR" ]; then + echo "The provided directory '$DIR' does not exist" + exit 0 + fi +} + +get_cdk_version_from_gp_superparent_pom() { + SUPERPARENT_POM_PATH=$1 + + CDK_VERSION=$(xmlstarlet sel -N pom="http://maven.apache.org/POM/4.0.0" -t -v '/pom:project/pom:properties/pom:cpqd.cdk.version' $SUPERPARENT_POM_PATH) + + echo "$CDK_VERSION" +} + +get_version_type_from_version() { + version=$1 + + if [[ $version == *"-"* ]]; then + echo 'snapshot' + else + echo 'release' + fi +} + +get_maven_repo_from_version() { + version=$1 + + case $(get_version_type_from_version $version) in + 'snapshot') echo 'cpqd-snapshot' ;; + 'release') echo 'cpqd-release' ;; + *) echo "[ERROR] Função \"$FUNCNAME\" recebeu um retorno inválido" ;; + esac +} + +chmod_sh_files_recursively() { + DIRPATH=$1 + + find $DIRPATH -type f -name '*.sh' -exec chmod +x {} \; +} + +validate_dir "$REPO_DIR" "Please specify a GP's cloned git repository directory with --repo-dir or -r" + +if $SHOULD_DOWNLOAD; then + CDK_VERSION=$(get_cdk_version_from_gp_superparent_pom "$REPO_DIR/main/super-parent/pom.xml") + + if [ -z "$CDK_VERSION" ]; then + echo "Could not retrieve GP's version from the specified cloned repository" + exit 0 + fi + + ARTIFACTORY_REPOSITORY=$(get_maven_repo_from_version "$CDK_VERSION") + + METAWIZARD_ARTIFACTORY_PATH="$ARTIFACTORY_REPOSITORY/br/com/cpqd/cdk/cpqd-cdk-meta-installer/$CDK_VERSION/cpqd-cdk-meta-installer-*.jar" + + METAWIZARD_ARTIFACTORY_URL="https://artifactory.cpqd.com.br/artifactory/$(jf rt search --fail-no-op=true --sort-by=path "${METAWIZARD_ARTIFACTORY_PATH}" | jq -r '.[].path')" + + wget $METAWIZARD_ARTIFACTORY_URL +fi + +if $SHOULD_INSTALL_META; then + METAWIZARD_JAR_FILE=$(find * -type f -name '*.jar') + + if [ -z "$METAWIZARD_JAR_FILE" ]; then + echo "Could not find MetaWizard's .jar file" + exit 0 + fi + + echo "Please specify '$(pwd)' in MetaWizard's installation directory" + + java -jar $METAWIZARD_JAR_FILE + + chmod_sh_files_recursively "$(pwd)" + + METAWIZARD_SH_FILE=$(find * -type f -name 'metawizard.sh') + + if [ -z "$METAWIZARD_SH_FILE" ]; then + echo "Could not find MetaWizard's .sh file" + exit 0 + fi +fi + +if $SHOULD_DO_POST_STEPS; then + rm -rf wizard/modules/xml/xml-compat/ + + FILES_TO_COPY=(settings.properties mw-modules-config.xml mw-validation-config.xml) + + ETICS_FOLDER_WITH_META_FILES=etics/fontes/components/model/src/main/config + + for f in ${FILES_TO_COPY[@]}; do + cp $REPO_DIR/$ETICS_FOLDER_WITH_META_FILES/$f wizard/config/ + done + + MKLINK_META_FILE="mklink_META.sh" + + cp $REPO_DIR/$ETICS_FOLDER_WITH_META_FILES/$MKLINK_META_FILE $ROOT_DIR + + chmod +x ./$MKLINK_META_FILE + + ./$MKLINK_META_FILE $REPO_DIR +fi