diff options
Diffstat (limited to 'policy-management/src/main/server-gen/bin/deploy-artifact')
-rw-r--r-- | policy-management/src/main/server-gen/bin/deploy-artifact | 318 |
1 files changed, 318 insertions, 0 deletions
diff --git a/policy-management/src/main/server-gen/bin/deploy-artifact b/policy-management/src/main/server-gen/bin/deploy-artifact new file mode 100644 index 00000000..81f5f14c --- /dev/null +++ b/policy-management/src/main/server-gen/bin/deploy-artifact @@ -0,0 +1,318 @@ +#!/usr/bin/env bash + +# +# ============LICENSE_START======================================================= +# ONAP +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +### + +############################################################################## +# Usage: usage +############################################################################## + +function usage() { + echo + echo -e "syntax: $(basename "$0") " + echo -e "\t [-f]" + echo -e "\t -a <artifact> " + echo + echo -e "Options:" + echo -e "\t -f|--file-repo: deployment in the file repository" + echo -e "\t -a|--artifact: file artifact (jar or pom) to deploy" + echo + echo +} + +############################################################################## +# Usage: getPomAttributes <pom-file> <attribute> ... +# +# This function performs simplistic parsing of a 'pom.xml' file, extracting +# the specified attributes (e.g. 'groupId', 'artifactId', 'version'). The +# attributes are returned as environment variables with the associated name +############################################################################## + +function getPomAttributes +{ + if [[ ${DEBUG} == y ]]; then + echo "-- ${FUNCNAME[0]} $* --" + set -x + fi + + local file="$1" + if [[ ! -f "${file}" ]]; then + echo "{1}: file does not exist" + return 1 + fi + + local tab=$'\t' rval=0 attr value + shift + + for attr in "$@" ; do + # Try to fetch the parameter associated with the 'pom.xml' file. + # Initially, the 'parent' element is excluded. If the desired + # parameter is not found, the 'parent' element is included in the + # second attempt. + value=$(sed -n \ + -e '/<parent>/,/<\/parent>/d' \ + -e '/<dependencies>/,/<\/dependencies>/d' \ + -e '/<build>/,/<\/build>/d' \ + -e '/<profiles>/,/<\/profiles>/d' \ + -e '/<description>/,/<\/description>/d' \ + -e '/<packaging>/,/<\/packaging>/d' \ + -e '/<modelVersion>/,/<\/modelVersion>/d' \ + -e '/<properties>/,/<\/properties>/d' \ + -e "/^[ ${tab}]*<${attr}>\([^<]*\)<\/${attr}>.*/{s//\1/p;}" \ + <"${file}") + + if [[ "${value}" == "" ]]; then + # need to check parent for parameter + value=$(sed -n \ + -e '/<dependencies>/,/<\/dependencies>/d' \ + -e '/<build>/,/<\/build>/d' \ + -e '/<profiles>/,/<\/profiles>/d' \ + -e '/<description>/,/<\/description>/d' \ + -e '/<packaging>/,/<\/packaging>/d' \ + -e '/<modelVersion>/,/<\/modelVersion>/d' \ + -e '/<properties>/,/<\/properties>/d' \ + -e "/^[ ${tab}]*<${attr}>\([^<]*\)<\/${attr}>.*/{s//\1/p;}" \ + <"${file}") + + if [[ "${value}" == "" ]] ; then + echo "${file}: Can't determine ${attr}" >&2 + rval=1 + fi + fi + + # the following sets an environment variable with the name referred + # to by ${attr} + read "${attr}" <<<"${value}" + done + return ${rval} +} + + + +############################################################################## +# Usage: deployJar <jar-file> +# +# This function deploys a JAR file in a repository, as well as +# the 'pom.xml' member it contains. +################################################################# + +function deployJar +{ + if [[ ${DEBUG} == y ]]; then + echo "-- ${FUNCNAME[0]} $* --" + set -x + fi + + local artifact="${1}" + if [[ ! -f "${artifact}" ]]; then + echo "{artifact}: does not exist" + return 1 + fi + + local dir=$(mktemp -d) + local jar="${artifact##*/}" + + cp -p "${artifact}" "${dir}/${jar}" + + ( + local rval=0 + cd "${dir}" + + # determine name of 'pom' file within JAR + local pom=$(jar tf "${jar}" META-INF | grep '/pom\.xml$' | head -1) + if [[ -z ${pom} ]] ; then + echo "${jar}: Can't find 'pom.xml'" >&2 + return 1 + fi + jar xf "${jar}" "${pom}" + + local pomProperties=$(jar tf "${jar}" META-INF | grep '/pom\.properties$' | head -1) + if [[ -n ${pomProperties} ]] ; then + # extract pom file + jar xf "${jar}" "${pomProperties}" + source "${pomProperties}" + fi + + if [[ -z ${version} ]]; then + if ! getPomAttributes "${pom}" version ; then + echo "${pom}: Can't extract 'version' from pom" >&2 + return 2 + fi + fi + + local repoId repoUrl + if [[ "${version}" =~ SNAPSHOT ]] ; then + repoId=${SNAPSHOT_REPOSITORY_ID} + repoUrl=${SNAPSHOT_REPOSITORY_URL} + else + repoId=${RELEASE_REPOSITORY_ID} + repoUrl=${RELEASE_REPOSITORY_URL} + fi + + echo "${artifact}: Deploying JAR artifact to repository ${repoUrl} (${repoId})" + mvn deploy:deploy-file \ + -Dfile="${jar}" \ + -Dversion="${version}" \ + -Dpackaging=jar -DgeneratePom=false -DpomFile="${pom}" \ + -DrepositoryId="${repoId}" -Durl="${repoUrl}" \ + -DupdateReleaseInfo=true + + retval=${?} + rm -rf "${dir}" + + return ${retval} + ) +} + +############################################################################## +# Usage: deployPom <pom-file> +# +# This function deploys a 'pom.xml' file in the local repository +############################################################################## + +function deployPom +{ + if [[ ${DEBUG} == y ]]; then + echo "-- ${FUNCNAME[0]} $* --" + set -x + fi + + local file="${1}" + + if [[ -f ${file} ]]; then + return 1 + fi + + # need to extract attributes from POM file + if getPomAttributes "${1}" artifactId groupId version ; then + local repoId repoUrl + if [[ "${version}" =~ SNAPSHOT ]] ; then + repoId=${SNAPSHOT_REPOSITORY_ID} + repoUrl=${SNAPSHOT_REPOSITORY_URL} + else + repoId=${RELEASE_REPOSITORY_ID} + repoUrl=${RELEASE_REPOSITORY_URL} + fi + + echo "${file}: Deploying POM artifact to remote repository" + mvn deploy:deploy-file -Dfile="${file}" \ + -Dpackaging=pom -DgeneratePom=false \ + -DgroupId="${groupId}" \ + -DartifactId="${artifactId}" \ + -Dversion="${version}" \ + -DrepositoryId="${repoId}" -Durl="${repoUrl}" \ + -DupdateReleaseInfo=true + else + echo "${file}: Can't install pom due to missing attributes" >&2 + return 1 + fi +} + +############################################################################## +# Usage: deployArtifact +# +# This function deploys a maven artifacts in a repository +############################################################################## + +function deployArtifact +{ + if [[ ${DEBUG} == y ]]; then + echo "-- ${FUNCNAME[0]} $* --" + set -x + fi + + local file="${1}" + if [[ -z "${file}" ]]; then + echo "${file}: artifact file not provided" + return 1 + fi + + if [[ ! -f "${file}" ]]; then + echo "${file}: artifact file does not exist" + return 1 + fi + + case "${file}" in + *pom.xml|*.pom) + deployPom "${file}" + ;; + *.jar) + deployJar "${file}" + ;; + *) echo "${file}: Don't know how to install artifact" >&2 + return 2 + ;; + esac + + return ${?} +} + +############################################################################## +# MAIN +############################################################################## + +if [[ ${DEBUG} == y ]]; then + echo "-- $0 $* --" + set -x +fi + +retval=0 + +until [[ -z "$1" ]]; do + case $1 in + -a|--artifact) shift + ARTIFACT=$1 + ;; + -f|--file-repo) FILE_REPO_ID="file-repository" + FILE_REPO_URL="file:${HOME}/.m2/file-repository" + ;; + *) usage + exit 1 + ;; + esac + shift +done + +if [[ -z ${ARTIFACT} ]]; then + echo "No artifact file provided: $*" + usage + exit 1 +fi + +if [[ -n ${SNAPSHOT_REPOSITORY_URL} ]] && [[ -n ${RELEASE_REPOSITORY_URL} ]]; then + deployArtifact "${ARTIFACT}" + retval=${?} +else + FILE_REPO_ID="file-repository" + FILE_REPO_URL="file:${HOME}/.m2/file-repository" +fi + +if [[ -n ${FILE_REPO_ID} ]]; then + SNAPSHOT_REPOSITORY_ID="${FILE_REPO_ID}" + SNAPSHOT_REPOSITORY_URL="${FILE_REPO_URL}" + RELEASE_REPOSITORY_ID="${FILE_REPO_ID}" + RELEASE_REPOSITORY_URL="${FILE_REPO_URL}" + + mkdir -p "${FILE_REPO_URL#file:}" 2> /dev/null + deployArtifact "${ARTIFACT}" + retval=${?} +fi + +exit ${retval} |