Combine generic and external scenario determination to one 19/57519/2
authorFatih Degirmenci <fdegir@gmail.com>
Thu, 17 May 2018 07:40:33 +0000 (09:40 +0200)
committerFatih Degirmenci <fdegir@gmail.com>
Thu, 17 May 2018 09:22:15 +0000 (11:22 +0200)
Previously we were determining the impacted generic scenario by looking into
changeset in releng-xci. Since we moved the scenarios to releng-xci-scenarios,
this is not needed anymore and same function can be used for determining the
scenario.

Change-Id: I06a65599e03dff4016d0d9d78116e505d84b5061
Signed-off-by: Fatih Degirmenci <fdegir@gmail.com>
jjb/xci/xci-set-scenario.sh

index c28093d..db70150 100755 (executable)
@@ -38,7 +38,7 @@ set -o pipefail
 #   skip-verify
 #   skip-deployment
 #   force-verify
-function override_generic_scenario() {
+function override_scenario() {
     echo "Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC"
 
     # ensure the metadata we record is consistent for all types of patches including skipped ones
@@ -81,58 +81,40 @@ function override_generic_scenario() {
     fi
 }
 
-# This function determines the impacted generic scenario by processing the
+# This function determines the impacted scenario by processing the Gerrit
 # change and using diff to see what changed. If changed files belong to a scenario
 # its name gets recorded for deploying and testing the right scenario.
 #
-# Pattern to be searched in Changeset
-#   releng-xci/scenarios/<scenario>/<impacted files>: <scenario>
-#   releng-xci/xci/installer/osa/<impacted files>: os-nosdn-nofeature
-#   releng-xci/xci/installer/kubespray/<impacted files>: k8-nosdn-nofeature
-#   the rest: os-nosdn-nofeature
-function determine_generic_scenario() {
-    echo "Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC"
-
-    # get the changeset
-    cd $WORKSPACE
-    SCENARIOS=$(git diff HEAD^..HEAD --name-only -- 'xci/scenarios' | cut -d "/" -f 3 | uniq)
-    # We need to set default scenario for changes that mess with installers
-    INSTALLERS=$(git diff HEAD^..HEAD --name-only -- 'xci/installer' | cut -d "/" -f 3 | uniq)
-    for CHANGED_SCENARIO in $SCENARIOS; do
-        DEPLOY_SCENARIO[${#DEPLOY_SCENARIO[@]}]=$CHANGED_SCENARIO
-    done
-    for CHANGED_INSTALLER in $INSTALLERS; do
-        case $CHANGED_INSTALLER in
-            kubespray)
-                DEPLOY_SCENARIO[${#DEPLOY_SCENARIO[@]}]='k8-nosdn-nofeature'
-                ;;
-            # Default case (including OSA changes)
-            *)
-                DEPLOY_SCENARIO[${#DEPLOY_SCENARIO[@]}]='os-nosdn-nofeature'
-                ;;
-        esac
-    done
-    # For all other changes, we only need to set a default scenario if it's not set already
-    if git diff HEAD^..HEAD --name-only | grep -q -v 'xci/installer\|xci/scenario'; then
-         [[ ${#DEPLOY_SCENARIO[@]} -eq 0 ]] && DEPLOY_SCENARIO[${#DEPLOY_SCENARIO[@]}]='os-nosdn-nofeature'
-    fi
-
-    # extract releng-xci sha
-    XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD)
-
-    # extract scenario sha which is same as releng-xci sha for generic scenarios
-    SCENARIO_SHA=$XCI_SHA
-}
-
-# This function determines the impacted external scenario by processing the Gerrit
-# change and using diff to see what changed. If changed files belong to a scenario
-# its name gets recorded for deploying and testing the right scenario.
+# Please note that if the change is coming to releng-xci and the scenario is
+# not specified in commit message, we set the installer and scenario to default
+# ones; osa and os-nosdn-nofeature.
 #
 # Pattern
 #   <project-repo>/scenarios/<scenario>/<impacted files>: <scenario>
-function determine_external_scenario() {
+function determine_scenario() {
     echo "Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC"
 
+    # if the change is coming to releng-xci, we just set the default installer
+    # and scenario.
+    # in most cases, the proposer of the change states the impacted scenario
+    # in commit message and we don't end up here very frequently
+    if [[ $GERRIT_PROJECT == "releng-xci" ]]; then
+        echo "Change is proposed to releng-xci. Setting default installer and scenario"
+        # ensure the metadata we record is consistent for all types of patches including skipped ones
+        # extract releng-xci sha
+        XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD)
+
+        # extract scenario sha which is same as releng-xci sha for generic scenarios
+        SCENARIO_SHA=$XCI_SHA
+
+        echo "INSTALLER_TYPE=osa" > $WORK_DIRECTORY/scenario.properties
+        echo "DEPLOY_SCENARIO=os-nosdn-nofeature" >> $WORK_DIRECTORY/scenario.properties
+        echo "XCI_SHA=$XCI_SHA" >> $WORK_DIRECTORY/scenario.properties
+        echo "SCENARIO_SHA=$SCENARIO_SHA" >> $WORK_DIRECTORY/scenario.properties
+        echo "PROJECT_NAME=$GERRIT_PROJECT" >> $WORK_DIRECTORY/scenario.properties
+        exit 0
+    fi
+
     # remove the clone that is done via jenkins and place releng-xci there so the
     # things continue functioning properly
     cd $HOME && /bin/rm -rf $WORKSPACE
@@ -168,12 +150,8 @@ GERRIT_TOPIC="${GERRIT_TOPIC:-''}"
 WORK_DIRECTORY=/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO
 /bin/rm -rf $WORK_DIRECTORY && mkdir -p $WORK_DIRECTORY
 
-if [[ $GERRIT_PROJECT == "releng-xci" ]]; then
-    override_generic_scenario
-    determine_generic_scenario
-else
-    determine_external_scenario
-fi
+override_scenario
+determine_scenario
 
 # ensure single scenario is impacted
     if [[ $(IFS=$'\n' echo ${DEPLOY_SCENARIO[@]} | wc -w) != 1 ]]; then