[CICD enhance] CodeTrans run CI with latest base image, group logs in GHA outputs. (#1929)
Signed-off-by: chensuyue <suyue.chen@intel.com>
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
# Copyright (C) 2024 Intel Corporation
|
# Copyright (C) 2024 Intel Corporation
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
ARG IMAGE_REPO=opea
|
||||||
ARG BASE_TAG=latest
|
ARG BASE_TAG=latest
|
||||||
FROM opea/comps-base:$BASE_TAG
|
FROM $IMAGE_REPO/comps-base:$BASE_TAG
|
||||||
|
|
||||||
COPY ./code_translation.py $HOME/code_translation.py
|
COPY ./code_translation.py $HOME/code_translation.py
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ services:
|
|||||||
codetrans:
|
codetrans:
|
||||||
build:
|
build:
|
||||||
args:
|
args:
|
||||||
|
IMAGE_REPO: ${REGISTRY:-opea}
|
||||||
|
BASE_TAG: ${TAG:-latest}
|
||||||
http_proxy: ${http_proxy}
|
http_proxy: ${http_proxy}
|
||||||
https_proxy: ${https_proxy}
|
https_proxy: ${https_proxy}
|
||||||
no_proxy: ${no_proxy}
|
no_proxy: ${no_proxy}
|
||||||
@@ -45,4 +47,5 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: GenAIComps
|
context: GenAIComps
|
||||||
dockerfile: comps/third_parties/vllm/src/Dockerfile.amd_gpu
|
dockerfile: comps/third_parties/vllm/src/Dockerfile.amd_gpu
|
||||||
|
extends: codetrans
|
||||||
image: ${REGISTRY:-opea}/vllm-rocm:${TAG:-latest}
|
image: ${REGISTRY:-opea}/vllm-rocm:${TAG:-latest}
|
||||||
|
|||||||
@@ -17,19 +17,14 @@ ip_address=$(hostname -I | awk '{print $1}')
|
|||||||
|
|
||||||
function build_docker_images() {
|
function build_docker_images() {
|
||||||
opea_branch=${opea_branch:-"main"}
|
opea_branch=${opea_branch:-"main"}
|
||||||
# If the opea_branch isn't main, replace the git clone branch in Dockerfile.
|
|
||||||
if [[ "${opea_branch}" != "main" ]]; then
|
|
||||||
cd $WORKPATH
|
|
||||||
OLD_STRING="RUN git clone --depth 1 https://github.com/opea-project/GenAIComps.git"
|
|
||||||
NEW_STRING="RUN git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git"
|
|
||||||
find . -type f -name "Dockerfile*" | while read -r file; do
|
|
||||||
echo "Processing file: $file"
|
|
||||||
sed -i "s|$OLD_STRING|$NEW_STRING|g" "$file"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $WORKPATH/docker_image_build
|
cd $WORKPATH/docker_image_build
|
||||||
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
||||||
|
pushd GenAIComps
|
||||||
|
echo "GenAIComps test commit is $(git rev-parse HEAD)"
|
||||||
|
docker build --no-cache -t ${REGISTRY}/comps-base:${TAG} --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile .
|
||||||
|
popd && sleep 1s
|
||||||
|
|
||||||
git clone https://github.com/HabanaAI/vllm-fork.git && cd vllm-fork
|
git clone https://github.com/HabanaAI/vllm-fork.git && cd vllm-fork
|
||||||
VLLM_FORK_VER=v0.6.6.post1+Gaudi-1.20.0
|
VLLM_FORK_VER=v0.6.6.post1+Gaudi-1.20.0
|
||||||
git checkout ${VLLM_FORK_VER} &> /dev/null && cd ../
|
git checkout ${VLLM_FORK_VER} &> /dev/null && cd ../
|
||||||
@@ -160,17 +155,35 @@ function stop_docker() {
|
|||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::build_docker_images"
|
||||||
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::start_services"
|
||||||
start_services
|
start_services
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_microservices"
|
||||||
validate_microservices
|
validate_microservices
|
||||||
validate_megaservice
|
echo "::endgroup::"
|
||||||
validate_frontend
|
|
||||||
|
|
||||||
|
echo "::group::validate_megaservice"
|
||||||
|
validate_megaservice
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_frontend"
|
||||||
|
validate_frontend
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
echo y | docker system prune
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
docker system prune -f
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,19 +18,13 @@ ip_address=$(hostname -I | awk '{print $1}')
|
|||||||
|
|
||||||
function build_docker_images() {
|
function build_docker_images() {
|
||||||
opea_branch=${opea_branch:-"main"}
|
opea_branch=${opea_branch:-"main"}
|
||||||
# If the opea_branch isn't main, replace the git clone branch in Dockerfile.
|
|
||||||
if [[ "${opea_branch}" != "main" ]]; then
|
|
||||||
cd $WORKPATH
|
|
||||||
OLD_STRING="RUN git clone --depth 1 https://github.com/opea-project/GenAIComps.git"
|
|
||||||
NEW_STRING="RUN git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git"
|
|
||||||
find . -type f -name "Dockerfile*" | while read -r file; do
|
|
||||||
echo "Processing file: $file"
|
|
||||||
sed -i "s|$OLD_STRING|$NEW_STRING|g" "$file"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $WORKPATH/docker_image_build
|
cd $WORKPATH/docker_image_build
|
||||||
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
||||||
|
pushd GenAIComps
|
||||||
|
echo "GenAIComps test commit is $(git rev-parse HEAD)"
|
||||||
|
docker build --no-cache -t ${REGISTRY}/comps-base:${TAG} --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile .
|
||||||
|
popd && sleep 1s
|
||||||
|
|
||||||
echo "Build all the images with --no-cache, check docker_image_build.log for details..."
|
echo "Build all the images with --no-cache, check docker_image_build.log for details..."
|
||||||
service_list="codetrans codetrans-ui llm-textgen nginx"
|
service_list="codetrans codetrans-ui llm-textgen nginx"
|
||||||
@@ -161,17 +155,35 @@ function stop_docker() {
|
|||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::build_docker_images"
|
||||||
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::start_services"
|
||||||
start_services
|
start_services
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_microservices"
|
||||||
validate_microservices
|
validate_microservices
|
||||||
validate_megaservice
|
echo "::endgroup::"
|
||||||
validate_frontend
|
|
||||||
|
|
||||||
|
echo "::group::validate_megaservice"
|
||||||
|
validate_megaservice
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_frontend"
|
||||||
|
validate_frontend
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
echo y | docker system prune
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
docker system prune -f
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,19 +17,14 @@ ip_address=$(hostname -I | awk '{print $1}')
|
|||||||
|
|
||||||
function build_docker_images() {
|
function build_docker_images() {
|
||||||
opea_branch=${opea_branch:-"main"}
|
opea_branch=${opea_branch:-"main"}
|
||||||
# If the opea_branch isn't main, replace the git clone branch in Dockerfile.
|
|
||||||
if [[ "${opea_branch}" != "main" ]]; then
|
|
||||||
cd $WORKPATH
|
|
||||||
OLD_STRING="RUN git clone --depth 1 https://github.com/opea-project/GenAIComps.git"
|
|
||||||
NEW_STRING="RUN git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git"
|
|
||||||
find . -type f -name "Dockerfile*" | while read -r file; do
|
|
||||||
echo "Processing file: $file"
|
|
||||||
sed -i "s|$OLD_STRING|$NEW_STRING|g" "$file"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $WORKPATH/docker_image_build
|
cd $WORKPATH/docker_image_build
|
||||||
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
||||||
|
pushd GenAIComps
|
||||||
|
echo "GenAIComps test commit is $(git rev-parse HEAD)"
|
||||||
|
docker build --no-cache -t ${REGISTRY}/comps-base:${TAG} --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile .
|
||||||
|
popd && sleep 1s
|
||||||
|
|
||||||
git clone https://github.com/vllm-project/vllm.git && cd vllm
|
git clone https://github.com/vllm-project/vllm.git && cd vllm
|
||||||
VLLM_VER="v0.8.3"
|
VLLM_VER="v0.8.3"
|
||||||
echo "Check out vLLM tag ${VLLM_VER}"
|
echo "Check out vLLM tag ${VLLM_VER}"
|
||||||
@@ -163,17 +158,35 @@ function stop_docker() {
|
|||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::build_docker_images"
|
||||||
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::start_services"
|
||||||
start_services
|
start_services
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_microservices"
|
||||||
validate_microservices
|
validate_microservices
|
||||||
validate_megaservice
|
echo "::endgroup::"
|
||||||
validate_frontend
|
|
||||||
|
|
||||||
|
echo "::group::validate_megaservice"
|
||||||
|
validate_megaservice
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_frontend"
|
||||||
|
validate_frontend
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
echo y | docker system prune
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
docker system prune -f
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,19 +17,13 @@ ip_address=$(hostname -I | awk '{print $1}')
|
|||||||
|
|
||||||
function build_docker_images() {
|
function build_docker_images() {
|
||||||
opea_branch=${opea_branch:-"main"}
|
opea_branch=${opea_branch:-"main"}
|
||||||
# If the opea_branch isn't main, replace the git clone branch in Dockerfile.
|
|
||||||
if [[ "${opea_branch}" != "main" ]]; then
|
|
||||||
cd $WORKPATH
|
|
||||||
OLD_STRING="RUN git clone --depth 1 https://github.com/opea-project/GenAIComps.git"
|
|
||||||
NEW_STRING="RUN git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git"
|
|
||||||
find . -type f -name "Dockerfile*" | while read -r file; do
|
|
||||||
echo "Processing file: $file"
|
|
||||||
sed -i "s|$OLD_STRING|$NEW_STRING|g" "$file"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $WORKPATH/docker_image_build
|
cd $WORKPATH/docker_image_build
|
||||||
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
||||||
|
pushd GenAIComps
|
||||||
|
echo "GenAIComps test commit is $(git rev-parse HEAD)"
|
||||||
|
docker build --no-cache -t ${REGISTRY}/comps-base:${TAG} --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile .
|
||||||
|
popd && sleep 1s
|
||||||
|
|
||||||
echo "Build all the images with --no-cache, check docker_image_build.log for details..."
|
echo "Build all the images with --no-cache, check docker_image_build.log for details..."
|
||||||
service_list="codetrans codetrans-ui llm-textgen nginx"
|
service_list="codetrans codetrans-ui llm-textgen nginx"
|
||||||
@@ -167,17 +161,35 @@ function stop_docker() {
|
|||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::build_docker_images"
|
||||||
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::start_services"
|
||||||
start_services
|
start_services
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_microservices"
|
||||||
validate_microservices
|
validate_microservices
|
||||||
validate_megaservice
|
echo "::endgroup::"
|
||||||
validate_frontend
|
|
||||||
|
|
||||||
|
echo "::group::validate_megaservice"
|
||||||
|
validate_megaservice
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_frontend"
|
||||||
|
validate_frontend
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
echo y | docker system prune
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
docker system prune -f
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,19 +17,13 @@ ip_address=$(hostname -I | awk '{print $1}')
|
|||||||
|
|
||||||
function build_docker_images() {
|
function build_docker_images() {
|
||||||
opea_branch=${opea_branch:-"main"}
|
opea_branch=${opea_branch:-"main"}
|
||||||
# If the opea_branch isn't main, replace the git clone branch in Dockerfile.
|
|
||||||
if [[ "${opea_branch}" != "main" ]]; then
|
|
||||||
cd $WORKPATH
|
|
||||||
OLD_STRING="RUN git clone --depth 1 https://github.com/opea-project/GenAIComps.git"
|
|
||||||
NEW_STRING="RUN git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git"
|
|
||||||
find . -type f -name "Dockerfile*" | while read -r file; do
|
|
||||||
echo "Processing file: $file"
|
|
||||||
sed -i "s|$OLD_STRING|$NEW_STRING|g" "$file"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $WORKPATH/docker_image_build
|
cd $WORKPATH/docker_image_build
|
||||||
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
||||||
|
pushd GenAIComps
|
||||||
|
echo "GenAIComps test commit is $(git rev-parse HEAD)"
|
||||||
|
docker build --no-cache -t ${REGISTRY}/comps-base:${TAG} --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile .
|
||||||
|
popd && sleep 1s
|
||||||
|
|
||||||
echo "Build all the images with --no-cache, check docker_image_build.log for details..."
|
echo "Build all the images with --no-cache, check docker_image_build.log for details..."
|
||||||
service_list="codetrans codetrans-ui llm-textgen nginx"
|
service_list="codetrans codetrans-ui llm-textgen nginx"
|
||||||
@@ -167,17 +161,35 @@ function stop_docker() {
|
|||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::build_docker_images"
|
||||||
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::start_services"
|
||||||
start_services
|
start_services
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_microservices"
|
||||||
validate_microservices
|
validate_microservices
|
||||||
validate_megaservice
|
echo "::endgroup::"
|
||||||
validate_frontend
|
|
||||||
|
|
||||||
|
echo "::group::validate_megaservice"
|
||||||
|
validate_megaservice
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_frontend"
|
||||||
|
validate_frontend
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
echo y | docker system prune
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
docker system prune -f
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,19 +17,13 @@ ip_address=$(hostname -I | awk '{print $1}')
|
|||||||
|
|
||||||
function build_docker_images() {
|
function build_docker_images() {
|
||||||
opea_branch=${opea_branch:-"main"}
|
opea_branch=${opea_branch:-"main"}
|
||||||
# If the opea_branch isn't main, replace the git clone branch in Dockerfile.
|
|
||||||
if [[ "${opea_branch}" != "main" ]]; then
|
|
||||||
cd $WORKPATH
|
|
||||||
OLD_STRING="RUN git clone --depth 1 https://github.com/opea-project/GenAIComps.git"
|
|
||||||
NEW_STRING="RUN git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git"
|
|
||||||
find . -type f -name "Dockerfile*" | while read -r file; do
|
|
||||||
echo "Processing file: $file"
|
|
||||||
sed -i "s|$OLD_STRING|$NEW_STRING|g" "$file"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $WORKPATH/docker_image_build
|
cd $WORKPATH/docker_image_build
|
||||||
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
git clone --depth 1 --branch ${opea_branch} https://github.com/opea-project/GenAIComps.git
|
||||||
|
pushd GenAIComps
|
||||||
|
echo "GenAIComps test commit is $(git rev-parse HEAD)"
|
||||||
|
docker build --no-cache -t ${REGISTRY}/comps-base:${TAG} --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f Dockerfile .
|
||||||
|
popd && sleep 1s
|
||||||
|
|
||||||
echo "Build all the images with --no-cache, check docker_image_build.log for details..."
|
echo "Build all the images with --no-cache, check docker_image_build.log for details..."
|
||||||
service_list="vllm-rocm llm-textgen codetrans codetrans-ui nginx"
|
service_list="vllm-rocm llm-textgen codetrans codetrans-ui nginx"
|
||||||
@@ -160,17 +154,35 @@ function stop_docker() {
|
|||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::build_docker_images"
|
||||||
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::start_services"
|
||||||
start_services
|
start_services
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_microservices"
|
||||||
validate_microservices
|
validate_microservices
|
||||||
validate_megaservice
|
echo "::endgroup::"
|
||||||
validate_frontend
|
|
||||||
|
|
||||||
|
echo "::group::validate_megaservice"
|
||||||
|
validate_megaservice
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::validate_frontend"
|
||||||
|
validate_frontend
|
||||||
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
echo "::group::stop_docker"
|
||||||
stop_docker
|
stop_docker
|
||||||
echo y | docker system prune
|
echo "::endgroup::"
|
||||||
|
|
||||||
|
docker system prune -f
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user