[at-spi2-core: 1/7] Steal glib's scripts to build a Docker image




commit 4ab7b2b0852246366d98162afde8a5d67a979e24
Author: Federico Mena Quintero <federico gnome org>
Date:   Thu Dec 16 13:46:51 2021 -0600

    Steal glib's scripts to build a Docker image
    
    Adjust them for basing an image on openSUSE Tumbleweed.

 .gitlab-ci/opensuse.Dockerfile |  27 +++++++++
 .gitlab-ci/run-docker.sh       | 132 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 159 insertions(+)
---
diff --git a/.gitlab-ci/opensuse.Dockerfile b/.gitlab-ci/opensuse.Dockerfile
new file mode 100644
index 00000000..6ca3c5bf
--- /dev/null
+++ b/.gitlab-ci/opensuse.Dockerfile
@@ -0,0 +1,27 @@
+# Dockerfile to build container images for Gitlab Continuous Integration
+#
+# This starts with an openSUSE Tumbleweed image, and installs the dependencies
+# for building and testing at-spi2-core.
+
+FROM opensuse/tumbleweed:latest
+
+RUN zypper refresh                              \
+ && zypper install -y                           \
+           gcc                                  \
+           dbus-1                               \
+           dbus-1-devel                         \
+           gettext                              \
+           git                                  \
+           glib2-devel                          \
+           gobject-introspection-devel          \
+           gsettings-desktop-schemas            \
+           itstool                              \
+           libxml2-devel                        \
+           libxkbcommon-devel                   \
+           libXi-devel                          \
+           libXtst-devel                        \
+           meson                                \
+           ninja                                \
+           python38                             \
+           python38-gobject                     \
+ && zypper clean --all
diff --git a/.gitlab-ci/run-docker.sh b/.gitlab-ci/run-docker.sh
new file mode 100755
index 00000000..d6be4670
--- /dev/null
+++ b/.gitlab-ci/run-docker.sh
@@ -0,0 +1,132 @@
+#!/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
+}
+
+SUDO_CMD="sudo"
+if docker -v |& grep -q podman; then
+        # Using podman
+        SUDO_CMD=""
+        # 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
+fi
+
+set -e
+
+base=""
+base_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;;
+                --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>"
+        echo "Or use \"$0 help\" for a list of commands"
+        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
+
+TAG="registry.gitlab.gnome.org/gnome/at-spi2-core/${base}:${base_version}"
+
+if [ $build == 1 ]; then
+        echo -e "\\e[1;32mBUILDING\\e[0m: ${base} as ${TAG}"
+        $SUDO_CMD docker build \
+                --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
+                $SUDO_CMD docker login registry.gitlab.gnome.org
+        fi
+
+        $SUDO_CMD docker push $TAG
+        exit $?
+fi
+
+if [ $run == 1 ]; then
+        echo -e "\\e[1;32mRUNNING\\e[0m: ${base} as ${TAG}"
+        $SUDO_CMD docker run \
+                --rm \
+                --volume "$(pwd)/..:/home/user/app" \
+                --workdir "/home/user/app" \
+                --tty \
+                --interactive "${TAG}" \
+                bash
+        exit $?
+fi


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]