2023-04-30 12:42:19 +08:00
|
|
|
#!/usr/bin/env sh
|
|
|
|
|
|
|
|
|
|
# This file is using docker to run commands
|
|
|
|
|
|
|
|
|
|
# Detect docker can run
|
|
|
|
|
if ! which docker >/dev/null; then
|
|
|
|
|
echo "Docker is not installed, please install docker first !"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
DOCKER_EXECUTABLE="docker"
|
2023-08-20 19:51:45 +08:00
|
|
|
# shellcheck disable=SC2046
|
2023-04-30 12:42:19 +08:00
|
|
|
if [ $(id -u) -ne 0 ]; then
|
|
|
|
|
if ! docker info > /dev/null 2>&1; then
|
|
|
|
|
if [ "$SPC_USE_SUDO" != "yes" ]; then
|
|
|
|
|
echo "Docker command requires sudo"
|
2023-08-20 19:51:45 +08:00
|
|
|
# shellcheck disable=SC2039
|
2023-04-30 12:42:19 +08:00
|
|
|
echo -n 'To use sudo to run docker, run "export SPC_USE_SUDO=yes" and run command again'
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
DOCKER_EXECUTABLE="sudo docker"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# to check if qemu-docker run
|
|
|
|
|
if [ "$SPC_USE_ARCH" = "" ]; then
|
|
|
|
|
SPC_USE_ARCH=x86_64
|
|
|
|
|
fi
|
|
|
|
|
case $SPC_USE_ARCH in
|
|
|
|
|
x86_64)
|
|
|
|
|
ALPINE_FROM=alpine:edge
|
|
|
|
|
;;
|
|
|
|
|
aarch64)
|
|
|
|
|
ALPINE_FROM=multiarch/alpine:aarch64-edge
|
2023-08-20 19:51:45 +08:00
|
|
|
# shellcheck disable=SC2039
|
2023-04-30 12:42:19 +08:00
|
|
|
echo -e "\e[033m* Using different arch needs to setup qemu-static for docker !\e[0m"
|
|
|
|
|
$DOCKER_EXECUTABLE run --rm --privileged multiarch/qemu-user-static:register --reset > /dev/null
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
echo "Current arch is not supported to run in docker: $SPC_USE_ARCH"
|
|
|
|
|
exit 1
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
if [ "$SPC_USE_MIRROR" = "yes" ]; then
|
|
|
|
|
SPC_USE_MIRROR="RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories"
|
|
|
|
|
else
|
|
|
|
|
SPC_USE_MIRROR="RUN echo 'Using original repo'"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Detect docker env is setup
|
|
|
|
|
if ! $DOCKER_EXECUTABLE images | grep -q cwcc-spc-$SPC_USE_ARCH; then
|
|
|
|
|
echo "Docker container does not exist. Building docker image ..."
|
2023-08-22 10:39:25 +02:00
|
|
|
$DOCKER_EXECUTABLE build -t cwcc-spc-$SPC_USE_ARCH -f- . <<EOF
|
2023-04-30 12:42:19 +08:00
|
|
|
FROM $ALPINE_FROM
|
|
|
|
|
$SPC_USE_MIRROR
|
2023-08-22 11:13:51 +02:00
|
|
|
RUN apk update; \
|
|
|
|
|
apk add --no-cache \
|
|
|
|
|
autoconf \
|
|
|
|
|
automake \
|
|
|
|
|
bash \
|
|
|
|
|
binutils \
|
|
|
|
|
bison \
|
|
|
|
|
build-base \
|
|
|
|
|
cmake \
|
|
|
|
|
composer \
|
|
|
|
|
curl \
|
|
|
|
|
file \
|
|
|
|
|
flex \
|
|
|
|
|
g++ \
|
|
|
|
|
gcc \
|
|
|
|
|
git \
|
|
|
|
|
jq \
|
|
|
|
|
libgcc \
|
|
|
|
|
libstdc++ \
|
|
|
|
|
linux-headers \
|
|
|
|
|
m4 \
|
|
|
|
|
make \
|
|
|
|
|
php81 \
|
|
|
|
|
php81-common \
|
|
|
|
|
php81-pcntl \
|
|
|
|
|
php81-phar \
|
|
|
|
|
php81-posix \
|
|
|
|
|
php81-tokenizer \
|
|
|
|
|
php81-xml \
|
|
|
|
|
pkgconfig \
|
|
|
|
|
wget \
|
|
|
|
|
xz
|
2023-04-30 12:42:19 +08:00
|
|
|
WORKDIR /app
|
|
|
|
|
ADD ./src /app/src
|
|
|
|
|
ADD ./composer.json /app/composer.json
|
|
|
|
|
ADD ./bin /app/bin
|
2023-08-22 10:39:25 +02:00
|
|
|
RUN composer update --no-dev --classmap-authoritative
|
2023-04-30 12:42:19 +08:00
|
|
|
EOF
|
|
|
|
|
fi
|
|
|
|
|
|
2023-04-30 12:52:24 +08:00
|
|
|
# Check if in ci (local terminal can execute with -it)
|
|
|
|
|
if [ -t 0 ]; then
|
|
|
|
|
INTERACT=-it
|
|
|
|
|
else
|
|
|
|
|
INTERACT=''
|
|
|
|
|
fi
|
|
|
|
|
|
2023-04-30 12:42:19 +08:00
|
|
|
# Run docker
|
2023-08-20 19:51:45 +08:00
|
|
|
# shellcheck disable=SC2068
|
|
|
|
|
$DOCKER_EXECUTABLE run --rm "$INTERACT" -e SPC_FIX_DEPLOY_ROOT="$(pwd)" -v "$(pwd)"/config:/app/config -v "$(pwd)"/src:/app/src -v "$(pwd)"/buildroot:/app/buildroot -v "$(pwd)"/source:/app/source -v "$(pwd)"/downloads:/app/downloads cwcc-spc-$SPC_USE_ARCH bin/spc $@
|