Ctrl K
ComunidadGuías…

environment/os/test.sh

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash

set -euo pipefail

GREEN="\033[32m"
RED="\033[31m"
YELLOW="\033[33m"
RESET="\033[0m"

# bash script to test the installation of the dependencies
OS="$1"
PACKAGE_GROUP="$2"

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
ENV_DIR="$( cd "$DIR/.." >/dev/null 2>&1 && pwd )"

# OS and docker image map
declare -A OS_DOCKER_IMAGE_MAP=(
    [centos-9]="quay.io/centos/centos:stream9"
    [centos-10]="quay.io/centos/centos:stream10"
    [debian-12]="debian:12"
    [debian-13]="debian:13"
    [fedora-43]="fedora:43"
    [fedora-44]="fedora:44"
    [fedora-45]="fedora:45"
    [rocky-10]="rockylinux/rockylinux:10"
    [ubuntu-22.04]="ubuntu:22.04"
    [ubuntu-24.04]="ubuntu:24.04"
    [ubuntu-26.04]="ubuntu:26.04"
)

if [[ ! -v OS_DOCKER_IMAGE_MAP[$OS] ]]; then
    echo "Error: Invalid OS: ${OS}"
    exit 1
fi
DOCKER_IMAGE=${OS_DOCKER_IMAGE_MAP[$OS]}
CONTAINER_NAME=${OS}_test

# list of package groups allowed
PACKAGE_GROUPS=(
    "TOOLCHAIN_RUN_DEPS"
    "TOOLCHAIN_BUILD_DEPS"
    "MEMGRAPH_BUILD_DEPS"
    "MEMGRAPH_TEST_DEPS"
    "MEMGRAPH_RUN_DEPS"
)

# "ALL" tests every package group, in the PACKAGE_GROUPS order above, inside
# one container.
if [[ "${PACKAGE_GROUP}" == "ALL" ]]; then
    GROUPS_TO_TEST=("${PACKAGE_GROUPS[@]}")
elif [[ " ${PACKAGE_GROUPS[*]} " =~ " ${PACKAGE_GROUP} " ]]; then
    GROUPS_TO_TEST=("${PACKAGE_GROUP}")
else
    echo "Error: Invalid package group: ${PACKAGE_GROUP} (valid: ${PACKAGE_GROUPS[*]} or ALL)" >&2
    exit 1
fi

cleanup() {
    status=$?
    echo -e "${YELLOW}Stopping and removing docker container ${CONTAINER_NAME}...${RESET}"
    docker stop ${CONTAINER_NAME} || true
    exit $status
}

trap cleanup EXIT ERR



echo -e "${GREEN}Testing ${GROUPS_TO_TEST[*]} for ${OS}...${RESET}"

echo -e "${YELLOW}Pulling docker image ${DOCKER_IMAGE}...${RESET}"
docker pull ${DOCKER_IMAGE}

echo -e "${YELLOW}Running docker container ${DOCKER_IMAGE}...${RESET}"
docker run --rm -d --name ${CONTAINER_NAME} ${DOCKER_IMAGE} sleep infinity

echo -e "${YELLOW}Installing python in the container...${RESET}"
# for debian/ubuntu based distros use apt
if [[ "${DOCKER_IMAGE}" == *"debian"* || "${DOCKER_IMAGE}" == *"ubuntu"* ]]; then
    docker exec -i ${CONTAINER_NAME} bash -c "export DEBIAN_FRONTEND=noninteractive && apt update -y && apt install -y python3"
else
    docker exec -i ${CONTAINER_NAME} bash -c "dnf install -y python3"
fi

echo -e "${YELLOW}Copying local environment scripts into the container...${RESET}"
docker exec ${CONTAINER_NAME} mkdir -p /memgraph
docker cp "${ENV_DIR}" ${CONTAINER_NAME}:/memgraph/environment

for group in "${GROUPS_TO_TEST[@]}"; do
    echo -e "${YELLOW}Installing ${group} in the container...${RESET}"
    if ! docker exec -i ${CONTAINER_NAME} bash -c "cd /memgraph && ./environment/os/install_deps.sh install ${group}"; then
        echo -e "${RED}Failed to install ${group} in the container...${RESET}"
        exit 1
    fi
    echo -e "${GREEN}${group} installed successfully...${RESET}"
done

echo -e "${GREEN}Testing ${GROUPS_TO_TEST[*]} for ${OS} COMPLETED SUCCESSFULLY...${RESET}"