blob: b9b8397784b3dd068d678a1104e35dbd4b74ff34 [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.
set -exu
if [ $# -lt 2 ]; then
echo "Usage: $0 VERSION rc"
echo " $0 VERSION release"
echo " $0 VERSION local"
echo " e.g.: $0 0.13.0 rc # Verify 0.13.0 RC"
echo " e.g.: $0 0.13.0 release # Verify 0.13.0"
echo " e.g.: $0 0.13.0-dev20210203 local # Verify 0.13.0-dev20210203 on local"
exit 1
fi
VERSION="$1"
TYPE="$2"
SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TOP_SOURCE_DIR="${SOURCE_DIR}/../.."
local_prefix="${TOP_SOURCE_DIR}/dev/tasks/linux-packages"
echo "::group::Prepare repository"
export DEBIAN_FRONTEND=noninteractive
retry()
{
local n_retries=0
local max_n_retries=3
while ! "$@"; do
n_retries=$((n_retries + 1))
if [ ${n_retries} -eq ${max_n_retries} ]; then
echo "Failed: $@"
return 1
fi
echo "Retry: $@"
done
}
APT_INSTALL="retry apt install -y -V --no-install-recommends"
apt update
${APT_INSTALL} \
base-files \
ca-certificates \
curl \
lsb-release
code_name="$(lsb_release --codename --short)"
distribution="$(lsb_release --id --short | tr 'A-Z' 'a-z')"
artifactory_base_url="https://packages.apache.org/artifactory/arrow/${distribution}"
if [ "${TYPE}" = "rc" ]; then
suffix=${TYPE%-release}
artifactory_base_url+="-${suffix}"
fi
workaround_missing_packages=()
case "${distribution}-${code_name}" in
debian-*)
sed \
-i"" \
-e "s/ main$/ main contrib non-free/g" \
/etc/apt/sources.list.d/debian.sources
;;
esac
if [ "${TYPE}" = "local" ]; then
case "${VERSION}" in
*-dev*)
package_version="$(echo "${VERSION}" | sed -E -e 's/-(dev.*)$/~\1/g')"
;;
*-rc*)
package_version="$(echo "${VERSION}" | sed -e 's/-rc.*$//g')"
;;
*)
package_version="${VERSION}"
;;
esac
package_version+="-1"
apt_source_path="${local_prefix}/apt/repositories"
apt_source_path+="/${distribution}/pool/${code_name}/main"
apt_source_path+="/a/apache-arrow-apt-source"
apt_source_path+="/apache-arrow-apt-source_${package_version}_all.deb"
find "${local_prefix}/apt/repositories/"
${APT_INSTALL} "${apt_source_path}"
else
package_version="${VERSION}-1"
apt_source_base_name="apache-arrow-apt-source-latest-${code_name}.deb"
curl \
--output "${apt_source_base_name}" \
"${artifactory_base_url}/${apt_source_base_name}"
${APT_INSTALL} "./${apt_source_base_name}"
fi
if [ "${TYPE}" = "local" ]; then
sed \
-i.bak \
-e "s,^URIs: .*$,URIs: file://${local_prefix}/apt/repositories/${distribution},g" \
/etc/apt/sources.list.d/apache-arrow.sources
keys="${local_prefix}/KEYS"
if [ -f "${keys}" ]; then
gpg \
--no-default-keyring \
--keyring /tmp/apache-arrow-apt-source.kbx \
--import "${keys}"
gpg \
--no-default-keyring \
--keyring /tmp/apache-arrow-apt-source.kbx \
--armor \
--export > /usr/share/keyrings/apache-arrow-apt-source.asc
fi
elif [ "${TYPE}" = "rc" ]; then
sed \
-i.bak \
-e "s,^URIs: \\(.*\\)/,URIs: \\1-${suffix}/,g" \
/etc/apt/sources.list.d/apache-arrow.sources
fi
apt update
echo "::endgroup::"
echo "::group::Test Apache Arrow C++"
mkdir -p build
${APT_INSTALL} libarrow-dev=${package_version}
required_packages=()
required_packages+=(cmake)
required_packages+=(g++)
required_packages+=(git)
required_packages+=(make)
required_packages+=(pkg-config)
required_packages+=(${workaround_missing_packages[@]})
${APT_INSTALL} ${required_packages[@]}
# cmake version 3.31.6 -> 3.31.6
cmake_version=$(cmake --version | head -n1 | sed -e 's/^cmake version //')
# 3.31.6 -> 3.31
cmake_version_major_minor=${cmake_version%.*}
# 3.31 -> 3
cmake_version_major=${cmake_version_major_minor%.*}
# 3.31 -> 31
cmake_version_minor=${cmake_version_major_minor#*.}
if [ "${cmake_version_major}" -gt "3" ] || \
[ "${cmake_version_major}" -eq "3" -a "${cmake_version_minor}" -ge "25" ]; then
cp -a "${TOP_SOURCE_DIR}/cpp/examples/minimal_build" build/
pushd build/minimal_build
cmake -S . -B build_shared
make -C build_shared -j$(nproc)
build_shared/arrow-example
cmake -S . -B build_static -DARROW_LINK_SHARED=OFF
make -C build_static -j$(nproc)
build_static/arrow-example
mkdir -p build_pkg_config
c++ \
example.cc \
-o build_pkg_config/arrow-example \
$(pkg-config --cflags --libs arrow) \
-std=c++20
build_pkg_config/arrow-example
popd
fi
echo "::endgroup::"
echo "::group::Test Apache Arrow GLib"
export G_DEBUG=fatal-warnings
${APT_INSTALL} libarrow-glib-dev=${package_version}
${APT_INSTALL} libarrow-glib-doc=${package_version}
${APT_INSTALL} valac
cp -a "${TOP_SOURCE_DIR}/c_glib/example/vala" build/
pushd build/vala
valac --pkg arrow-glib --pkg posix build.vala
./build
popd
${APT_INSTALL} ruby-dev rubygems-integration
MAKEFLAGS="-j$(nproc)" gem install gobject-introspection
ruby -r gi -e "p GI.load('Arrow')"
echo "::endgroup::"
echo "::group::Test Apache Arrow Dataset"
${APT_INSTALL} libarrow-dataset-glib-dev=${package_version}
${APT_INSTALL} libarrow-dataset-glib-doc=${package_version}
ruby -r gi -e "p GI.load('ArrowDataset')"
echo "::endgroup::"
echo "::group::Test Apache Arrow Flight"
${APT_INSTALL} libarrow-flight-glib-dev=${package_version}
${APT_INSTALL} libarrow-flight-glib-doc=${package_version}
ruby -r gi -e "p GI.load('ArrowFlight')"
echo "::endgroup::"
echo "::group::Test Apache Arrow Flight SQL"
${APT_INSTALL} libarrow-flight-sql-glib-dev=${package_version}
${APT_INSTALL} libarrow-flight-sql-glib-doc=${package_version}
ruby -r gi -e "p GI.load('ArrowFlightSQL')"
echo "::endgroup::"
echo "::group::Test Gandiva"
${APT_INSTALL} libgandiva-glib-dev=${package_version}
${APT_INSTALL} libgandiva-glib-doc=${package_version}
ruby -r gi -e "p GI.load('Gandiva')"
echo "::endgroup::"
echo "::group::Test Apache Parquet"
${APT_INSTALL} libparquet-glib-dev=${package_version}
${APT_INSTALL} libparquet-glib-doc=${package_version}
ruby -r gi -e "p GI.load('Parquet')"
echo "::endgroup::"
echo "::group::Prepare downgrade test"
can_downgrade=false
if [ "${distribution}" = 'debian' ] && [[ "$(cat /etc/debian_version)" =~ /sid$ ]]; then
# Skip downgrade test on Debian testing.
# Debian testing and unstable use "${testing_code_name}/"sid" as /etc/debian_version content.
:
elif [ -f /etc/apt/sources.list.d/apache-arrow.sources.bak ]; then
mv /etc/apt/sources.list.d/apache-arrow.sources \
/etc/apt/sources.list.d/apache-arrow-current.sources
mv /etc/apt/sources.list.d/apache-arrow.sources{.bak,}
cp -a /usr/share/keyrings/apache-arrow-apt-source{,-current}.asc
sed \
-i.bak \
-e 's/\.asc$/-current.asc/g' \
/etc/apt/sources.list.d/apache-arrow-current.sources
if curl \
--fail \
--output "apache-arrow-apt-source-latest.deb" \
https://packages.apache.org/artifactory/arrow/${distribution}/apache-arrow-apt-source-latest-${code_name}.deb; then
${APT_INSTALL} --allow-downgrades ./apache-arrow-apt-source-latest.deb
apt update
can_downgrade=true
fi
fi
# 22.0.0.dev54 -> 22
# 22.0.0 -> 22
current_major_version=${package_version%%.*}
# 22 -> 21
previous_major_version=$[current_major_version -1]
# 22 -> 21
previous_package_version="${previous_major_version}.0.0-1"
echo "::endgroup::"
if [ "${can_downgrade}" != "true" ]; then
exit 0
fi
echo "::group::Downgrade Gandiva"
${APT_INSTALL} --allow-downgrades \
libarrow-acero-dev=${previous_package_version} \
libarrow-compute-dev=${previous_package_version} \
libarrow-dev=${previous_package_version} \
libarrow-glib-dev=${previous_package_version} \
libgandiva-dev=${previous_package_version} \
libgandiva-glib-dev=${previous_package_version} \
libparquet-dev=${previous_package_version}
echo "::endgroup::"
echo "::group::Downgrade Apache Arrow Flight SQL"
${APT_INSTALL} --allow-downgrades \
libarrow-acero-dev=${previous_package_version} \
libarrow-compute-dev=${previous_package_version} \
libarrow-dev=${previous_package_version} \
libarrow-flight-dev=${previous_package_version} \
libarrow-flight-glib-dev=${previous_package_version} \
libarrow-flight-sql-dev=${previous_package_version} \
libarrow-flight-sql-glib-dev=${previous_package_version} \
libarrow-glib-dev=${previous_package_version}
echo "::endgroup::"
echo "::group::Downgrade Apache Arrow Dataset"
${APT_INSTALL} --allow-downgrades \
libarrow-acero-dev=${previous_package_version} \
libarrow-compute-dev=${previous_package_version} \
libarrow-dataset-dev=${previous_package_version} \
libarrow-dataset-glib-dev=${previous_package_version} \
libarrow-dev=${previous_package_version} \
libarrow-glib-dev=${previous_package_version} \
libparquet-dev=${previous_package_version} \
libparquet-glib-dev=${previous_package_version}
echo "::endgroup::"
echo "::group::Prepare upgrade test"
mv /etc/apt/sources.list.d/apache-arrow-current.sources \
/etc/apt/sources.list.d/apache-arrow.sources
apt update
echo "::endgroup::"
echo "::group::Upgrade Gandiva"
${APT_INSTALL} libgandiva-glib-dev=${package_version}
echo "::endgroup::"
echo "::group::Upgrade Apache Arrow Flight SQL"
${APT_INSTALL} libarrow-flight-sql-glib-dev=${package_version}
echo "::endgroup::"
echo "::group::Upgrade Apache Arrow Dataset"
${APT_INSTALL} libarrow-dataset-dev=${package_version}
echo "::endgroup::"