blob: 14833b3e4c2d43e8145887d2b904fb78ae4b860c [file] [log] [blame]
#!/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 errexit
set -o nounset
set -o pipefail
# this function processes commit message to determine the impacted scenario
# using the input provided by the committer.
#
# provisioner type, installer type and scenario should be placed at the beginning of
# lines separately and the format of the entry in commit message is as below
#
# provisioner-type: <provisioner type>
# installer-type: <installer type>
# deploy-scenario: <scenario name>
#
# example is
#
# provisioner-type: bifrost
# installer-type: kubespray
# deploy-scenario: k8-calico-nofeature
function override_installer_scenario() {
echo "Info: Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC to determine the provisioner, installer and, scenario"
cd $WORKSPACE
COMMIT_MESSAGE=$(git show -s --format=%B)
if [[ "$COMMIT_MESSAGE" =~ "provisioner-type:" ]]; then
# we support heat as well so ensure we capture it
export PROVISIONER_TYPE=$(echo "$COMMIT_MESSAGE" | grep '^provisioner-type:' | cut -d":" -f2 | sed 's/\s*//g')
else
# default is almost always bifrost
if [[ "$PROVISIONER_TYPE" == "" ]]; then
export PROVISIONER_TYPE=bifrost
fi
fi
if [[ "$COMMIT_MESSAGE" =~ "deploy-scenario:" && "$COMMIT_MESSAGE" =~ "installer-type:" ]]; then
export INSTALLER_TYPE=$(echo "$COMMIT_MESSAGE" | grep '^installer-type:' | cut -d":" -f2 | sed 's/\s*//g')
export DEPLOY_SCENARIO=$(echo "$COMMIT_MESSAGE" | grep '^deploy-scenario:' | cut -d":" -f2 | sed 's/\s*//g')
write_change_metadata
else
echo "Info: Installer type or deploy scenario is not specified."
echo "Info: Falling back to programmatically determining them."
fi
}
# this function will process the changed files to determine the impacted scenario
# if it is no specified by the committer. only one scenario per change should be
# touched.
# TODO: this is not implented yet.
function determine_scenario() {
# for infra/engine repo, we set INSTALLER_TYPE and DEPLOY_SCENARIO to their defaults
echo "Info: Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC"
if [[ "$GERRIT_PROJECT" == "infra/engine" ]]; then
echo "Info: Setting INSTALLER_TYPE and DEPLOY_SCENARIO to defaults for project $GERRIT_PROJECT patchset $GERRIT_REFSPEC"
export PROVISIONER_TYPE=$PROVISIONER_TYPE
export INSTALLER_TYPE=kubespray
export DEPLOY_SCENARIO=k8-calico-nofeature
write_change_metadata
else
cd $WORKSPACE
COMMIT_MESSAGE=$(git show -s --format=%B)
export PROVISIONER_TYPE=none
export INSTALLER_TYPE=none
export DEPLOY_SCENARIO=none
write_change_metadata
echo "Info: Not implemented!"
exit 0
fi
}
function write_change_metadata() {
echo "Info: Writing change metadata to $WORKSPACE/change.properties"
cat << EOF > $WORKSPACE/change.properties
PROJECT_GIT_URL=$GIT_BASE_HTTPS/$GERRIT_PROJECT
PROVISIONER_TYPE=$PROVISIONER_TYPE
INSTALLER_TYPE=$INSTALLER_TYPE
DEPLOY_SCENARIO=$DEPLOY_SCENARIO
GERRIT_PATCHSET_REVISION=$GERRIT_PATCHSET_REVISION
GERRIT_REFSPEC=$GERRIT_REFSPEC
EOF
echo "Info: Content of change.properties"
echo "-------------------------------------------------------------------------"
cat $WORKSPACE/change.properties
echo "-------------------------------------------------------------------------"
# need to exit here to ensure we don't go further while determining scenario
exit 0
}
echo "Info: Determining the provisioner, installer, and scenario"
declare -a PROVISIONER_TYPE
declare -a INSTALLER_TYPE
declare -a DEPLOY_SCENARIO
override_installer_scenario
determine_scenario
# vim: set ts=2 sw=2 expandtab: