]> git.pld-linux.org Git - projects/cleanbuild.git/commitdiff
docker dev
authorElan Ruusamäe <glen@delfi.ee>
Mon, 15 Jun 2015 13:58:24 +0000 (16:58 +0300)
committerElan Ruusamäe <glen@delfi.ee>
Wed, 23 Nov 2016 08:53:34 +0000 (10:53 +0200)
build-docker.sh [new file with mode: 0755]
docker-builder.sh [new file with mode: 0755]
findbr

diff --git a/build-docker.sh b/build-docker.sh
new file mode 100755 (executable)
index 0000000..61befb0
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+# note: docker file is kept in subdir, as docker build uploads context  to docker first when building
+# and when it contains poldek cache and rpm root, it's big, unneccessary and maybe lack of permissions
+docker build -t pld/cleanbuild docker
diff --git a/docker-builder.sh b/docker-builder.sh
new file mode 100755 (executable)
index 0000000..6013d08
--- /dev/null
@@ -0,0 +1,71 @@
+#!/bin/sh
+set -e
+
+package=$1
+image=pld/cleanbuild 
+
+name=cleanbuild-$package
+
+# cleanup
+docker kill $name && docker rm $name || :
+
+#topdir=$(rpm -E %_topdir)
+dir=$(pwd)
+topdir=$dir/rpm
+cache=$dir/cache
+install -d $topdir/bin $cache/poldek
+
+# start the container
+docker run --name=$name -d \
+       -v $topdir:/home/services/builder/rpm \
+       -v $cache/poldek:/var/cache/poldek \
+       $image
+
+if [ ! -d $topdir/packages ]; then
+       uid=$(docker exec $name id -u builder)
+       gid=$(docker exec $name getgid builder)
+       sudo chown $uid:$gid $topdir
+       docker exec $name builder --init-rpm-dir
+fi
+
+# fetch sources
+docker exec $name builder -g $package
+
+git_tag=$(GIT_DIR=$topdir/packages/$package/.git git describe --tags --always)
+buildlog=${git_tag#auto/*/}.log
+
+# remove .la dependencies
+cat > $topdir/bin/cleanup-la <<'EOF'
+#!/bin/sh
+find /usr/lib{,64} -name "*.la" -print0 | xargs -0 grep -El "dependency_libs='.+'"
+exit 0
+EOF
+chmod +x $topdir/bin/cleanup-la
+docker exec $name sh -xc '~/rpm/bin/cleanup-la'
+
+while true; do
+       ./teeboth $buildlog docker exec $name builder -nn -bb -R $package && rc=$? || rc=$?
+
+       findbr=$package.findbr.log
+
+       export DOCKER_CONTAINER=$name
+       ./findbr rpm/BUILD/$package $buildlog > $findbr
+
+       installed_something=false
+       while read pkg msg; do
+               ./addbr $package "$pkg" "$msg"
+               installed_something=true
+       done < $findbr
+       rm -f $findbr
+
+       # go for another try
+       $installed_something && continue
+
+       # finished
+       if [ $rc -eq 0 ]; then
+               break
+       fi
+done
+
+# cleanup
+#docker kill $name && docker rm $name || :
diff --git a/findbr b/findbr
index 9e6fc5fb624e8ac6944250f53bde455af14a80c3..05917a3e46a24ce0e7a4038ba22ce5229b33d248 100755 (executable)
--- a/findbr
+++ b/findbr
@@ -4,14 +4,24 @@ use strict;
 use warnings;
 use IPC::Open2;
 use Cwd;
+use constant DOCKER => $ENV{'DOCKER_CONTAINER'} || 0;
 
 my $pwd = getcwd();
 # how to run poldek
 my @ignore = qw(vserver-packages python-devel-src);
-my @poldek = (qw(sudo poldek -n th-x86_64-ready), "--cachedir=$pwd/poldekcache",
-       "--skip-installed", "--conf=$pwd/poldekconf/poldek.conf",
+my @poldek;
+if (DOCKER) {
+       push(@poldek, "docker", "exec", DOCKER, "poldek");
+} else {
+       push(@poldek, q[sudo poldek -n th-x86_64-ready],
+               "--cachedir=$pwd/poldekcache",
+               "--conf=$pwd/poldekconf/poldek.conf",
+       );
+}
+push(@poldek, (
+       "--skip-installed", 
        "-O", "ignore=" . (join " ", @ignore)
-);
+));
 
 # if multiple packages provide some funcionality those will be selected:
 my %preferred = (
@@ -98,6 +108,7 @@ sub add_br
        print STDERR "\033[33;1madding: $pkg => $msg\033[0m\n";
 }
 
+use Data::Dumper;
 sub poldek_cmd
 {
        my $cmd = shift;
@@ -107,6 +118,8 @@ sub poldek_cmd
        my @read = <READ>;
        close READ;
 
+       print "READ: ".Dumper \@read;
+
        return @read if wantarray;
        return \@read;
 }
This page took 0.199966 seconds and 4 git commands to generate.