]> git.pld-linux.org Git - projects/cleanbuild.git/blame - cleanbuild-docker.sh
docker: chown package dir before container run
[projects/cleanbuild.git] / cleanbuild-docker.sh
CommitLineData
ce96f77c
ER
1#!/bin/sh
2set -e
3
4package=$1
ce96f77c 5
721c1de2 6test -n "$package" || exit 1
ce96f77c 7
ce96f77c 8dir=$(pwd)
47ec7a26 9image=registry.gitlab.com/pld-linux/cleanbuild
721c1de2 10name=cleanbuild-$package
ce96f77c 11topdir=$dir/rpm
02524fcf 12home=/home/services/builder
73d3710b
ER
13buildsize="4G"
14
15# cleanup first
1a32b5c6
ER
16docker kill $name >/dev/null 2>&1 || :
17docker rm $name >/dev/null 2>&1 || :
73d3710b 18
d7525b86 19install -d $topdir/logs
ce96f77c
ER
20
21# start the container
22docker run --name=$name -d \
02524fcf
ER
23 -v $topdir:$home/rpm \
24 -v $dir:$home/cleanbuild \
d7525b86
ER
25 -v $dir/cache/poldek:/var/cache/poldek \
26 -v $dir/cache/ccache/$package:/home/services/builder/.ccache \
73d3710b 27 --tmpfs $home/rpm/BUILD:rw,exec,nosuid,size=$buildsize \
ce96f77c
ER
28 $image
29
d7525b86 30# these paths need to be accessible for builder
125f8f48
ER
31docker exec --user=root $name chown builder:builder rpm rpm/logs rpm/BUILD .ccache
32
33if [ ! -d $topdir/rpm-build-tools ]; then
34 docker exec $name builder --init-rpm-dir
35fi
ce96f77c 36
4f6e2b51 37# fetch sources and install deps
fafb8173
ER
38if [ -d $topdir/packages/$package ]; then
39 # chown, as it might be different owner (root) modified outside container
40 docker exec --user=root $name chown -R builder:builder rpm/packages/$package
41fi
4f6e2b51
ER
42docker exec $name builder -g -R $package
43
44# prevent network access like pld builders do
45docker exec --user=root $name setfacl -m u:builder:--- /etc/resolv.conf
ce96f77c
ER
46
47git_tag=$(GIT_DIR=$topdir/packages/$package/.git git describe --tags --always)
d7525b86 48buildlog=rpm/logs/${git_tag#auto/*/}.log
ce96f77c
ER
49
50# remove .la dependencies
a39b682d 51docker exec --user=root $name cleanbuild/cleanup-la
ce96f77c
ER
52
53while true; do
d7525b86 54 docker exec $name cleanbuild/teeboth $buildlog builder -nn -bb -R $package --define 'clean exit 0' && rc=$? || rc=$?
ce96f77c
ER
55
56 findbr=$package.findbr.log
ded7b68b
ER
57 builddir=$(docker exec $name sh -c 'test ! -d rpm/BUILD/* || echo rpm/BUILD/*')
58 if [ -z "$builddir" ]; then
59 echo >&2 "No build dir. Build failed?"
60 exit 6
61 fi
110507d2
ER
62 # need root to run poldek
63 docker exec --user=root $name cleanbuild/findbr $builddir $buildlog > $findbr
ce96f77c
ER
64
65 installed_something=false
66 while read pkg msg; do
1a32b5c6 67 ./addbr rpm/packages/$package/$package.spec "$pkg" "$msg" || continue
ce96f77c
ER
68 installed_something=true
69 done < $findbr
70 rm -f $findbr
71
72 # go for another try
73 $installed_something && continue
74
ce96f77c 75 if [ $rc -eq 0 ]; then
69f15f52 76 # finished ok, cleanup
125f8f48 77 docker kill $name >/dev/null && docker rm $name >/dev/null || :
ce96f77c 78 fi
ce96f77c 79
69f15f52
ER
80 # propagate error
81 exit $rc
82done
This page took 1.413959 seconds and 4 git commands to generate.