Files
@ 3ddbe2a5f406
Branch filter:
Location: gimmecert/provision.sh
3ddbe2a5f406
4.0 KiB
text/x-sh
GC-47: Add support for Python 3.13:
- Simplify the option presence checks in functional tests to avoid
having to deal with differences in output between Python 3.13 and
older versions (similar checks are already in place for things like
key specification anyway). For more details, see this commit:
https://github.com/python/cpython/commit/c4a2e8a2c5188c3288d57b80852e92c83f46f6f3
- Simplify the option presence checks in functional tests to avoid
having to deal with differences in output between Python 3.13 and
older versions (similar checks are already in place for things like
key specification anyway). For more details, see this commit:
https://github.com/python/cpython/commit/c4a2e8a2c5188c3288d57b80852e92c83f46f6f3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #!/bin/bash
#
# Copyright (C) 2018, 2020, 2024, 2025 Branko Majic
#
# This file is part of Gimmecert.
#
# Gimmecert is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# Gimmecert is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# Gimmecert. If not, see <http://www.gnu.org/licenses/>.
#
# Provisioning script for the Vagrant test environment. Do not run
# outside of vagrant machine.
#
# Fail as soon as a command fails.
set -e
hostname=$(hostname)
if [[ $hostname != "gimmecert-testing" ]]; then
echo "Script should only be run on Vagrant testing machine."
exit 1
fi
# Update apt caches.
apt-get update -qq
# Install development tools.
apt-get install -qq -y git virtualenv
# Install Python build dependencies.
apt-get install -qq -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libffi-dev
# Import public keys for validating Python releases.
sudo -i -u vagrant gpg -q --import /vagrant/provision/python_releases_signing_keys.pub
# Download and build additional Python versions.
python_versions=("3.9.18" "3.10.13" "3.11.8" "3.12.2" "3.13.7")
work_directory="/home/vagrant/src"
echo "Setting-up work directory."
sudo -i -u vagrant mkdir -p "$work_directory"
for version in "${python_versions[@]}"; do
# Set-up information about Python version.
minor_version="${version%.[[:digit:]]*}"
interpreter="/usr/local/bin/python${minor_version}"
source_archive_link="https://www.python.org/ftp/python/${version}/Python-${version}.tar.xz"
source_archive="$work_directory/Python-${version}.tar.xz"
source_signature_link="https://www.python.org/ftp/python/${version}/Python-${version}.tar.xz.asc"
source_signature="${source_archive}.asc"
source="$work_directory/Python-${version}"
# Check if the Python version has already been installed or not.
if [[ ! -e $interpreter ]]; then
echo
echo
echo "Installing Python $version"
echo "=========================="
echo "Downloading..."
sudo -i -u vagrant wget -q -c -O "$source_archive" "$source_archive_link"
sudo -i -u vagrant wget -q -c -O "$source_signature" "$source_signature_link"
echo "Verifying signature..."
sudo -i -u vagrant gpg --quiet --trust-model always --verify "$source_signature" "$source_archive"
echo "Removing stale source files..."
rm -rf "$source"
echo "Unpacking source..."
sudo -i -u vagrant tar xf "$source_archive" -C "$work_directory"
echo "Configuring..."
sudo -i -u vagrant <<< "cd ${source}; ./configure --quiet"
echo "Building..."
sudo -i -u vagrant make --quiet -C "$source" -j4
echo "Installing..."
make --quiet -C "$source" altinstall
echo "Removing source files..."
rm -rf "$source"
fi
done
echo "Setting-up Python virtual environment for running tox."
if [[ ! -f /home/vagrant/virtualenv-tox/bin/activate ]]; then
sudo -i -u vagrant virtualenv --prompt 'tox' -q -p /usr/bin/python3 /home/vagrant/virtualenv-tox
fi
echo "Setting-up Python virtual environment activation on login."
bash_profile="/home/vagrant/.bash_profile"
if [[ ! -e $bash_profile ]] || ! grep -q "source /home/vagrant/virtualenv-tox/bin/activate" "$bash_profile"; then
echo 'source /home/vagrant/virtualenv-tox/bin/activate' >> "$bash_profile"
fi
echo "Cleaning-up Python byte-compiled files from repository directory."
sudo -i -u vagrant py3clean /vagrant/
echo "Installing development requirements."
sudo -i -u vagrant pip install -q -e "/vagrant[devel]"
echo
echo "SUCCESS: Ready for running tests."
|