X-Git-Url: https://gerrit.nordix.org/gitweb?a=blobdiff_plain;f=jjb%2Fengine%2Fscripts%2Fgenerate-change-metadata.sh;h=ead0a77886da01273e8e2e43c8f0597e9f1a2ada;hb=6cd44a7fea816effd76c19fd95ea7cdcf21c1536;hp=f02b348065852c588a19c8ba101bba678358bbda;hpb=459c348dc363fab68f05fdb874147be83b7fa8ec;p=infra%2Fcicd.git diff --git a/jjb/engine/scripts/generate-change-metadata.sh b/jjb/engine/scripts/generate-change-metadata.sh index f02b3480..ead0a778 100755 --- a/jjb/engine/scripts/generate-change-metadata.sh +++ b/jjb/engine/scripts/generate-change-metadata.sh @@ -19,74 +19,136 @@ # ============LICENSE_END========================================================= -# NOTES (fdegir): this script only works for -# - infra/engine -# - infra/provisioner/heat - 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" - # TODO (fdegir): this is temporarily here to develop the jobs - git fetch "https://gerrit.nordix.org/infra/engine" refs/changes/23/4823/18 && git checkout FETCH_HEAD -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" -# TODO (fdegir): this should match to the branch of the job for {stack}-verify jobs -export STACK_VERSION=master - # 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//*\//}" +echo "Info : Setting STACK_TYPE and STACK_VERSION" if [[ "$GERRIT_PROJECT" =~ /stack/ ]]; then + # set vars export STACK_TYPE="$ENGINE_COMPONENT" - echo "Info : Setting STACK_TYPE, STACK_VERSION and STACK_REFSPEC" - echo " STACK_TYPE=$STACK_TYPE" - echo " STACK_VERSION=$GERRIT_PATCHSET_REVISION" - echo " STACK_REFSPEC=$GERRIT_REFSPEC" + 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 "STACK_VERSION=$GERRIT_PATCHSET_REVISION" >> "$CHANGE_METADATA_FILE" - echo "STACK_REFSPEC=$GERRIT_REFSPEC" >> "$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" - echo "Info : Setting STACK_TYPE, STACK_VERSION and STACK_REFSPEC" - 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" else + # set vars export STACK_TYPE=kubernetes - export STACK_VERSION=$STACK_VERSION - echo "STACK_TYPE=kubernetes" >> "$CHANGE_METADATA_FILE" + 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 @@ -95,8 +157,8 @@ fi export NORDIX_ARM_HTTPS_URL="https://artifactory.nordix.org/artifactory" export ARTIFACT_ARM_FOLDER="gerrit" export BUILD_IDENTIFIER=$GERRIT_CHANGE_NUMBER -export INSTALLER_FILE="${STACK_TYPE}-ubuntu1804.bsx" -export BUILD_ARTIFACTS="${STACK_TYPE}-ubuntu1804.bsx" +export INSTALLER_FILE="${STACK_TYPE}-${DISTRO}.bsx" +export BUILD_ARTIFACTS="${STACK_TYPE}-${DISTRO}.bsx" export NORDIX_ARM_REPO="nordix-${STACK_TYPE}" export NORDIX_ARTIFACT_URL="$NORDIX_ARM_HTTPS_URL/$NORDIX_ARM_REPO/installer/oss/$ARTIFACT_ARM_FOLDER/$BUILD_IDENTIFIER" @@ -104,6 +166,7 @@ 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) INSTALLER_FILE=${STACK_TYPE}-ubuntu1804.bsx @@ -112,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"