Updated check for apt-add-repository capabilities.

In Ubuntu 20.04 there appeared an updated version of the
software-properties-common package in focal-updates, which ships a newer
apt-add-repository version that doesn't support -P/-S/-U command line arguments.

Since we cannot rely on package version checks to determine apt-add-repository
capabilities, we have to parse its --help output instead.

Also, made source list processing more protected against spaces.
This commit is contained in:
Andrey Semashev 2021-11-16 00:54:51 +03:00
parent 05e0d1688d
commit fede5878c3

View File

@ -253,7 +253,7 @@ jobs:
if [ -f "/etc/debian_version" ] if [ -f "/etc/debian_version" ]
then then
apt-get -o Acquire::Retries=$NET_RETRY_COUNT update apt-get -o Acquire::Retries=$NET_RETRY_COUNT update
apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common tzdata wget curl apt-transport-https ca-certificates make build-essential g++ python python3 git cmake apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common tzdata wget curl apt-transport-https ca-certificates make build-essential g++ python python3 perl git cmake
fi fi
fi fi
git config --global pack.threads 0 git config --global pack.threads 0
@ -263,28 +263,32 @@ jobs:
- name: Install packages - name: Install packages
if: matrix.install if: matrix.install
run: | run: |
SOURCE_KEYS=(${{join(matrix.source_keys, ' ')}}) declare -a SOURCE_KEYS SOURCES
SOURCES=(${{join(matrix.sources, ' ')}}) if [ -n "${{join(matrix.source_keys, ' ')}}" ]
then
SOURCE_KEYS=("${{join(matrix.source_keys, '" "')}}")
fi
if [ -n "${{join(matrix.sources, ' ')}}" ]
then
SOURCES=("${{join(matrix.sources, '" "')}}")
fi
for key in "${SOURCE_KEYS[@]}" for key in "${SOURCE_KEYS[@]}"
do do
for i in {1..$NET_RETRY_COUNT} for i in {1..$NET_RETRY_COUNT}
do do
echo "Adding key: $key"
wget -O - "$key" | sudo apt-key add - && break || sleep 2 wget -O - "$key" | sudo apt-key add - && break || sleep 2
done done
done done
if [ ${#SOURCES[@]} -gt 0 ] if [ ${#SOURCES[@]} -gt 0 ]
then then
APT_ADD_REPO_COMMON_ARGS=("-y") APT_ADD_REPO_COMMON_ARGS=("-y")
APT_ADD_REPO_HAS_SOURCE_ARGS=0 APT_ADD_REPO_SUPPORTED_ARGS="$(apt-add-repository --help | perl -ne 'if (/^\s*-n/) { print "n"; } elsif (/^\s*-P/) { print "P"; } elsif (/^\s*-S/) { print "S"; } elsif (/^\s*-U/) { print "U"; }')"
SOFTWARE_PROPERTIES_VERSION="$(dpkg-query --showformat='${Version}' --show software-properties-common)" if [ -n "$APT_ADD_REPO_SUPPORTED_ARGS" -a -z "${APT_ADD_REPO_SUPPORTED_ARGS##*n*}" ]
if dpkg --compare-versions "$SOFTWARE_PROPERTIES_VERSION" ge "0.96.24.20"
then then
APT_ADD_REPO_COMMON_ARGS+=("-n") APT_ADD_REPO_COMMON_ARGS+=("-n")
fi fi
if dpkg --compare-versions "$SOFTWARE_PROPERTIES_VERSION" ge "0.98.10" APT_ADD_REPO_HAS_SOURCE_ARGS="$([ -n "$APT_ADD_REPO_SUPPORTED_ARGS" -a -z "${APT_ADD_REPO_SUPPORTED_ARGS##*P*}" -a -z "${APT_ADD_REPO_SUPPORTED_ARGS##*S*}" -a -z "${APT_ADD_REPO_SUPPORTED_ARGS##*U*}" ] && echo 1 || echo 0)"
then
APT_ADD_REPO_HAS_SOURCE_ARGS=1
fi
for source in "${SOURCES[@]}" for source in "${SOURCES[@]}"
do do
for i in {1..$NET_RETRY_COUNT} for i in {1..$NET_RETRY_COUNT}
@ -305,6 +309,7 @@ jobs:
esac esac
fi fi
APT_ADD_REPO_ARGS+=("$source") APT_ADD_REPO_ARGS+=("$source")
echo "apt-add-repository ${APT_ADD_REPO_ARGS[@]}"
sudo -E apt-add-repository "${APT_ADD_REPO_ARGS[@]}" && break || sleep 2 sudo -E apt-add-repository "${APT_ADD_REPO_ARGS[@]}" && break || sleep 2
done done
done done
@ -335,7 +340,7 @@ jobs:
REF=${GITHUB_BASE_REF:-$GITHUB_REF} REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/} REF=${REF#refs/heads/}
echo REF: $REF echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true BOOST_BRANCH=develop && [ "$REF" = "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH echo BOOST_BRANCH: $BOOST_BRANCH
BUILD_JOBS=$((nproc || sysctl -n hw.ncpu) 2> /dev/null) BUILD_JOBS=$((nproc || sysctl -n hw.ncpu) 2> /dev/null)
echo "BUILD_JOBS=$BUILD_JOBS" >> $GITHUB_ENV echo "BUILD_JOBS=$BUILD_JOBS" >> $GITHUB_ENV