blob: 29d2a64fad4f008565e5206bc3b1b72724abf1f7 [file] [log] [blame]
#!/usr/bin/env bash
#
# Copyright 2018-present Open Networking Foundation
#
# 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.
# update_xos_docker.sh
# Updates docker FROM lines of synchronizers and xos core, when XOS is updated,
# and the synchronizer has the same parent SemVer major version
#
# Before using this, update XOS version in orchestration/xos/VERSION file
#
# After running script, `repo diff` will show the updated files.
#
# To undo changes: `repo forall -c "git checkout *Dockerfile*"`
set -eu -o pipefail
WORKSPACE=${WORKSPACE:-../../..}
NEW_COMMIT=${NEW_COMMIT:0}
XOS_MAJOR=$(cut -b 1 "${WORKSPACE}/cord/orchestration/xos/VERSION")
XOS_VERSION=$(cat "${WORKSPACE}/cord/orchestration/xos/VERSION")
# Update Synchronizer FROM parent versions
for df in "${WORKSPACE}"/cord/orchestration/xos_services/*/Dockerfile.synchronizer
do
df_contents=$(cat "$df")
# shellcheck disable=SC2076
if [[ "$df_contents" =~ "FROM xosproject/xos-synchronizer-base:${XOS_MAJOR}" ||
"$df_contents" =~ "FROM xosproject/xos-synchronizer-base:master" ]]
then
pushd "$(dirname "$df")"
echo "Updating synchronizer Dockerfile: ${df}"
perl -pi -e "s/^FROM(.*):.*$/FROM\\1:$XOS_VERSION/" Dockerfile.synchronizer
# if NEW_COMMIT is nonzero, create a new GIT commit with these changes
if $NEW_COMMIT
then
# check if previous version is semver for patch version bump
OLD_VERSION=$(head -n1 "VERSION")
if [[ "$OLD_VERSION" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]
then
repo start "bump$XOS_VERSION"
# Increment patch by 1
perl -pi -e 's/(\d+)$/ 1 + $1/ge' VERSION
git add VERSION Dockerfile.synchronizer
git commit -m "Updated service to use new XOS core version: $XOS_VERSION"
else
echo "This service isn't on a released version, manual intervention required"
fi
fi
popd
fi
done
# Update XOS parent versions
for df in "${WORKSPACE}"/cord/orchestration/xos/containers/*/Dockerfile* \
"${WORKSPACE}/cord/orchestration/xos-tosca/Dockerfile"
do
echo "Updating core Dockerfile: ${df}"
perl -pi -e "s/^FROM xos(.*):.*$/FROM xos\\1:$XOS_VERSION/" "$df"
done