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 STACK_VERSION="$GERRIT_PATCHSET_REVISION"
export STACK_REFSPEC="$GERRIT_REFSPEC"
- # log info to console
- echo " STACK_TYPE=$STACK_TYPE"
- echo " DEPLOY_SCENARIO=$DEPLOY_SCENARIO"
- 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"
esac
export STACK_VERSION="$GERRIT_BRANCH"
- # log info to console
- echo " STACK_TYPE=$STACK_TYPE"
- echo " DEPLOY_SCENARIO=$DEPLOY_SCENARIO"
- 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"
export STACK_TYPE=kubernetes
export STACK_VERSION=$GERRIT_BRANCH
- # log info to console
- echo " STACK_TYPE=$STACK_TYPE"
- echo " DEPLOY_SCENARIO=$DEPLOY_SCENARIO"
- 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"
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"