mirror of
https://gitlab.gnome.org/GNOME/libsecret.git
synced 2024-12-22 04:38:55 +00:00
0ef4776a78
Don't waste precious CI time reinstalling/upgrading packages. Most of the scripts here were taken from GLib's CI scripts, but adjusted to deal with dependencies that might change between branches rather than different distros.
136 lines
3.0 KiB
Bash
Executable File
136 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
read_arg() {
|
|
# $1 = arg name
|
|
# $2 = arg value
|
|
# $3 = arg parameter
|
|
local rematch='^[^=]*=(.*)$'
|
|
if [[ $2 =~ $rematch ]]; then
|
|
read -r "$1" <<< "${BASH_REMATCH[1]}"
|
|
else
|
|
read -r "$1" <<< "$3"
|
|
# There is no way to shift our callers args, so
|
|
# return 1 to indicate they should do it instead.
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
if type -p podman &>/dev/null; then
|
|
# Using podman
|
|
DOCKER_CMD="podman"
|
|
# Docker is actually implemented by podman, and its OCI output
|
|
# is incompatible with some of the dockerd instances on GitLab
|
|
# CI runners.
|
|
export BUILDAH_FORMAT=docker
|
|
elif getent group docker | grep -q "\b${USER}\b"; then
|
|
DOCKER_CMD="docker"
|
|
else
|
|
DOCKER_CMD="sudo docker"
|
|
fi
|
|
|
|
set -e
|
|
|
|
branch=""
|
|
version=""
|
|
build=0
|
|
run=0
|
|
push=0
|
|
list=0
|
|
print_help=0
|
|
no_login=0
|
|
|
|
while (($# > 0)); do
|
|
case "${1%%=*}" in
|
|
build) build=1;;
|
|
run) run=1;;
|
|
push) push=1;;
|
|
list) list=1;;
|
|
help) print_help=1;;
|
|
--branch|-b) read_arg branch "$@" || shift;;
|
|
--version|-v) read_arg 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 - Build Docker image"
|
|
echo " run - Run Docker image"
|
|
echo " push - Push Docker image 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
|
|
|
|
# We really need to know the branch name after this point
|
|
if [[ -z "${branch}" ]]; then
|
|
branch=master
|
|
fi
|
|
|
|
DOCKERFILE="${branch}.Dockerfile"
|
|
if [ ! -f "$DOCKERFILE" ]; then
|
|
echo -e "\\e[1;31mERROR\\e[0m: '$DOCKERFILE' not found"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${version}" ]; then
|
|
version="latest"
|
|
else
|
|
version="v$version"
|
|
fi
|
|
|
|
TAG="registry.gitlab.gnome.org/gnome/libsecret/${branch}:${version}"
|
|
|
|
if [ $build == 1 ]; then
|
|
echo -e "\\e[1;32mBUILDING\\e[0m: ${TAG} for branch '${branch}'"
|
|
$DOCKER_CMD build \
|
|
--build-arg HOST_USER_ID="$UID" \
|
|
--tag "${TAG}" \
|
|
--file "$DOCKERFILE" .
|
|
exit $?
|
|
fi
|
|
|
|
if [ $push == 1 ]; then
|
|
echo -e "\\e[1;32mPUSHING\\e[0m: ${TAG} for branch '${branch}'"
|
|
|
|
if [ $no_login == 0 ]; then
|
|
$DOCKER_CMD login registry.gitlab.gnome.org
|
|
fi
|
|
|
|
$DOCKER_CMD push "${TAG}"
|
|
exit $?
|
|
fi
|
|
|
|
if [ $run == 1 ]; then
|
|
echo -e "\\e[1;32mRUNNING\\e[0m: ${TAG} for branch '${branch}'"
|
|
$DOCKER_CMD run \
|
|
--rm \
|
|
--volume "$(pwd)/..:/home/user/app" \
|
|
--workdir "/home/user/app" \
|
|
--tty \
|
|
--interactive "${TAG}" \
|
|
bash
|
|
exit $?
|
|
fi
|