bugfix: Fix typo in DEPLOY_SCENARIO var
[infra/cicd.git] / jjb / cloud-infra / scripts / generate-change-metadata.sh
1 #!/bin/bash
2
3 # ============LICENSE_START=======================================================
4 #  Copyright (C) 2019 The Nordix Foundation. 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 #
18 # SPDX-License-Identifier: Apache-2.0
19 # ============LICENSE_END=========================================================
20
21
22 set -o nounset
23 set -o errexit
24 set -o pipefail
25
26 # NOTE (fdegir): in case if a change depends on another open change in different repo
27 # we determine it here and override the version and refspec for that repo
28 function determine_dependency() {
29   echo "Info  : Determining dependency"
30   echo "Info  : Commit message is"
31   echo "-------------------------------------------------------------------------"
32   echo "$GERRIT_CHANGE_COMMIT_MESSAGE"
33   echo "-------------------------------------------------------------------------"
34
35   if ! echo "$GERRIT_CHANGE_COMMIT_MESSAGE" | grep -qs "^Depends-On:"; then
36     echo "Info  : No dependency found"
37     return
38   else
39     echo "Info  : Dependency found!"
40     DEPENDENT_CHANGE_ID=$(echo "$GERRIT_CHANGE_COMMIT_MESSAGE" | grep "^Depends-On:" | cut -d":" -f2 | sed 's/\s*//g')
41   fi
42
43   echo "Info  : Processing change $DEPENDENT_CHANGE_ID"
44   declare -a DEPENDENT_CHANGE_METADATA
45   # NOTE (cian): upgrades to Gerrit appear to change the output of the previously-used endpoint
46   # https://gerrit.nordix.org/changes/?q=$DEPENDENT_CHANGE_ID&o=CURRENT_REVISION so moving to
47   # gerrit SSH-based queries instead
48   GIT_BASE_SSH_CMD=$(echo "${GIT_BASE_SSH}" | sed -e 's#://# #g' | sed -e 's#:# -p #g')
49   readarray -t DEPENDENT_CHANGE_METADATA < <(
50     ${GIT_BASE_SSH_CMD} gerrit query --format=json change:${DEPENDENT_CHANGE_ID} --current-patch-set |\
51       head -1 |\
52       jq -r '[.project, .status, .currentPatchSet.revision, .currentPatchSet.ref] | join("\n")'
53   )
54
55   # NOTE (fdegir): check if the dependeny change exists
56   # and ignore if it doesn't
57   if [[ -z "${DEPENDENT_CHANGE_METADATA+x}" ]]; then
58     echo "Warn  : Unable to determine dependent change. Ignoring dependency!"
59     return
60   fi
61
62   DEPENDENT_CHANGE_PROJECT="${DEPENDENT_CHANGE_METADATA[0]}"
63   DEPENDENT_CHANGE_STATUS="${DEPENDENT_CHANGE_METADATA[1]}"
64   DEPENDENT_CHANGE_REVISION="${DEPENDENT_CHANGE_METADATA[2]}"
65   DEPENDENT_CHANGE_REFSPEC="${DEPENDENT_CHANGE_METADATA[3]}"
66   echo "-------------------------------------------------------------------------"
67   echo "        DEPENDENT_CHANGE_PROJECT=$DEPENDENT_CHANGE_PROJECT"
68   echo "        DEPENDENT_CHANGE_STATUS=$DEPENDENT_CHANGE_STATUS"
69   echo "        DEPENDENT_CHANGE_REVISION=$DEPENDENT_CHANGE_REVISION"
70   echo "        DEPENDENT_CHANGE_REFSPEC=$DEPENDENT_CHANGE_REFSPEC"
71   echo "-------------------------------------------------------------------------"
72
73   # NOTE (fdegir): we only follow the dependency if the change status is NEW
74   if [[ "$DEPENDENT_CHANGE_STATUS" != "NEW" ]]; then
75     echo "Warn  : Change is not open. Ignoring dependency!"
76     return
77   fi
78
79   # NOTE (fdegir): we do not accept dependency of a change that is sent to same project as the dependent change
80   if [[ "$DEPENDENT_CHANGE_PROJECT" == "$GERRIT_PROJECT" ]]; then
81     echo "Warn  : Change is for the same project. Ignoring dependency!"
82     return
83   fi
84
85   DEPENDENT_COMPONENT="${DEPENDENT_CHANGE_PROJECT//*\//}"
86
87   echo "# dependent change" >> "$CHANGE_METADATA_FILE"
88
89   # NOTE (fdegir): if dependent change is on stack repo, we need to treat it
90   # differently
91   if [[ "$DEPENDENT_CHANGE_PROJECT" =~ /stack/ ]]; then
92     # set vars
93     echo "STACK_TYPE=$DEPENDENT_COMPONENT" >> "$CHANGE_METADATA_FILE"
94     echo "STACK_VERSION=$DEPENDENT_CHANGE_REVISION" >> "$CHANGE_METADATA_FILE"
95     echo "STACK_REFSPEC=$DEPENDENT_CHANGE_REFSPEC" >> "$CHANGE_METADATA_FILE"
96   else
97     echo "NORDIX_$(echo $DEPENDENT_COMPONENT | tr a-z A-Z)_VERSION=$DEPENDENT_CHANGE_REVISION" >> "$CHANGE_METADATA_FILE"
98     echo "NORDIX_$(echo $DEPENDENT_COMPONENT | tr a-z A-Z)_REFSPEC=$DEPENDENT_CHANGE_REFSPEC" >> "$CHANGE_METADATA_FILE"
99   fi
100
101 }
102
103 # file to record change metadata
104 export CHANGE_METADATA_FILE="$WORKSPACE/change.properties"
105 /bin/rm -f "$CHANGE_METADATA_FILE"
106
107 echo "Info  : Generating change metadata"
108
109 # determine the project
110 # this scripts is used by all engine repos so we need to determine what this change is for
111 export ENGINE_COMPONENT="${GERRIT_PROJECT//*\//}"
112
113 # Check if we need to override the deploy scenario.
114 if ! echo "$GERRIT_CHANGE_COMMIT_MESSAGE" | grep -qs "^Deploy-Scenario:"; then
115   echo "Info  : No DEPLOY_SCENARIO override found."
116 else
117   echo "Info  : DEPLOY_SCENARIO override found!"
118   echo "Info  : Before override: DEPLOY_SCENARIO=${DEPLOY_SCENARIO}"
119   DEPLOY_SCENARIO=$(echo "$GERRIT_CHANGE_COMMIT_MESSAGE" | grep '^Deploy-Scenario:' | cut -d ":" -f2 | sed 's/\s*//g')
120   export DEPLOY_SCENARIO
121   echo "Info  : After override: DEPLOY_SCENARIO=${DEPLOY_SCENARIO}"
122 fi
123
124 echo "Info  : Setting STACK_TYPE and STACK_VERSION"
125 if [[ "$GERRIT_PROJECT" =~ /stack/ ]]; then
126   # set vars
127   export STACK_TYPE="$ENGINE_COMPONENT"
128   export STACK_VERSION="$GERRIT_PATCHSET_REVISION"
129   export STACK_REFSPEC="$GERRIT_REFSPEC"
130
131   # record vars to properties file
132   echo "STACK_TYPE=$STACK_TYPE" >> "$CHANGE_METADATA_FILE"
133   echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> "$CHANGE_METADATA_FILE"
134   echo "STACK_VERSION=$STACK_VERSION" >> "$CHANGE_METADATA_FILE"
135   echo "STACK_REFSPEC=$STACK_REFSPEC" >> "$CHANGE_METADATA_FILE"
136 elif [[ "$GERRIT_PROJECT" =~ /installer/ ]]; then
137   # set vars
138   case "${ENGINE_COMPONENT}" in
139     kolla)
140       export STACK_TYPE="openstack"
141       echo "Info  : Deploy scenario is overriden by job to $DEPLOY_SCENARIO"
142       ;;
143     kubespray)
144       export STACK_TYPE="kubernetes"
145       echo "Info  : Deploy scenario is overriden by job to $DEPLOY_SCENARIO"
146       ;;
147     oom)
148       export STACK_TYPE="onap"
149       echo "Info  : Deploy scenario is overriden by job to $DEPLOY_SCENARIO"
150       ;;
151     *) echo "ERROR : Invalid engine component $ENGINE_COMPONENT"; exit 1;;
152   esac
153   export STACK_VERSION="$GERRIT_BRANCH"
154
155   # record vars to properties file
156   echo "STACK_TYPE=$STACK_TYPE" >> "$CHANGE_METADATA_FILE"
157   echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> "$CHANGE_METADATA_FILE"
158   echo "STACK_VERSION=$STACK_VERSION" >> "$CHANGE_METADATA_FILE"
159   echo "NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_VERSION=$GERRIT_PATCHSET_REVISION" >> "$CHANGE_METADATA_FILE"
160   echo "NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_REFSPEC=$GERRIT_REFSPEC" >> "$CHANGE_METADATA_FILE"
161 else
162   # NOTE (fdegir): if the change comes into provisioner repos, we need to set the stack type
163   # properly for the jobs verifying those changes
164   # set vars
165   export STACK_TYPE="${STACK_TYPE:-kubernetes}"
166   export STACK_VERSION=$GERRIT_BRANCH
167
168   # record vars to properties file
169   echo "STACK_TYPE=$STACK_TYPE" >> "$CHANGE_METADATA_FILE"
170   echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> "$CHANGE_METADATA_FILE"
171   echo "STACK_VERSION=$STACK_VERSION" >> "$CHANGE_METADATA_FILE"
172   echo "NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_VERSION=$GERRIT_PATCHSET_REVISION" >> "$CHANGE_METADATA_FILE"
173   echo "NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_REFSPEC=$GERRIT_REFSPEC" >> "$CHANGE_METADATA_FILE"
174 fi
175
176 # global vars
177 export NORDIX_ARM_HTTPS_URL="https://artifactory.nordix.org/artifactory"
178 export ARTIFACT_ARM_FOLDER="gerrit"
179 export BUILD_IDENTIFIER=$GERRIT_CHANGE_NUMBER
180 export OFFLINE_INSTALLER_FILE="/tmp/${STACK_TYPE}-${GERRIT_BRANCH}-${DISTRO}.bsx"
181 export OFFLINE_XTESTING_FILE="/tmp/${STACK_TYPE}-test-${GERRIT_BRANCH}.bsx"
182 export BUILD_ARTIFACTS="/tmp/${STACK_TYPE}-${GERRIT_BRANCH}-${DISTRO}.bsx"
183 export NORDIX_ARM_REPO="nordix-${STACK_TYPE}"
184 export NORDIX_ARTIFACT_URL="$NORDIX_ARM_HTTPS_URL/$NORDIX_ARM_REPO/oss/$ARTIFACT_ARM_FOLDER/$BUILD_IDENTIFIER"
185
186 cat << EOF >> "$CHANGE_METADATA_FILE"
187 BUILD_IDENTIFIER=$BUILD_IDENTIFIER
188 BUILD_DATE=$(date '+%Y%m%d%H%M')
189 BUILT_BY=$BUILD_URL
190 DISTRO=$DISTRO
191 CI_LOOP=$CI_LOOP
192 ENGINE_SHA=$(git rev-parse HEAD)
193 OFFLINE_INSTALLER_FILE=$OFFLINE_INSTALLER_FILE
194 OFFLINE_XTESTING_FILE=$OFFLINE_XTESTING_FILE
195 BUILD_ARTIFACTS=$BUILD_ARTIFACTS
196 NORDIX_ARM_REPO=nordix-${STACK_TYPE}
197 NORDIX_ARTIFACT_URL=$NORDIX_ARTIFACT_URL
198 EOF
199
200 # NOTE (fdegir): we generated the change metadata file normally until here
201 # we now determine the dependency as the last step to ensure we override vars
202 determine_dependency
203
204 echo "Info  : Change metadata"
205 echo "-------------------------------------------------------------------------"
206 cat "$CHANGE_METADATA_FILE"
207 echo "-------------------------------------------------------------------------"
208
209 # vim: set ts=2 sw=2 expandtab: