]> git.pld-linux.org Git - projects/cleanbuild.git/blame - cleanbuild-docker.sh
builder: disable parallel build
[projects/cleanbuild.git] / cleanbuild-docker.sh
CommitLineData
ce96f77c
ER
1#!/bin/sh
2set -e
3
ec2abbf0 4package=${1%.spec}
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
8f52cf50 12home=/home/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 \
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
32docker exec --user=root -w / $name usermod -d $home builder
33
d7525b86 34# these paths need to be accessible for builder
8f52cf50 35docker exec --user=root -w / $name sh -c "cd $home && chown builder:builder rpm rpm/logs rpm/BUILD .ccache"
125f8f48
ER
36
37if [ ! -d $topdir/rpm-build-tools ]; then
38 docker exec $name builder --init-rpm-dir
39fi
ce96f77c 40
4f6e2b51 41# fetch sources and install deps
fafb8173
ER
42if [ -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 45fi
f5e5a14b 46docker exec $name builder -g $package
4f6e2b51
ER
47
48# prevent network access like pld builders do
8f52cf50 49docker exec --user=root -w / $name setfacl -m u:builder:--- /etc/resolv.conf
ce96f77c
ER
50
51git_tag=$(GIT_DIR=$topdir/packages/$package/.git git describe --tags --always)
d7525b86 52buildlog=rpm/logs/${git_tag#auto/*/}.log
ce96f77c 53
ce96f77c
ER
54
55while 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
94done
This page took 0.280928 seconds and 4 git commands to generate.