blob: e67439467cc2e91789f05c97ef05340b0535bee7 [file] [log] [blame]
# 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.
ARROW_DIR="${SOURCE_DIR}/../.."
update_versions() {
local base_version=$1
local next_version=$2
local type=$3
case ${type} in
release)
local version=${base_version}
local r_version=${base_version}
local python_version=${base_version}
;;
snapshot)
local version=${next_version}-SNAPSHOT
local r_version=${base_version}.9000
local python_version=${next_version}a0
;;
esac
local major_version=${version%%.*}
pushd "${ARROW_DIR}/c_glib"
sed -i.bak -E -e \
"s/^ version: '.+'/ version: '${version}'/" \
meson.build
rm -f meson.build.bak
git add meson.build
# Add a new version entry only when the next release is a new major
# release and it doesn't exist yet.
if [ "${type}" = "snapshot" ] && \
[ "${next_version}" = "${major_version}.0.0" ] && \
! grep -q -F "(${major_version}, 0)" tool/generate-version-header.py; then
sed -i.bak -E -e \
"s/^ALL_VERSIONS = \[$/&\\n (${major_version}, 0),/" \
tool/generate-version-header.py
rm -f tool/generate-version-header.py.bak
git add tool/generate-version-header.py
fi
sed -i.bak -E -e \
"s/\"version-string\": \".+\"/\"version-string\": \"${version}\"/" \
vcpkg.json
rm -f vcpkg.json.bak
git add vcpkg.json
popd
pushd "${ARROW_DIR}/ci/scripts"
sed -i.bak -E -e \
"s/^pkgver=.+/pkgver=${r_version}/" \
PKGBUILD
rm -f PKGBUILD.bak
git add PKGBUILD
popd
pushd "${ARROW_DIR}/cpp"
sed -i.bak -E -e \
"s/^set\(ARROW_VERSION \".+\"\)/set(ARROW_VERSION \"${version}\")/" \
CMakeLists.txt
rm -f CMakeLists.txt.bak
git add CMakeLists.txt
sed -i.bak -E -e \
"s/^ version: '.+'/ version: '${version}'/" \
meson.build
rm -f meson.build.bak
git add meson.build
sed -i.bak -E -e \
"s/\"version-string\": \".+\"/\"version-string\": \"${version}\"/" \
vcpkg.json
rm -f vcpkg.json.bak
git add vcpkg.json
popd
pushd "${ARROW_DIR}/dev/tasks/homebrew-formulae"
sed -i.bak -E -e \
"s/arrow-[0-9.\-]+[0-9SNAPHOT]+/arrow-${version}/g" \
apache-arrow-glib.rb \
apache-arrow.rb
rm -f \
apache-arrow-glib.rb.bak \
apache-arrow.rb.bak
git add \
apache-arrow-glib.rb \
apache-arrow.rb
popd
pushd "${ARROW_DIR}/matlab"
sed -i.bak -E -e \
"s/^set\(MLARROW_VERSION \".+\"\)/set(MLARROW_VERSION \"${version}\")/" \
CMakeLists.txt
rm -f CMakeLists.txt.bak
git add CMakeLists.txt
popd
pushd "${ARROW_DIR}/python"
sed -i.bak -E -e \
"s/^fallback_version = '.+'/fallback_version = '${python_version}'/" \
pyproject.toml
rm -f pyproject.toml.bak
git add pyproject.toml
sed -i.bak -E -e \
"s/^set\(PYARROW_VERSION \".+\"\)/set(PYARROW_VERSION \"${version}\")/" \
CMakeLists.txt
rm -f CMakeLists.txt.bak
git add CMakeLists.txt
popd
pushd "${ARROW_DIR}/r"
sed -i.bak -E -e \
"s/^Version: .+/Version: ${r_version}/" \
DESCRIPTION
rm -f DESCRIPTION.bak
git add DESCRIPTION
# Replace dev version with release version
sed -i.bak -E -e \
"/^<!--/,/^# arrow /s/^# arrow .+/# arrow ${base_version}/" \
NEWS.md
if [ ${type} = "snapshot" ]; then
# Add a news entry for the new dev version
sed -i.bak -E -e \
"/^<!--/,/^# arrow /s/^(# arrow .+)/# arrow ${r_version}\n\n\1/" \
NEWS.md
fi
rm -f NEWS.md.bak
git add NEWS.md
# godoc link must reference current version, will reference v0.0.0 (2018) otherwise
sed -i.bak -E -e \
"s|(github\\.com/apache/arrow/go)/v[0-9]+|\1/v${major_version}|g" \
_pkgdown.yml
rm -f _pkgdown.yml.bak
git add _pkgdown.yml
popd
pushd "${ARROW_DIR}/ruby"
sed -i.bak -E -e \
"s/^ VERSION = \".+\"/ VERSION = \"${version}\"/g" \
*/*/*/version.rb
rm -f */*/*/version.rb.bak
git add */*/*/version.rb
popd
pushd "${ARROW_DIR}/docs/source"
# godoc link must reference current version, will reference v0.0.0 (2018) otherwise
sed -i.bak -E -e \
"s|(github\\.com/apache/arrow/go)/v[0-9]+|\1/v${major_version}|g" \
index.rst
rm -f index.rst.bak
git add index.rst
popd
pushd "${ARROW_DIR}"
${PYTHON:-python3} "dev/release/utils-update-docs-versions.py" \
. \
"${base_version}" \
"${next_version}"
git add docs/source/_static/versions.json
git add r/pkgdown/assets/versions.html
git add r/pkgdown/assets/versions.json
popd
}
current_version() {
grep ARROW_VERSION "${ARROW_DIR}/cpp/CMakeLists.txt" | \
head -n1 | \
grep -E -o '([0-9]+\.[0-9]+\.[0-9]+)'
}
so_version() {
local version=$1
local major_version=$(echo ${version} | cut -d. -f1)
local minor_version=$(echo ${version} | cut -d. -f2)
expr ${major_version} \* 100 + ${minor_version}
}
gir_api_version() {
local version=$1
local major_version=$(echo ${version} | cut -d. -f1)
local minor_version=$(echo ${version} | cut -d. -f2)
echo "${major_version}.${minor_version}"
}
update_deb_package_names() {
local version=$1
local next_version=$2
echo "Updating .deb package names for ${next_version}"
local substituted=false
local deb_lib_suffix=$(so_version ${version})
local next_deb_lib_suffix=$(so_version ${next_version})
if [ "${deb_lib_suffix}" != "${next_deb_lib_suffix}" ]; then
pushd ${ARROW_DIR}/dev/tasks/linux-packages/apache-arrow
for target in debian*/lib*${deb_lib_suffix}.install; do
git mv \
${target} \
$(echo ${target} | sed -e "s/${deb_lib_suffix}/${next_deb_lib_suffix}/")
done
local deb_lib_suffix_substitute_pattern="s/(lib(arrow|gandiva|parquet)[-a-z]*)${deb_lib_suffix}/\\1${next_deb_lib_suffix}/g"
sed -i.bak -E -e "${deb_lib_suffix_substitute_pattern}" debian*/control*
rm -f debian*/control*.bak
git add debian*/control*
substituted=true
popd
fi
local deb_gir_suffix=$(gir_api_version ${version})
local next_deb_gir_suffix=$(gir_api_version ${next_version})
if [ "${deb_gir_suffix}" != "${next_deb_gir_suffix}" ]; then
pushd ${ARROW_DIR}/dev/tasks/linux-packages/apache-arrow
for target in debian*/gir1.2-*-${deb_gir_suffix}.install; do
git mv \
${target} \
$(echo ${target} | sed -e "s/${deb_gir_suffix}/${next_deb_gir_suffix}/")
done
local deb_gir_suffix_substitute_pattern="s/(gir1\\.2-(arrow|gandiva|parquet)[-a-z]*)${deb_gir_suffix}/\\1${next_deb_gir_suffix}/g"
sed -i.bak -E -e "${deb_gir_suffix_substitute_pattern}" debian*/control*
rm -f debian*/control*.bak
git add debian*/control*
substituted=true
popd
fi
if [ "${substituted}" = "true" ]; then
git commit -m "MINOR: [Release] Update .deb package names for ${next_version}"
fi
}
update_linux_packages() {
local version=$1
local release_time=$2
echo "Updating .deb/.rpm changelogs for ${version}"
pushd ${ARROW_DIR}/dev/tasks/linux-packages
rake \
version:update \
ARROW_RELEASE_TIME="${release_time}" \
ARROW_VERSION=${version}
git add */debian*/changelog */yum/*.spec.in
git commit -m "MINOR: [Release] Update .deb/.rpm changelogs for ${version}"
popd
}