| #!/bin/bash |
| |
| # ============LICENSE_START======================================================= |
| # Copyright (C) 2019 The Nordix Foundation. 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. |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # ============LICENSE_END========================================================= |
| |
| |
| set -o nounset |
| set -o errexit |
| set -o pipefail |
| |
| # NOTE (fdegir): in case if a change depends on another open change in different repo |
| # we determine it here and override the version and refspec for that repo |
| function determine_dependency() { |
| echo "Info : Determining dependency" |
| echo "Info : Commit message is" |
| echo "-------------------------------------------------------------------------" |
| echo "$GERRIT_CHANGE_COMMIT_MESSAGE" |
| echo "-------------------------------------------------------------------------" |
| |
| if ! echo "$GERRIT_CHANGE_COMMIT_MESSAGE" | grep -qs "^Depends-On:"; then |
| echo "Info : No dependency found" |
| return |
| else |
| echo "Info : Dependency found!" |
| DEPENDENT_CHANGE_ID=$(echo "$GERRIT_CHANGE_COMMIT_MESSAGE" | grep "^Depends-On:" | cut -d":" -f2 | sed 's/\s*//g') |
| fi |
| |
| echo "Info : Processing change $DEPENDENT_CHANGE_ID" |
| declare -a DEPENDENT_CHANGE_METADATA |
| readarray -t DEPENDENT_CHANGE_METADATA < <(curl -s "https://gerrit.nordix.org/changes/?q=$DEPENDENT_CHANGE_ID&o=CURRENT_REVISION" 2>&1 \ |
| | grep "project\|status\|current_revision\|ref\".*," | sed -e 's/\s//g' -e 's/,//g' -e 's/"//g'| cut -d: -f2) |
| |
| # NOTE (fdegir): check if the dependeny change exists |
| # and ignore if it doesn't |
| if [[ -z "${DEPENDENT_CHANGE_METADATA+x}" ]]; then |
| echo "Warn : Unable to determine dependent change. Ignoring dependency!" |
| return |
| fi |
| |
| DEPENDENT_CHANGE_PROJECT="${DEPENDENT_CHANGE_METADATA[0]}" |
| DEPENDENT_CHANGE_STATUS="${DEPENDENT_CHANGE_METADATA[1]}" |
| DEPENDENT_CHANGE_REVISION="${DEPENDENT_CHANGE_METADATA[2]}" |
| DEPENDENT_CHANGE_REFSPEC="${DEPENDENT_CHANGE_METADATA[3]}" |
| echo "-------------------------------------------------------------------------" |
| echo " DEPENDENT_CHANGE_PROJECT=$DEPENDENT_CHANGE_PROJECT" |
| echo " DEPENDENT_CHANGE_STATUS=$DEPENDENT_CHANGE_STATUS" |
| echo " DEPENDENT_CHANGE_REVISION=$DEPENDENT_CHANGE_REVISION" |
| echo " DEPENDENT_CHANGE_REFSPEC=$DEPENDENT_CHANGE_REFSPEC" |
| echo "-------------------------------------------------------------------------" |
| |
| # NOTE (fdegir): we only follow the dependency if the change status is NEW |
| if [[ "$DEPENDENT_CHANGE_STATUS" != "NEW" ]]; then |
| echo "Warn : Change is not open. Ignoring dependency!" |
| return |
| fi |
| |
| # NOTE (fdegir): we do not accept dependency of a change that is sent to same project as the dependent change |
| if [[ "$DEPENDENT_CHANGE_PROJECT" == "$GERRIT_PROJECT" ]]; then |
| echo "Warn : Change is for the same project. Ignoring dependency!" |
| return |
| fi |
| |
| DEPENDENT_COMPONENT="${DEPENDENT_CHANGE_PROJECT//*\//}" |
| |
| echo "# dependent change" >> "$CHANGE_METADATA_FILE" |
| |
| # NOTE (fdegir): if dependent change is on stack repo, we need to treat it |
| # differently |
| if [[ "$DEPENDENT_CHANGE_PROJECT" =~ /stack/ ]]; then |
| # set vars |
| echo "STACK_TYPE=$DEPENDENT_COMPONENT" >> "$CHANGE_METADATA_FILE" |
| echo "STACK_VERSION=$DEPENDENT_CHANGE_REVISION" >> "$CHANGE_METADATA_FILE" |
| echo "STACK_REFSPEC=$DEPENDENT_CHANGE_REFSPEC" >> "$CHANGE_METADATA_FILE" |
| else |
| echo "NORDIX_$(echo $DEPENDENT_COMPONENT | tr a-z A-Z)_VERSION=$DEPENDENT_CHANGE_REVISION" >> "$CHANGE_METADATA_FILE" |
| echo "NORDIX_$(echo $DEPENDENT_COMPONENT | tr a-z A-Z)_REFSPEC=$DEPENDENT_CHANGE_REFSPEC" >> "$CHANGE_METADATA_FILE" |
| fi |
| |
| } |
| |
| # file to record change metadata |
| export CHANGE_METADATA_FILE="$WORKSPACE/change.properties" |
| /bin/rm -f "$CHANGE_METADATA_FILE" |
| |
| echo "Info : Generating change metadata" |
| |
| # determine the project |
| # this scripts is used by all engine repos so we need to determine what this change is for |
| export ENGINE_COMPONENT="${GERRIT_PROJECT//*\//}" |
| |
| # Check if we need to override the deploy scenario. |
| if ! echo "$GERRIT_CHANGE_COMMIT_MESSAGE" | grep -qs "^Deploy-Scenario:"; then |
| echo "Info : No DEPLOY_SCENARIO override found." |
| else |
| echo "Info : DEPLOY_SCENARIO override found!" |
| echo "Info : Before override: DEPLOY_SCENARIO=${DEPLOY_SCENARIO}" |
| DEPLOY_SCENARIO=$(echo "$GERRIT_CHANGE_COMMIT_MESSAGE" | grep '^Deploy-Scenario:' | cut -d ":" -f2 | sed 's/\s*//g') |
| export DEPLOY_SCENARIO |
| echo "Info : After override: DEPLOY_SCENARIO=${DEPLOY_SCENARIO}" |
| fi |
| |
| echo "Info : Setting STACK_TYPE and STACK_VERSION" |
| if [[ "$GERRIT_PROJECT" =~ /stack/ ]]; then |
| # set vars |
| export STACK_TYPE="$ENGINE_COMPONENT" |
| export STACK_VERSION="$GERRIT_PATCHSET_REVISION" |
| export STACK_REFSPEC="$GERRIT_REFSPEC" |
| |
| # record vars to properties file |
| echo "STACK_TYPE=$STACK_TYPE" >> "$CHANGE_METADATA_FILE" |
| echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> "$CHANGE_METADATA_FILE" |
| echo "STACK_VERSION=$STACK_VERSION" >> "$CHANGE_METADATA_FILE" |
| echo "STACK_REFSPEC=$STACK_REFSPEC" >> "$CHANGE_METADATA_FILE" |
| elif [[ "$GERRIT_PROJECT" =~ /installer/ ]]; then |
| # set vars |
| case "${ENGINE_COMPONENT}" in |
| kolla) |
| export STACK_TYPE="openstack" |
| echo "Info : Deploy scenario is overriden by job to $DEPLOY_SCENARIO" |
| ;; |
| kubespray) |
| export STACK_TYPE="kubernetes" |
| echo "Info : Deploy scenario is overriden by job to $DEPLOY_SCENARIO" |
| ;; |
| oom) |
| export STACK_TYPE="onap" |
| echo "Info : Deploy scenario is overriden by job to $DEPLOY_SCENARIO" |
| ;; |
| *) echo "ERROR : Invalid engine component $ENGINE_COMPONENT"; exit 1;; |
| esac |
| export STACK_VERSION="$GERRIT_BRANCH" |
| |
| # record vars to properties file |
| echo "STACK_TYPE=$STACK_TYPE" >> "$CHANGE_METADATA_FILE" |
| echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> "$CHANGE_METADATA_FILE" |
| echo "STACK_VERSION=$STACK_VERSION" >> "$CHANGE_METADATA_FILE" |
| echo "NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_VERSION=$GERRIT_PATCHSET_REVISION" >> "$CHANGE_METADATA_FILE" |
| echo "NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_REFSPEC=$GERRIT_REFSPEC" >> "$CHANGE_METADATA_FILE" |
| else |
| # NOTE (fdegir): if the change comes into provisioner repos, we need to set the stack type |
| # properly for the jobs verifying those changes |
| # set vars |
| export STACK_TYPE="${STACK_TYPE:-kubernetes}" |
| export STACK_VERSION=$GERRIT_BRANCH |
| |
| # record vars to properties file |
| echo "STACK_TYPE=$STACK_TYPE" >> "$CHANGE_METADATA_FILE" |
| echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> "$CHANGE_METADATA_FILE" |
| echo "STACK_VERSION=$STACK_VERSION" >> "$CHANGE_METADATA_FILE" |
| echo "NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_VERSION=$GERRIT_PATCHSET_REVISION" >> "$CHANGE_METADATA_FILE" |
| echo "NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_REFSPEC=$GERRIT_REFSPEC" >> "$CHANGE_METADATA_FILE" |
| fi |
| |
| # global vars |
| export NORDIX_ARM_HTTPS_URL="https://artifactory.nordix.org/artifactory" |
| export ARTIFACT_ARM_FOLDER="gerrit" |
| export BUILD_IDENTIFIER=$GERRIT_CHANGE_NUMBER |
| export OFFLINE_INSTALLER_FILE="/tmp/${STACK_TYPE}-${GERRIT_BRANCH}-${DISTRO}.bsx" |
| export OFFLINE_XTESTING_FILE="/tmp/${STACK_TYPE}-test-${GERRIT_BRANCH}.bsx" |
| export BUILD_ARTIFACTS="/tmp/${STACK_TYPE}-${GERRIT_BRANCH}-${DISTRO}.bsx" |
| export NORDIX_ARM_REPO="nordix-${STACK_TYPE}" |
| export NORDIX_ARTIFACT_URL="$NORDIX_ARM_HTTPS_URL/$NORDIX_ARM_REPO/oss/$ARTIFACT_ARM_FOLDER/$BUILD_IDENTIFIER" |
| |
| cat << EOF >> "$CHANGE_METADATA_FILE" |
| BUILD_IDENTIFIER=$BUILD_IDENTIFIER |
| BUILD_DATE=$(date '+%Y%m%d%H%M') |
| BUILT_BY=$BUILD_URL |
| DISTRO=$DISTRO |
| CI_LOOP=$CI_LOOP |
| ENGINE_SHA=$(git rev-parse HEAD) |
| OFFLINE_INSTALLER_FILE=$OFFLINE_INSTALLER_FILE |
| OFFLINE_XTESTING_FILE=$OFFLINE_XTESTING_FILE |
| BUILD_ARTIFACTS=$BUILD_ARTIFACTS |
| NORDIX_ARM_REPO=nordix-${STACK_TYPE} |
| NORDIX_ARTIFACT_URL=$NORDIX_ARTIFACT_URL |
| EOF |
| |
| # NOTE (fdegir): we generated the change metadata file normally until here |
| # we now determine the dependency as the last step to ensure we override vars |
| determine_dependency |
| |
| echo "Info : Change metadata" |
| echo "-------------------------------------------------------------------------" |
| cat "$CHANGE_METADATA_FILE" |
| echo "-------------------------------------------------------------------------" |
| |
| # vim: set ts=2 sw=2 expandtab: |