#!/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 " 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 ... # # 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>/d' \ -e '//,/<\/dependencies>/d' \ -e '//,/<\/build>/d' \ -e '//,/<\/profiles>/d' \ -e '//,/<\/description>/d' \ -e '//,/<\/packaging>/d' \ -e '//,/<\/modelVersion>/d' \ -e '//,/<\/properties>/d' \ -e "/^[ ${tab}]*<${attr}>\([^<]*\)<\/${attr}>.*/{s//\1/p;}" \ <"${file}") if [[ "${value}" == "" ]]; then # need to check parent for parameter value=$(sed -n \ -e '//,/<\/dependencies>/d' \ -e '//,/<\/build>/d' \ -e '//,/<\/profiles>/d' \ -e '//,/<\/description>/d' \ -e '//,/<\/packaging>/d' \ -e '//,/<\/modelVersion>/d' \ -e '//,/<\/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 # # 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 # # 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}