blob: ce3784f334b0fcb0a86e933108c81ce81b6bf3f4 [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.
#
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
source ${SCRIPT_DIR}/_init.sh
source ${SCRIPT_DIR}/_utils.sh
###########################
check_variables_set NEW_VERSION
###########################
# Idealized use-cases:
# Scenario A) New major release X.0.0
# Premise:
# There is a main branch a version X.0-SNAPSHOT, with a japimp reference version of (X-1).Y.Z
# Release flow:
# - update the main to (X+1).0-SNAPSHOT, but keep the reference version intact since X.0.0 is not released (yet)
# - create X.0-SNAPSHOT branch, but keep the reference version intact since X.0.0 is not released (yet)
# - release X.0.0
# - update the japicmp reference version of both main and X.0-SNAPSHOT to X.0.0
# - enable stronger compatibility constraints for X.0-SNAPSHOT to ensure compatibility for PublicEvolving
# Scenario A) New minor release X.Y.0
# Premise:
# There is a main branch with a version X.Y-SNAPSHOT, with a japicmp reference version of X.(Y-1).0 .
# Release flow:
# - update the main branch 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 main and X.Y-SNAPSHOT to X.Y.0
# - enable stronger compatibility constraints for X.Y-SNAPSHOT to ensure compatibility for PublicEvolving
# Scenario C) New patch 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:
# - release X.Y.Z
# - update the japicmp reference version of X.Y-SNAPSHOT to X.Y.Z
function enable_public_evolving_compatibility_checks() {
perl -pi -e 's#<!--(<include>\@org.apache.flink.annotation.PublicEvolving</include>)-->#${1}#' pom.xml
perl -pi -e 's#\t+<exclude>\@org.apache.flink.annotation.PublicEvolving.*\n##' pom.xml
}
function set_japicmp_reference_version() {
local version=$1
perl -pi -e 's#(<japicmp.referenceVersion>).*(</japicmp.referenceVersion>)#${1}'${version}'${2}#' pom.xml
}
function clear_exclusions() {
exclusion_start=$(($(sed -n '/<!-- MARKER: start exclusions/=' pom.xml) + 1))
exclusion_end=$(($(sed -n '/<!-- MARKER: end exclusions/=' pom.xml) - 1))
if [[ $exclusion_start -lt $exclusion_end ]]; then
sed -i "${exclusion_start},${exclusion_end}d" pom.xml
fi
}
function update_japicmp_configuration() {
cd "${SOURCE_DIR}"
current_branch=$(git branch --show-current)
if [[ ${current_branch} =~ ^main$ ]]; then
# main branch
set_japicmp_reference_version ${NEW_VERSION}
clear_exclusions
elif [[ ${current_branch} =~ ^v ]]; then
# snapshot branch
set_japicmp_reference_version ${NEW_VERSION}
enable_public_evolving_compatibility_checks
clear_exclusions
else
echo "Script was called from unexpected branch ${current_branch}; should be snapshot/main branch."
exit 1
fi
}
(update_japicmp_configuration)