]> git.pld-linux.org Git - projects/cleanbuild.git/blobdiff - bin/cleanbuild-docker.sh
Refactor: Add is_bool helper
[projects/cleanbuild.git] / bin / cleanbuild-docker.sh
index a30d81238d8b301a339b4439ceac1c6800522272..cd6641f947c58d9246e2cef8794bff0fb6fbd886 100755 (executable)
@@ -9,8 +9,9 @@ PROGRAM=${0##*/}
 : ${TRACING=false}
 : ${WITH=}
 : ${WITHOUT=}
-: ${KEEP_CONTAINER=false}
+: ${KEEP_CONTAINER=true}
 : ${TMPFS="4G"}
+: ${EXEC=false}
 
 dir=$(pwd)
 image=registry.gitlab.com/pld-linux/cleanbuild
@@ -45,6 +46,10 @@ is_no() {
        esac
 }
 
+is_bool() {
+       [ "$1" = "true" -o "$1" = "false" ] || die "Invalid boolean value: $1"
+}
+
 tmpfs() {
        if is_no "${TMPFS:-true}" || [ "$TMPFS" = "0" ]; then
                return
@@ -71,7 +76,7 @@ create_container() {
        install -d $topdir/logs
 
        # start the container
-       if !  have_container "$PACKAGE_NAME"; then
+       if ! have_container "$PACKAGE_NAME"; then
                TMPFS_SIZE=$TMPFS \
                PACKAGE_NAME=$PACKAGE_NAME \
                docker-compose run --rm -d \
@@ -81,18 +86,33 @@ create_container() {
                        cleanbuild
        fi
 
-       notice "Setup the homedir"
+       UID=$(id -u)
+       GID=$(id -g)
+       notice "Setup builder user ($UID:$GID)"
+
        docker exec --user=root -w / $name usermod -d $home builder
 
+       if [ "$UID" -gt 0 ]; then
+               docker exec --user=root -w / $name usermod -u $UID builder
+       fi
+       if [ "$GID" -gt 0 ]; then
+               docker exec --user=root -w / $name groupmod -g $GID builder
+       fi
+
        notice "Setup permissions"
-       docker exec --user=root -w / $name sh -c "cd $home && chown builder:builder . rpm rpm/logs rpm/BUILD rpm/RPMS .ccache"
+       docker exec --user=root -w / $name sh -c "cd $home && chown builder:builder . rpm rpm/logs rpm/BUILD rpm/RPMS rpm/packages .ccache"
 
        if [ ! -d $topdir/rpm-build-tools ]; then
                notice "Initialize rpm-build-tools"
-               docker exec $name -w / builder --init-rpm-dir
+               docker exec -w / $name builder --init-rpm-dir
        fi
 }
 
+enter_container() {
+       notice "Entering container for $PACKAGE_NAME"
+       docker exec --user=root -it $name bash
+}
+
 package_prepare() {
        notice "Fetch sources and install dependencies"
        if [ -d $topdir/packages/$PACKAGE_NAME ]; then
@@ -169,7 +189,7 @@ package_build() {
 
 parse_options() {
        local t
-       t=$(getopt -o 'x' --long 'network,no-tmpfs,notmpfs,tmpfs:,keep-container,with:,without:' -n "$PROGRAM" -- "$@")
+       t=$(getopt -o 'x' --long 'network,exec,no-tmpfs,notmpfs,tmpfs:,keep-container:,with:,without:' -n "$PROGRAM" -- "$@")
        [ $? != 0 ] && exit $?
        eval set -- "$t"
 
@@ -181,6 +201,9 @@ parse_options() {
                --network)
                        NETWORKING=true
                        ;;
+               --exec)
+                       EXEC=true
+                       ;;
                --no-tmpfs|--notmpfs)
                        TMPFS=false
                        ;;
@@ -189,7 +212,9 @@ parse_options() {
                        TMPFS="$1"
                        ;;
                --keep-container)
-                       KEEP_CONTAINER=true
+                       shift
+                       is_bool "$1"
+                       KEEP_CONTAINER=$1
                        ;;
                --with)
                        shift
@@ -219,6 +244,10 @@ main() {
 
        $TRACING && set -x
        local name="cleanbuild-$PACKAGE_NAME"
+       if $EXEC; then
+               enter_container
+               return
+       fi
        create_container
        package_prepare
        package_build
This page took 0.097595 seconds and 4 git commands to generate.