mirror of
https://github.com/containers/podman.git
synced 2025-08-06 11:32:07 +08:00

Reimplement CI-automation to remove accumulated technical-debt and optimize workflow. The task-dependency graph designed goal was to shorten it's depth and increase width (i.e. more parallelism). A reduction in redundant building (and 3rd party module download) was also realized by caching `$GOPATH` and `$GOCACHE` early on. This cache is then reused in favor of a fresh clone of the repository (when possible). Note: The system tests typically execute MUCH faster than the integration tests. However, contrary to a fail-fast/fail-early principal, they are executed last. This was implemented due to debug-ability related concerns/preferences of the primary (golang-centric) project developers. Signed-off-by: Chris Evich <cevich@redhat.com>
189 lines
5.9 KiB
Bash
Executable File
189 lines
5.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
# shellcheck source=./contrib/cirrus/lib.sh
|
|
source $(dirname $0)/lib.sh
|
|
|
|
die_unknown() {
|
|
local var_name="$1"
|
|
req_env_vars var_name
|
|
local var_value="${!var_name}"
|
|
die "Unknown/unsupported \$$var_name '$var_value'"
|
|
}
|
|
|
|
msg "************************************************************"
|
|
msg "Setting up runtime environment"
|
|
msg "************************************************************"
|
|
show_env_vars
|
|
|
|
req_env_vars USER HOME GOSRC SCRIPT_BASE TEST_FLAVOR TEST_ENVIRON \
|
|
PODBIN_NAME PRIV_NAME DISTRO_NV
|
|
|
|
# Verify basic dependencies
|
|
for depbin in go rsync unzip sha256sum curl make python3 git
|
|
do
|
|
if ! type -P "$depbin" &> /dev/null
|
|
then
|
|
warn "$depbin binary not found in $PATH"
|
|
fi
|
|
done
|
|
|
|
# This is a possible manual maintenance gaff, check to be sure everything matches.
|
|
# shellcheck disable=SC2154
|
|
[[ "$DISTRO_NV" == "$OS_REL_VER" ]] || \
|
|
die "Automation spec. '$DISTRO_NV'; actual host '$OS_REL_VER'"
|
|
|
|
# Only allow this script to execute once
|
|
if ((${SETUP_ENVIRONMENT:-0})); then
|
|
# Comes from automation library
|
|
# shellcheck disable=SC2154
|
|
warn "Not executing $SCRIPT_FILENAME again"
|
|
exit 0
|
|
fi
|
|
|
|
cd "${GOSRC}/"
|
|
|
|
# Defined by lib.sh: Does the host support cgroups v1 or v2
|
|
case "$CG_FS_TYPE" in
|
|
tmpfs)
|
|
if ((CONTAINER==0)); then
|
|
warn "Forcing testing with runc instead of crun"
|
|
if [[ "$OS_RELEASE_ID" == "ubuntu" ]]; then
|
|
echo "export OCI_RUNTIME=/usr/lib/cri-o-runc/sbin/runc" >> /etc/environment
|
|
else
|
|
echo "export OCI_RUNTIME=/usr/bin/runc" >> /etc/environment
|
|
fi
|
|
fi
|
|
;;
|
|
cgroup2fs)
|
|
if ((CONTAINER==0)); then
|
|
# This is necessary since we've built/installed from source,
|
|
# which uses runc as the default.
|
|
warn "Forcing testing with crun instead of runc"
|
|
echo "export OCI_RUNTIME=/usr/bin/crun" >> /etc/environment
|
|
fi
|
|
;;
|
|
*) die_unknown CG_FS_TYPE
|
|
esac
|
|
|
|
# Required to be defined by caller: Which distribution are we testing on
|
|
# shellcheck disable=SC2154
|
|
case "$DISTRO_NV" in
|
|
ubuntu*) ;;
|
|
fedora*)
|
|
if ((CONTAINER==0)); then # Not yet running inside a container
|
|
msg "Configuring / Expanding host storage."
|
|
# VM is setup to allow flexibility in testing alternate storage.
|
|
# For general use, simply make use of all available space.
|
|
ooe.sh bash "$SCRIPT_BASE/add_second_partition.sh"
|
|
|
|
# All SELinux distros need this for systemd-in-a-container
|
|
msg "Enabling container_manage_cgroup"
|
|
setsebool container_manage_cgroup true
|
|
fi
|
|
;;
|
|
*) die_unknown DISTRO_NV
|
|
esac
|
|
|
|
# Required to be defined by caller: The environment where primary testing happens
|
|
# shellcheck disable=SC2154
|
|
case "$TEST_ENVIRON" in
|
|
host)
|
|
if [[ "$OS_RELEASE_ID" == "fedora" ]]; then
|
|
# The e2e tests wrongly guess `--cgroup-manager cgroupfs`
|
|
msg "Forcing CGROUP_MANAGER=systemd"
|
|
_cgm="export CGROUP_MANAGER=systemd"
|
|
echo "$_cgm" >> /etc/environment
|
|
source /etc/environment
|
|
fi
|
|
;;
|
|
container)
|
|
if ((CONTAINER==0)); then # not yet inside a container
|
|
msg "Force loading iptables modules"
|
|
# Since CRIU 3.11, uses iptables to lock and unlock
|
|
# the network during checkpoint and restore. Needs
|
|
# the following two modules loaded on the host.
|
|
modprobe ip6table_nat || :
|
|
modprobe iptable_nat || :
|
|
else
|
|
# The e2e tests wrongly guess `--cgroup-manager systemd`
|
|
msg "Forcing CGROUP_MANAGER=cgroupfs"
|
|
_cgm="export CGROUP_MANAGER=cgroupfs"
|
|
echo "$_cgm" >> /etc/environment
|
|
source /etc/environment
|
|
fi
|
|
;;
|
|
*) die_unknown TEST_ENVIRON
|
|
esac
|
|
|
|
# Required to be defined by caller: Are we testing as root or a regular user
|
|
# shellcheck disable=SC2154
|
|
case "$PRIV_NAME" in
|
|
root)
|
|
if [[ "$TEST_ENVIRON" == "container" ]] && ((container)); then
|
|
# There's no practical way to detect userns w/in a container
|
|
# affected/related tests are sensitive to this variable.
|
|
_suns='export SKIP_USERNS=1'
|
|
echo "$_suns" >> /etc/environment
|
|
source /etc/environment
|
|
fi
|
|
;;
|
|
rootless)
|
|
_ru="export ROOTLESS_USER='${ROOTLESS_USER:-some${RANDOM}dude}'"
|
|
echo "$_ru" >> /etc/environment
|
|
source /etc/environment
|
|
setup_rootless
|
|
;;
|
|
*) die_unknown PRIV_NAME
|
|
esac
|
|
|
|
# Required to be defined by caller: Are we testing podman or podman-remote client
|
|
# shellcheck disable=SC2154
|
|
case "$PODBIN_NAME" in
|
|
podman) ;;
|
|
remote) ;;
|
|
*) die_unknown PODBIN_NAME
|
|
esac
|
|
|
|
# Required to be defined by caller: The primary type of testing that will be performed
|
|
# shellcheck disable=SC2154
|
|
case "$TEST_FLAVOR" in
|
|
ext_svc) ;;
|
|
smoke) ;&
|
|
validate)
|
|
# For some reason, this is also needed for validation
|
|
make .install.pre-commit
|
|
;;
|
|
automation) ;;
|
|
altbuild)
|
|
# Defined in .cirrus.yml
|
|
# shellcheck disable=SC2154
|
|
if [[ "$ALT_NAME" =~ RPM ]]; then
|
|
bigto dnf install -y glibc-minimal-langpack rpm-build
|
|
fi
|
|
;&
|
|
docker-py) ;&
|
|
build) make clean ;;
|
|
unit) ;;
|
|
int) ;&
|
|
sys) ;&
|
|
bindings) ;&
|
|
swagger) ;&
|
|
endpoint)
|
|
# Use existing host bits when testing is to happen inside a container
|
|
# since this script will run again in that environment.
|
|
# shellcheck disable=SC2154
|
|
if ((CONTAINER==0)) && [[ "$TEST_ENVIRON" == "host" ]]; then
|
|
remove_packaged_podman_files
|
|
make install PREFIX=/usr ETCDIR=/etc
|
|
fi
|
|
;;
|
|
vendor) make clean ;;
|
|
release) ;;
|
|
*) die_unknown TEST_FLAVOR
|
|
esac
|
|
|
|
# Must be the very last command. Establishes successful setup.
|
|
echo 'export SETUP_ENVIRONMENT=1' >> /etc/environment
|