13 image=registry.gitlab.com/pld-linux/cleanbuild
29 no|No|NO|false|False|FALSE|off|Off|OFF|N|n|0)
41 if is_no "${TMPFS:-true}" || [ "$TMPFS" -le 0 ]; then
45 echo "--tmpfs $home/rpm/BUILD:rw,exec,nosuid,size=$TMPFS"
50 docker kill $name >/dev/null 2>&1 || :
51 docker rm $name >/dev/null 2>&1 || :
53 install -d $topdir/logs
56 docker run --name=$name -d \
58 -v $topdir:$home/rpm \
59 -v $dir:$home/cleanbuild \
60 -v $dir/cache/poldek:/var/cache/poldek \
61 -v $dir/cache/ccache/$PACKAGE_NAME:$home/.ccache \
66 docker exec --user=root -w / $name usermod -d $home builder
68 # these paths need to be accessible for builder
69 docker exec --user=root -w / $name sh -c "cd $home && chown builder:builder rpm rpm/logs rpm/BUILD .ccache"
71 if [ ! -d $topdir/rpm-build-tools ]; then
72 docker exec $name builder --init-rpm-dir
77 # fetch sources and install deps
78 if [ -d $topdir/packages/$PACKAGE_NAME ]; then
79 # chown, as it might be different owner (root) modified outside container
80 docker exec --user=root -w / $name chown -R builder:builder $home/rpm/packages/$PACKAGE_NAME
82 docker exec $name builder -g $PACKAGE_NAME
84 # prevent network access like pld builders do
85 $NETWORKING || docker exec --user=root -w / $name setfacl -m u:builder:--- /etc/resolv.conf
87 git_tag=$(GIT_DIR=$topdir/packages/$PACKAGE_NAME/.git git describe --tags --always)
88 buildlog=rpm/logs/${git_tag#auto/*/}.log
94 docker exec $name builder -g -nn -R $PACKAGE_NAME
95 # remove .la dependencies
96 docker exec --user=root -w / $name $home/cleanbuild/cleanup-la
97 # reset findunusedbr state after deps install
98 docker exec --user=root -w / $name $home/cleanbuild/findunusedbr -c / $home/rpm/packages/$PACKAGE_NAME/$PACKAGE_NAME.spec
101 docker exec $name cleanbuild/teeboth $buildlog builder -nn -bb $PACKAGE_NAME --define '__spec_clean_body %{nil}' && rc=$? || rc=$?
103 findbr=$PACKAGE_NAME.findbr.log
104 builddir=$(docker exec $name sh -c 'test ! -d rpm/BUILD/* || echo rpm/BUILD/*')
105 if [ -z "$builddir" ]; then
106 echo >&2 "No build dir. Build failed?"
109 # need root to run poldek
110 docker exec --user=root -w / $name sh -c "cd $home && cleanbuild/findbr $builddir $buildlog" > $findbr
112 installed_something=false
113 while read pkg msg; do
114 ./addbr rpm/packages/$PACKAGE_NAME/$PACKAGE_NAME.spec "$pkg" "$msg" || continue
115 installed_something=true
120 $installed_something && continue
122 docker exec --user=root -w / $name $home/cleanbuild/findunusedbr -c / $home/rpm/packages/$PACKAGE_NAME/$PACKAGE_NAME.spec
124 if [ $rc -eq 0 ]; then
125 # finished ok, cleanup
126 docker kill $name >/dev/null && docker rm $name >/dev/null || :
136 t=$(getopt -o 'x' --long 'network,no-tmpfs,notmpfs,tmpfs:' -n "$PROGRAM" -- "$@")
137 [ $? != 0 ] && exit $?
148 --no-tmpfs|--notmpfs)
160 die "Internal error: [$1] not recognized!"
166 test "$#" -eq 1 || die "package not specified or excess arguments"
167 PACKAGE_NAME="${1%.spec}"
174 local name="cleanbuild-$PACKAGE_NAME"