X-Git-Url: https://gerrit.nordix.org/gitweb?a=blobdiff_plain;f=jjb%2Fengine%2Fscripts%2Fgenerate-change-metadata.sh;h=ead0a77886da01273e8e2e43c8f0597e9f1a2ada;hb=6cd44a7fea816effd76c19fd95ea7cdcf21c1536;hp=2ad1e5fece6a4c3c07ecbefb0cb953aebdf8c986;hpb=de51df03efb9fc0cfc2d0ca5c757727c6c6c044e;p=infra%2Fcicd.git diff --git a/jjb/engine/scripts/generate-change-metadata.sh b/jjb/engine/scripts/generate-change-metadata.sh index 2ad1e5fe..ead0a778 100755 --- a/jjb/engine/scripts/generate-change-metadata.sh +++ b/jjb/engine/scripts/generate-change-metadata.sh @@ -23,17 +23,78 @@ set -o nounset set -o errexit set -o pipefail -# NOTE (fdegir): we need to remove $WORKSPACE and clone infra/engine repository -# as infra/engine is what drives the deployment -if [[ "$GERRIT_PROJECT" != "infra/engine" ]]; then - cd "$HOME" && /bin/rm -rf "$WORKSPACE" - echo "Info : Cloning infra/engine repository" - git clone -q https://gerrit.nordix.org/infra/engine.git "$WORKSPACE" - cd "$WORKSPACE" -fi +# 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" +export CHANGE_METADATA_FILE="$WORKSPACE/change.properties" /bin/rm -f "$CHANGE_METADATA_FILE" echo "Info : Generating change metadata" @@ -49,13 +110,9 @@ if [[ "$GERRIT_PROJECT" =~ /stack/ ]]; then export STACK_VERSION="$GERRIT_PATCHSET_REVISION" export STACK_REFSPEC="$GERRIT_REFSPEC" - # log info to console - echo " STACK_TYPE=$STACK_TYPE" - echo " STACK_VERSION=$GERRIT_PATCHSET_REVISION" - echo " 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 @@ -63,25 +120,23 @@ elif [[ "$GERRIT_PROJECT" =~ /installer/ ]]; then 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" - # log info to console - echo " STACK_TYPE=$STACK_TYPE" - echo " STACK_VERSION=$STACK_VERSION" - echo " NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_VERSION=$GERRIT_PATCHSET_REVISION" - echo " NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_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 "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" @@ -90,14 +145,9 @@ else export STACK_TYPE=kubernetes export STACK_VERSION=$GERRIT_BRANCH - # log info to console - echo " STACK_TYPE=$STACK_TYPE" - echo " STACK_VERSION=$STACK_VERSION" - echo " NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_VERSION=$GERRIT_PATCHSET_REVISION" - echo " NORDIX_$(echo $ENGINE_COMPONENT | tr a-z A-Z)_REFSPEC=$GERRIT_REFSPEC" - # record vars to properties file - echo "STACK_TYPE=kubernetes" >> "$CHANGE_METADATA_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" @@ -125,6 +175,10 @@ 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"