ci: Backport the changes to the Docker script
Use the copy from master, which has been fixed to work with Podman.
This commit is contained in:
parent
14dba9545e
commit
8685538419
@ -1,19 +1,135 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
|
||||||
# This script builds an image from the Dockerfile, starts a container with
|
read_arg() {
|
||||||
# the parent directory mounted as working directory and start a bash session
|
# $1 = arg name
|
||||||
# there so you can test things.
|
# $2 = arg value
|
||||||
# Once you are happy you can push it to the docker hub:
|
# $3 = arg parameter
|
||||||
# sudo docker push "${TAG}"
|
local rematch='^[^=]*=(.*)$'
|
||||||
|
if [[ $2 =~ $rematch ]]; then
|
||||||
|
read "$1" <<< "${BASH_REMATCH[1]}"
|
||||||
|
else
|
||||||
|
read "$1" <<< "$3"
|
||||||
|
# There is no way to shift our callers args, so
|
||||||
|
# return 1 to indicate they should do it instead.
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
TAG="registry.gitlab.gnome.org/gnome/gtk/gtk-3-24:v2"
|
build=0
|
||||||
|
run=0
|
||||||
|
push=0
|
||||||
|
list=0
|
||||||
|
print_help=0
|
||||||
|
no_login=0
|
||||||
|
|
||||||
# HOST_USER_ID gets used to create a user with the same ID so that files
|
while (($# > 0)); do
|
||||||
# created in the mounted volume have the same owner
|
case "${1%%=*}" in
|
||||||
sudo docker build \
|
build) build=1;;
|
||||||
--build-arg HOST_USER_ID="$UID" --tag "${TAG}" --file "Dockerfile" .
|
run) run=1;;
|
||||||
sudo docker run --security-opt label=disable \
|
push) push=1;;
|
||||||
--rm --volume "$(pwd)/..:/home/user/app" --workdir "/home/user/app" \
|
list) list=1;;
|
||||||
--tty --interactive "${TAG}" bash
|
help) print_help=1;;
|
||||||
|
--base|-b) read_arg base "$@" || shift;;
|
||||||
|
--base-version) read_arg base_version "$@" || shift;;
|
||||||
|
--no-login) no_login=1;;
|
||||||
|
*) echo -e "\e[1;31mERROR\e[0m: Unknown option '$1'"; exit 1;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $print_help == 1 ]; then
|
||||||
|
echo "$0 - Build and run Docker images"
|
||||||
|
echo ""
|
||||||
|
echo "Usage: $0 <command> [options] [basename]"
|
||||||
|
echo ""
|
||||||
|
echo "Available commands"
|
||||||
|
echo ""
|
||||||
|
echo " build --base=<BASENAME> - Build Docker image <BASENAME>.Dockerfile"
|
||||||
|
echo " run --base=<BASENAME> - Run Docker image <BASENAME>"
|
||||||
|
echo " push --base=<BASENAME> - Push Docker image <BASENAME> to the registry"
|
||||||
|
echo " list - List available images"
|
||||||
|
echo " help - This help message"
|
||||||
|
echo ""
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
if [ $list == 1 ]; then
|
||||||
|
echo "Available Docker images:"
|
||||||
|
for f in *.Dockerfile; do
|
||||||
|
filename=$( basename -- "$f" )
|
||||||
|
basename="${filename%.*}"
|
||||||
|
|
||||||
|
echo -e " \e[1;39m$basename\e[0m"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# All commands after this require --base to be set
|
||||||
|
if [ -z $base ]; then
|
||||||
|
echo "Usage: $0 <command>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$base.Dockerfile" ]; then
|
||||||
|
echo -e "\e[1;31mERROR\e[0m: Dockerfile for '$base' not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $base_version ]; then
|
||||||
|
base_version="latest"
|
||||||
|
else
|
||||||
|
base_version="v$base_version"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$(command -v docker)" ] || [ docker --help |& grep -q podman ]; then
|
||||||
|
# Docker is actually implemented by podman, and its OCI output
|
||||||
|
# is incompatible with some of the dockerd instances on GitLab
|
||||||
|
# CI runners.
|
||||||
|
echo "Using: Podman"
|
||||||
|
format="--format docker"
|
||||||
|
CMD="podman"
|
||||||
|
else
|
||||||
|
echo "Using: Docker"
|
||||||
|
format=""
|
||||||
|
CMD="sudo socker"
|
||||||
|
fi
|
||||||
|
|
||||||
|
REGISTRY="registry.gitlab.gnome.org"
|
||||||
|
TAG="${REGISTRY}/gnome/gtk/${base}:${base_version}"
|
||||||
|
|
||||||
|
if [ $build == 1 ]; then
|
||||||
|
echo -e "\e[1;32mBUILDING\e[0m: ${base} as ${TAG}"
|
||||||
|
${CMD} build \
|
||||||
|
${format} \
|
||||||
|
--build-arg HOST_USER_ID="$UID" \
|
||||||
|
--tag "${TAG}" \
|
||||||
|
--file "${base}.Dockerfile" .
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $push == 1 ]; then
|
||||||
|
echo -e "\e[1;32mPUSHING\e[0m: ${base} as ${TAG}"
|
||||||
|
|
||||||
|
if [ $no_login == 0 ]; then
|
||||||
|
${CMD} login ${REGISTRY}
|
||||||
|
fi
|
||||||
|
|
||||||
|
${CMD} push ${TAG}
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $run == 1 ]; then
|
||||||
|
echo -e "\e[1;32mRUNNING\e[0m: ${base} as ${TAG}"
|
||||||
|
${CMD} run \
|
||||||
|
--rm \
|
||||||
|
--volume "$(pwd)/..:/home/user/app" \
|
||||||
|
--workdir "/home/user/app" \
|
||||||
|
--tty \
|
||||||
|
--interactive "${TAG}" \
|
||||||
|
bash
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user