d0f1ebe3aaf19463b73faf6f919bd3fb0a98932c
[dcaegen2/platform/blueprints.git] / mvn-phase-script.sh
1 #!/bin/bash
2
3 # ================================================================================
4 # Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
5 # ================================================================================
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 #     http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 # ============LICENSE_END=========================================================
18 #
19 # ECOMP is a trademark and service mark of AT&T Intellectual Property.
20
21
22 echo "running script: [$0] for module [$1] at stage [$2]"
23
24 MVN_PROJECT_MODULEID="$1" 
25 MVN_PHASE="$2"
26
27 echo "MVN_PROJECT_MODULEID is            [$MVN_PROJECT_MODULEID]"
28 echo "MVN_PHASE is                       [$MVN_PHASE]"
29 echo "MVN_PROJECT_GROUPID is             [$MVN_PROJECT_GROUPID]"
30 echo "MVN_PROJECT_ARTIFACTID is          [$MVN_PROJECT_ARTIFACTID]"
31 echo "MVN_PROJECT_VERSION is             [$MVN_PROJECT_VERSION]"
32 echo "MVN_NEXUSPROXY is                  [$MVN_NEXUSPROXY]"
33 echo "MVN_RAWREPO_BASEURL_UPLOAD is      [$MVN_RAWREPO_BASEURL_UPLOAD]"
34 echo "MVN_RAWREPO_BASEURL_DOWNLOAD is    [$MVN_RAWREPO_BASEURL_DOWNLOAD]"
35 MVN_RAWREPO_HOST=$(echo "$MVN_RAWREPO_BASEURL_UPLOAD" | cut -f3 -d'/' |cut -f1 -d':')
36 echo "MVN_RAWREPO_HOST is                [$MVN_RAWREPO_HOST]"
37 echo "MVN_RAWREPO_SERVERID is            [$MVN_RAWREPO_SERVERID]"
38 echo "MVN_DOCKERREGISTRY_DAILY is        [$MVN_DOCKERREGISTRY_DAILY]"
39 echo "MVN_DOCKERREGISTRY_RELEASE is      [$MVN_DOCKERREGISTRY_RELEASE]"
40
41 if [[ "$MVN_PROJECT_VERSION" == *SNAPSHOT ]]; then
42   echo "=> for SNAPSHOT artifact build"
43   MVN_DEPLOYMENT_TYPE='SNAPSHOT'
44 else
45   echo "=> for STAGING/RELEASE artifact build"
46   MVN_DEPLOYMENT_TYPE='STAGING'
47 fi
48 echo "MVN_DEPLOYMENT_TYPE is             [$DEPLOYMENT_TYPE]"
49
50
51 echo "=> Prepare environment "
52 #env
53
54 TIMESTAMP=$(date +%C%y%m%dT%H%M%S) 
55 export BUILD_NUMBER="${TIMESTAMP}"
56
57 # expected environment variables 
58 if [ -z "${MVN_NEXUSPROXY}" ]; then
59     echo "MVN_NEXUSPROXY environment variable not set.  Cannot proceed"
60     exit
61 fi
62
63 MVN_NEXUSPROXY_HOST=$(echo "$MVN_NEXUSPROXY" |cut -f3 -d'/' | cut -f1 -d':')
64 echo "=> Nexus Proxy at $MVN_NEXUSPROXY_HOST, $MVN_NEXUSPROXY"
65
66 if [ -z "$WORKSPACE" ]; then
67     WORKSPACE=$(pwd)
68 fi
69
70 # mvn phase in life cycle 
71 MVN_PHASE="$2"
72
73 case $MVN_PHASE in
74 clean)
75   echo "==> clean phase script"
76   rm -rf ./venv-tox
77   ;;
78 generate-sources)
79   echo "==> generate-sources phase script"
80   ;;
81 compile)
82   echo "==> compile phase script"
83   ;;
84 test)
85   echo "==> test phase script"
86   ;;
87 package)
88   echo "==> package phase script"
89   ;;
90 install)
91   echo "==> install phase script"
92   ;;
93 deploy)
94   echo "==> deploy phase script"
95   
96   # set up env variables, get ready for template resolution
97   export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.plugins/releases"
98   export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.plugins/snapshots"
99   export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_blueprints_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.blueprints/releases"
100   export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_blueprints_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.blueprints/snapshots"
101   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2/releases"
102   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2/snapshots"
103   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.plugins/releases"
104   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.plugins/snapshots"
105   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_blueprints_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.blueprints/releases"
106   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_blueprints_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.blueprints/snapshots"
107
108   export ONAPTEMPLATE_PYPIURL_org_onap_dcaegen2="${MVN_NEXUSPROXY}/content/sites/pypi"
109
110   export ONAPTEMPLATE_DOCKERREGURL_org_onap_dcaegen2_releases="$MVN_DOCKERREGISTRY_DAILY"
111   export ONAPTEMPLATE_DOCKERREGURL_org_onap_dcaegen2_snapshots="$MVN_DOCKERREGISTRY_DAILY/snapshots"
112
113
114   TEMPLATES=$(env |grep ONAPTEMPLATE)
115   echo "====> Resolving the following temaplate from environment variables "
116   echo "[$TEMPLATES]"
117   SELFFILE=$(echo $0 | rev | cut -f1 -d '/' | rev)
118   for TEMPLATE in $TEMPLATES; do
119     KEY=$(echo $TEMPLATE | cut -f1 -d'=')
120     VALUE=$(echo $TEMPLATE | cut -f2 -d'=')
121     VALUE2=$(echo $TEMPLATE | cut -f2 -d'=' |sed 's/\//\\\//g')
122     FILES=$(grep -rl "$KEY")
123
124     # assuming FILES is not longer than 2M bytes, the limit for variable value max size on this VM 
125     for F in $FILES; do
126        if [[ $F == *"$SELFFILE" ]]; then
127           continue
128        fi
129        echo "======> Resolving template $KEY to value $VALUE for file $F"
130        sed -i "s/{{[[:space:]]*$KEY[[:space:]]*}}/$VALUE2/g" $F
131    
132        cat $F
133     done 
134     
135     #if [ ! -z "$FILES" ]; then
136     #   echo "====> Resolving template $VALUE to value $VALUE"
137     #   #CMD="grep -rl \"$VALUE\" | tr '\n' '\0' | xargs -0 sed -i \"s/{{[[:space:]]*$VALUE[[:space:]]*}}/$VALUE/g\""
138     #   grep -rl "$KEY" | tr '\n' '\0' | xargs -0 sed -i 's/$KEY/$VALUE2/g'
139     #   #echo $CMD
140     #   #eval $CMD
141     #fi
142   done
143   echo "====> Done template reolving"
144
145
146   FQDN="${MVN_PROJECT_GROUPID}.${MVN_PROJECT_ARTIFACTID}"
147   if [ "$MVN_PROJECT_MODULEID" == "__" ]; then
148     MVN_PROJECT_MODULEID=""
149   fi
150
151   # Extract the username and password to the nexus repo from the settings file
152   USER=$(xpath -q -e "//servers/server[id='$MVN_RAWREPO_SERVERID']/username/text()" "$SETTINGS_FILE")
153   PASS=$(xpath -q -e "//servers/server[id='$MVN_RAWREPO_SERVERID']/password/text()" "$SETTINGS_FILE")
154   NETRC=$(mktemp)
155   echo "machine $MVN_RAWREPO_HOST login $USER password $PASS" > "$NETRC"
156
157   REPO="$MVN_RAWREPO_BASEURL_UPLOAD"
158   FQDN="${MVN_PROJECT_GROUPID}.${MVN_PROJECT_ARTIFACTID}"
159
160   OUTPUT_FILES="*.yaml"
161
162   if [ "$MVN_DEPLOYMENT_TYPE" == 'SNAPSHOT' ]; then
163     SEND_TO="${REPO}/${FQDN}/snapshots"
164   elif [ "$MVN_DEPLOYMENT_TYPE" == 'STAGING' ]; then
165     SEND_TO="${REPO}/${FQDN}/releases"
166   else
167     echo "Unreconfnized deployment type, quit"
168     exit
169   fi
170
171   echo "Sending ${OUTPUT_FILE} to Nexus: ${SEND_TO}"
172   for OUTPUT_FILE in $OUTPUT_FILES; do
173     echo curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" "${SEND_TO}/${OUTPUT_FILE}"
174     curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" "${SEND_TO}/${OUTPUT_FILE}-${MVN_PROJECT_VERSION}-${TIMESTAMP}"
175     curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" "${SEND_TO}/${OUTPUT_FILE}"
176   done
177   # ========================== end of example deploying raw artifact ========================
178
179 if  false; then
180   # ================== example building and deploying docker image ==========================
181   IMAGENAME="onap/${FQDN}.${MVN_PROJECT_MODULEID}"
182   IMAGENAME=$(echo "$IMAGENAME" | sed -e 's/_*$//g' -e 's/\.*$//g')
183
184   # use the major and minor version of the MVN artifact version as docker image version
185   VERSION="${MVN_PROJECT_VERSION//[^0-9.]/}"
186   VERSION2=$(echo "$VERSION" | cut -f1-2 -d'.')
187    
188   LFQI="${IMAGENAME}:${VERSION}-${TIMESTAMP}"
189   BUILD_PATH="${WORKSPACE}"
190   # build a docker image
191   docker build --rm -f "${WORKSPACE}"/Dockerfile -t "${LFQI}" "${BUILD_PATH}"
192
193   REPO="" 
194   if [ $MVN_DEPLOYMENT_TYPE == "SNAPSHOT" ]; then
195      REPO=$MVN_DOCKERREGISTRY_DAILY
196   elif [ $MVN_DEPLOYMENT_TYPE == "STAGING" ]; then
197      # there seems to be no staging docker registry?  set to use SNAPSHOT also
198      #REPO=$MVN_DOCKERREGISTRY_RELEASE
199      REPO=$MVN_DOCKERREGISTRY_DAILY
200   else 
201      echo "Fail to determine DEPLOYMENT_TYPE"
202      REPO=$MVN_DOCKERREGISTRY_DAILY
203   fi
204   echo "DEPLOYMENT_TYPE is: $MVN_DEPLOYMENT_TYPE, repo is $REPO"
205
206   if [ ! -z "$REPO" ]; then 
207     USER=$(xpath -e "//servers/server[id='$REPO']/username/text()" "$SETTINGS_FILE")
208     PASS=$(xpath -e "//servers/server[id='$REPO']/password/text()" "$SETTINGS_FILE")
209     if [ -z "$USER" ]; then
210       echo "Error: no user provided"
211     fi
212     if [ -z "$PASS" ]; then
213       echo "Error: no password provided"
214     fi
215     [ -z "$PASS" ] && PASS_PROVIDED="<empty>" || PASS_PROVIDED="<password>"
216     echo docker login "$REPO" -u "$USER" -p "$PASS_PROVIDED"
217     docker login "$REPO" -u "$USER" -p "$PASS"
218
219     
220     if [ $MVN_DEPLOYMENT_TYPE == "SNAPSHOT" ]; then
221       REPO="$REPO/snapshots"
222     elif [ $MVN_DEPLOYMENT_TYPE == "STAGING" ]; then
223       # there seems to be no staging docker registry?  set to use SNAPSHOT also
224       #REPO=$MVN_DOCKERREGISTRY_RELEASE
225       REPO="$REPO"
226     else 
227       echo "Fail to determine DEPLOYMENT_TYPE"
228       REPO="$REPO/unknown"
229     fi
230
231     OLDTAG="${LFQI}"
232     PUSHTAGS="${REPO}/${IMAGENAME}:${VERSION2}-${TIMESTAMP} ${REPO}/${IMAGENAME}:${VERSION2} ${REPO}/${IMAGENAME}:${VERSION2}-latest"
233     for NEWTAG in ${PUSHTAGS}
234     do
235       echo "tagging ${OLDTAG} to ${NEWTAG}" 
236       docker tag "${OLDTAG}" "${NEWTAG}"
237       echo "pushing ${NEWTAG}" 
238       docker push "${NEWTAG}"
239       OLDTAG="${NEWTAG}"
240     done
241   fi
242 fi 
243   # ============= end of example building and deploying docker image ========================
244   ;;
245 *)
246   echo "==> unprocessed phase"
247   ;;
248 esac
249