blob: 79e771c1720fd7ef888e6686abc4444767a2fc43 [file] [log] [blame]
#!/usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
if [ -z "${NEW_VERSION}" ]; then
echo "NEW_VERSION was not set."
exit 1
fi
CURR_DIR=`pwd`
if [[ `basename $CURR_DIR` != "tools" ]] ; then
echo "You have to call the script from the tools/ dir"
exit 1
fi
# Idealized use-cases:
# Scenario A) New major release X.Y.0
# Premise:
# There is a master branch with a version X.Y-SNAPSHOT, with a japicmp reference version of X.(Y-1).0 .
# Release flow:
# - update the master to X.(Y+1)-SNAPSHOT, but keep the reference version intact since X.Y.0 is not released (yet)
# - create X.Y-SNAPSHOT branch, but keep the reference version intact since X.Y.0 is not released (yet)
# - release X.Y.0
# - update the japicmp reference version of both master and X.Y-SNAPSHOT to X.Y.0
# - enable stronger compatibility constraints for X.Y-SNAPSHOT to ensure compatibility for PublicEvolving
# Scenario B) New minor release X.Y.Z
# Premise:
# There is a snapshot branch with a version X.Y-SNAPSHOT, with a japicmp reference version of X.Y.(Z-1)
# Release flow:
# - create X.Y.Z-rc branch
# - update the japicmp reference version of X.Y.Z to X.Y.(Z-1)
# - release X.Y.Z
# - update the japicmp reference version of X.Y-SNAPSHOT to X.Y.Z
POM=../pom.xml
function enable_public_evolving_compatibility_checks() {
perl -pi -e 's#<!--(<include>\@org.apache.flink.annotation.PublicEvolving</include>)-->#${1}#' ${POM}
perl -pi -e 's#\t+<exclude>\@org.apache.flink.annotation.PublicEvolving.*\n##' ${POM}
}
function set_japicmp_reference_version() {
local version=$1
perl -pi -e 's#(<japicmp.referenceVersion>).*(</japicmp.referenceVersion>)#${1}'${version}'${2}#' ${POM}
}
current_branch=$(git rev-parse --abbrev-ref HEAD)
if [[ ${current_branch} =~ -rc ]]; then
# release branch
version_prefix=$(echo "${NEW_VERSION}" | perl -p -e 's#(\d+\.\d+)\.\d+#$1#')
minor=$(echo "${NEW_VERSION}" | perl -p -e 's#\d+\.\d+\.(\d+)#$1#')
if ! [[ ${minor} == "0" ]]; then
set_japicmp_reference_version ${version_prefix}.$((minor - 1))
# this is a safeguard in case the manual step of enabling checks after the X.Y.0 release was forgotten
enable_public_evolving_compatibility_checks
fi
elif [[ ${current_branch} =~ ^master$ ]]; then
# master branch
set_japicmp_reference_version ${NEW_VERSION}
elif [[ ${current_branch} =~ ^release- ]]; then
# snapshot branch
set_japicmp_reference_version ${NEW_VERSION}
enable_public_evolving_compatibility_checks
else
echo "Script was called from unexpected branch ${current_branch}; should be rc/snapshot/master branch."
exit 1
fi