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